diff --git a/.github/workflows/codeql-analysis.yml b/.github/workflows/codeql-analysis.yml index 665d814a0..b18ce6af4 100644 --- a/.github/workflows/codeql-analysis.yml +++ b/.github/workflows/codeql-analysis.yml @@ -2,10 +2,10 @@ name: 'CodeQL' on: push: - branches: [master] + branches: [main] pull_request: # The branches below must be a subset of the branches above - branches: [master] + branches: [main] schedule: - cron: '16 12 * * 4' diff --git a/.github/workflows/job.test.yml b/.github/workflows/job.test.yml index 12b26df2e..1221ab3bc 100644 --- a/.github/workflows/job.test.yml +++ b/.github/workflows/job.test.yml @@ -3,14 +3,14 @@ name: CI on: push: branches: - - master - - 2.x + - main - 3.x + - 4.x pull_request: branches: - - master - - 2.x + - main - 3.x + - 4.x workflow_dispatch: # TODO: might need to tweak `group` @@ -30,7 +30,7 @@ env: ATEST_PROCESSES: 2 ATEST_RETRIES: 3 - JLPM_CMD: jlpm --ignore-optional --prefer-offline --frozen-lockfile + JLPM_CMD: jlpm install # Increase this value to reset all caches CACHE_EPOCH: 4 @@ -43,8 +43,8 @@ jobs: strategy: matrix: os: [ubuntu] - nodejs: ['>=14,<15.0.0a0'] - lab: ['>=3.6.0,<4.0.0a0'] + nodejs: ['>=16,<17.0.0a0'] + lab: ['>=4.0.5,<5.0.0a0'] r: ['>=4'] steps: - uses: actions/checkout@v3 @@ -84,7 +84,7 @@ jobs: if: steps.cache-node-modules.outputs.cache-hit != 'true' uses: actions/cache@v3 with: - path: .yarn-packages + path: '.yarn/cache' key: | ${{ env.CACHE_EPOCH }}-yarn-${{ runner.os }}-${{ hashFiles('yarn.lock') }} restore-keys: | @@ -99,7 +99,7 @@ jobs: run: jlpm build - name: Run frontend unit tests - run: jlpm test + run: jlpm test --no-bail - name: Lint backend run: python scripts/lint.py @@ -123,8 +123,8 @@ jobs: strategy: matrix: os: [ubuntu] - nodejs: ['>=14,<15.0.0a0'] - lab: ['>=3.6.0,<4.0.0a0'] + nodejs: ['>=16,<17.0.0a0'] + lab: ['>=4.0.0,<5.0.0a0'] r: ['>=4'] steps: - uses: actions/checkout@v3 @@ -160,7 +160,7 @@ jobs: if: steps.cache-node-modules.outputs.cache-hit != 'true' uses: actions/cache@v3 with: - path: .yarn-packages + path: '.yarn/cache' key: | ${{ env.CACHE_EPOCH }}-yarn-${{ runner.os }}-${{ hashFiles('yarn.lock') }} restore-keys: | @@ -214,18 +214,18 @@ jobs: fail-fast: false matrix: os: ['ubuntu', 'macos', 'windows'] - python: ['3.8', '3.10'] + python: ['3.8', '3.11'] include: - python: '3.8' - # Node 16 end-of-life: April 2024 + # Node 16 end-of-life: 2023-09-11 nodejs: '>=16,<17.0.0.a0' r: '>=4' - lab: '>=3.6.0,<4' - - python: '3.10' - # Node 16 end-of-life: April 2024 - nodejs: '>=16,<17.0.0.a0' + lab: '>=4,<5' + - python: '3.11' + # Node 18 end-of-life: 2025-04-30 + nodejs: '>=18,<19.0.0.a0' r: '>=4' - lab: '>=3.6.0,<4' + lab: '>=4,<5' steps: - uses: actions/checkout@v3 @@ -264,7 +264,7 @@ jobs: if: steps.cache-node-modules.outputs.cache-hit != 'true' uses: actions/cache@v3 with: - path: .yarn-packages + path: '.yarn/cache' key: | ${{ env.CACHE_EPOCH }}-yarn-${{ runner.os }}-${{ hashFiles('yarn.lock') }} restore-keys: | @@ -298,11 +298,6 @@ jobs: jupyter server extension list jupyter server extension list 2>&1 | grep -ie "jupyter_lsp.*enabled" - - - name: List notebook server extensions - run: | - jupyter serverextension list - jupyter serverextension list 2>&1 | grep -ie "jupyter_lsp.*enabled" - - - name: List frontend extensions run: | jupyter labextension list @@ -351,23 +346,20 @@ jobs: max-parallel: 3 matrix: os: ['ubuntu', 'macos', 'windows'] - python: ['3.8', '3.9', '3.10', 'pypy-3.8'] - exclude: - - os: windows - python: pypy-3.7 + python: ['3.8', '3.11', 'pypy-3.8'] include: - python: '3.8' dist: 'jupyter*lsp*.whl' - lab: '>=3.6,<3.7' - - python: '3.9' + lab: '>=4,<5' + - python: '3.8' dist: 'jupyter*lsp*.tar.gz' - lab: '>=3.6,<4' - - python: '3.10' + lab: '>=4,<5' + - python: '3.11' dist: 'jupyter*lsp*.whl' - lab: '>=3.6,<4' + lab: '>=4,<5' - python: 'pypy-3.8' dist: 'jupyter*lsp*.tar.gz' - lab: '>=3.6,<4' + lab: '>=4,<5' - os: 'windows' py_cmd: python - os: 'macos' @@ -409,13 +401,13 @@ jobs: fail-fast: false matrix: os: [ubuntu] - python: ['3.8', '3.10'] - nodejs: ['14'] + python: ['3.8', '3.11'] + nodejs: ['18'] include: - python: '3.8' - lab: '>=3.6,<3.7' - - python: '3.10' - lab: '>=3.6,<4' + lab: '>=4,<5' + - python: '3.11' + lab: '>=4,<5' steps: - name: Install Python uses: actions/setup-python@v4 @@ -434,8 +426,6 @@ jobs: run: python -m pip install --upgrade pip wheel setuptools - name: Install JupyterLab run: python -m pip install 'jupyterlab${{ matrix.lab }}' - - name: Install Notebook (to test serverextension) - run: python -m pip install 'notebook' - name: Install the server package run: cd dist && python -m pip install -vv jupyter_lsp*.whl - name: install the source extension @@ -445,7 +435,5 @@ jobs: set -eux jupyter labextension list jupyter server extension list - jupyter serverextension list jupyter labextension list 2>&1 | grep -ie "jupyterlab-lsp.*enabled.*ok" - jupyter server extension list 2>&1 | grep -ie "jupyter_lsp.*enabled" - - jupyter serverextension list 2>&1 | grep -ie "jupyter_lsp.*enabled" - diff --git a/.gitignore b/.gitignore index 87ec95ada..731890324 100644 --- a/.gitignore +++ b/.gitignore @@ -122,3 +122,8 @@ _build # Built labextensions python_packages/*/*/labextensions/ + +# Berry +.pnp.cjs +.pnp.loader.mjs +.yarn/ diff --git a/.yarnrc b/.yarnrc deleted file mode 100644 index c8a06d07b..000000000 --- a/.yarnrc +++ /dev/null @@ -1,2 +0,0 @@ -yarn-offline-mirror "./.yarn-packages" -yarn-offline-mirror-pruning true diff --git a/.yarnrc.yml b/.yarnrc.yml new file mode 100644 index 000000000..3186f3f07 --- /dev/null +++ b/.yarnrc.yml @@ -0,0 +1 @@ +nodeLinker: node-modules diff --git a/CHANGELOG.md b/CHANGELOG.md index 9c29c8589..4b4f2304c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,12 @@ ## Changelog +### `@jupyter-lsp/jupyterlab-lsp 5.0.0-alpha.0` + +- maintenance: + - support JupyterLab 4 + +Requires JupyterLab `>=4.0.5,<5.0.0a0` + ### `@jupyter-lsp/jupyterlab-lsp 4.2.0` (2023-05-28) - features: diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index b40649af9..94571c134 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -33,7 +33,7 @@ Development requires, at a minimum: - `nodejs >=16,!=17,<19` - `python >=3.8,<3.11.0a0` -- `jupyterlab >=3.6.0,<4.0.0a0` +- `jupyterlab >=4.0.5,<5.0.0a0` It is recommended to use a virtual environment (e.g. `virtualenv` or `conda env`) for development. diff --git a/README.md b/README.md index 283540eb5..beaf2ebd6 100644 --- a/README.md +++ b/README.md @@ -1,11 +1,11 @@ # Language Server Protocol integration for Jupyter(Lab) -[![tests](https://github.com/jupyter-lsp/jupyterlab-lsp/workflows/CI/badge.svg)](https://github.com/jupyter-lsp/jupyterlab-lsp/actions?query=workflow%3ACI+branch%3Amaster) +[![tests](https://github.com/jupyter-lsp/jupyterlab-lsp/workflows/CI/badge.svg)](https://github.com/jupyter-lsp/jupyterlab-lsp/actions?query=workflow%3ACI+branch%3Amain) [![Documentation Status](https://readthedocs.org/projects/jupyterlab-lsp/badge/?version=latest)](https://jupyterlab-lsp.readthedocs.io/en/latest/?badge=latest) [![Python Demo](https://img.shields.io/badge/demo-Python-blue)](https://mybinder.org/v2/gh/jupyter-lsp/demo-python/main?urlpath=lab) [![R Demo](https://img.shields.io/badge/demo-R-blue)](https://mybinder.org/v2/gh/jupyter-lsp/demo-r/main?urlpath=lab) [![Julia Demo](https://img.shields.io/badge/demo-Julia-blue)](https://mybinder.org/v2/gh/jupyter-lsp/demo-julia/main?urlpath=lab) -[![Binder](https://img.shields.io/badge/launch-dev_version-blue)](https://mybinder.org/v2/gh/jupyter-lsp/jupyterlab-lsp/master?urlpath=lab%2Ftree%2Fexamples%2FPython.ipynb) +[![Binder](https://img.shields.io/badge/launch-dev_version-blue)](https://mybinder.org/v2/gh/jupyter-lsp/jupyterlab-lsp/main?urlpath=lab%2Ftree%2Fexamples%2FPython.ipynb) **[Installation](#installation) | [Configuring](./docs/Configuring.ipynb) | [Changelog](./CHANGELOG.md) | [Roadmap](./docs/Roadmap.ipynb) | [Contributing](./CONTRIBUTING.md) | [Extending](./docs/Extending.ipynb)** @@ -19,20 +19,20 @@ Hover over any piece of code; if an underline appears, you can press CtrlAlt + :computer_mouse: to jump to definitions/references (you can change it to Ctrl/ in settings); use Alt + o to jump back. -![jump](https://raw.githubusercontent.com/jupyter-lsp/jupyterlab-lsp/master/examples/screenshots/jump_to_definition.png) +![jump](https://raw.githubusercontent.com/jupyter-lsp/jupyterlab-lsp/main/examples/screenshots/jump_to_definition.png) ### Highlight References @@ -44,19 +44,19 @@ Place your cursor on a variable, function, etc and all the usages will be highli completion. - You can choose to receive the completion suggestions as you type by enabling `continuousHinting` setting. -![invoke](https://raw.githubusercontent.com/jupyter-lsp/jupyterlab-lsp/master/examples/screenshots/autocompletion.gif) +![invoke](https://raw.githubusercontent.com/jupyter-lsp/jupyterlab-lsp/main/examples/screenshots/autocompletion.gif) ### Automatic Signature Suggestions Function signatures will automatically be displayed -![signature](https://raw.githubusercontent.com/jupyter-lsp/jupyterlab-lsp/master/examples/screenshots/signature.png) +![signature](https://raw.githubusercontent.com/jupyter-lsp/jupyterlab-lsp/main/examples/screenshots/signature.png) ### Kernel-less Autocompletion Advanced static-analysis autocompletion without a running kernel -![autocompletion](https://raw.githubusercontent.com/jupyter-lsp/jupyterlab-lsp/master/examples/screenshots/completions-Julia-Python-R.gif) +![autocompletion](https://raw.githubusercontent.com/jupyter-lsp/jupyterlab-lsp/main/examples/screenshots/completions-Julia-Python-R.gif) #### The runtime kernel suggestions are still there @@ -76,7 +76,7 @@ setting; Or add both if you like to code in hardcore mode and get no completions Rename variables, functions and more, in both: notebooks and the file editor. Use the context menu option or the F2 shortcut to invoke. -![rename](https://raw.githubusercontent.com/jupyter-lsp/jupyterlab-lsp/master/examples/screenshots/rename.png) +![rename](https://raw.githubusercontent.com/jupyter-lsp/jupyterlab-lsp/main/examples/screenshots/rename.png) ### Diagnostics panel @@ -84,13 +84,13 @@ Sort and jump between the diagnostics using the diagnostics panel. Open it searching for "Show diagnostics panel" in JupyterLab commands palette or from the context menu. Use context menu on rows in the panel to filter out diagnostics or copy their message. -![panel](https://raw.githubusercontent.com/jupyter-lsp/jupyterlab-lsp/master/examples/screenshots/panel.png) +![panel](https://raw.githubusercontent.com/jupyter-lsp/jupyterlab-lsp/main/examples/screenshots/panel.png) ## Prerequisites You will need to have both of the following installed: -- JupyterLab >=3.6.0,<4.0.0a0 +- JupyterLab >=4.0.5,<5.0.0a0 - Python 3.8+ In addition, if you wish to use javascript, html, markdown or any other NodeJS-based language server you will need to have appropriate NodeJS version installed. @@ -113,9 +113,9 @@ Use of a python `virtualenv` or a conda env is also recommended. 1. install JupyterLab and the extensions ```bash - conda install -c conda-forge 'jupyterlab>=3.0.0,<4.0.0a0' jupyterlab-lsp + conda install -c conda-forge 'jupyterlab>=4.0.0,<5.0.0a0' jupyterlab-lsp # or - pip install 'jupyterlab>=3.0.0,<4.0.0a0' jupyterlab-lsp + pip install 'jupyterlab>=4.0.0,<5.0.0a0' jupyterlab-lsp ``` > Note: `jupyterlab-lsp` provides both the server extension and the lab extension. diff --git a/atest/03_Notebook.robot b/atest/03_Notebook.robot index 29bd14028..a2e4e87eb 100644 --- a/atest/03_Notebook.robot +++ b/atest/03_Notebook.robot @@ -9,7 +9,8 @@ Test Setup Try to Close All Tabs Python [Setup] Setup Notebook Python Python.ipynb ${diagnostic} = Set Variable W291 trailing whitespace (pycodestyle) - Wait Until Page Contains Element css:.cm-lsp-diagnostic[title="${diagnostic}"] timeout=35s + # TODO: no title for diagnostics; we can get the title with JS via `element.cmView.mark.spec.diagnostic.message` but this is not selectable + Wait Until Page Contains Element css:.cm-lintRange[title="${diagnostic}"] timeout=35s Capture Page Screenshot 01-python.png [Teardown] Clean Up After Working With File Python.ipynb diff --git a/atest/04_Interface/Statusbar.robot b/atest/04_Interface/Statusbar.robot index 40371f86a..403b6b3c8 100644 --- a/atest/04_Interface/Statusbar.robot +++ b/atest/04_Interface/Statusbar.robot @@ -52,7 +52,7 @@ Status Changes Between Notebooks Setup Notebook Python Python.ipynb Wait Until Fully Initialized Open New Notebook - Element Should Contain ${STATUSBAR} Waiting... + Element Should Contain ${STATUSBAR} Waiting… Wait Until Fully Initialized Switch To Tab Python.ipynb Wait Until Fully Initialized diff --git a/atest/05_Features/Completion.robot b/atest/05_Features/Completion.robot index 398840462..3ae35b818 100644 --- a/atest/05_Features/Completion.robot +++ b/atest/05_Features/Completion.robot @@ -12,6 +12,7 @@ Test Tags feature:completion ${COMPLETER_BOX} css:.jp-Completer.jp-HoverBox ${DOCUMENTATION_PANEL} css:.jp-Completer-docpanel ${KERNEL_BUSY_INDICATOR} css:.jp-Notebook-ExecutionIndicator[data-status="busy"] +${MANAGER PLUGIN ID} @jupyterlab/completer-extension:manager *** Test Cases *** @@ -148,6 +149,8 @@ Completes In Strings Or Python Dictionaries Continuous Hinting Works [Setup] Prepare File for Editing Python completion completion.py Configure JupyterLab Plugin {"continuousHinting": true} plugin id=${COMPLETION PLUGIN ID} + # TODO: remove once we resolve https://github.com/jupyterlab/jupyterlab/issues/15022 + Configure JupyterLab Plugin {"autoCompletion": true} plugin id=${MANAGER PLUGIN ID} Place Cursor In File Editor At 9 2 Wait For Ready State Press Keys None d @@ -193,7 +196,7 @@ User Can Select Lowercase After Starting Uppercase Mid Token Completions Do Not Overwrite # `dispdata` → `display_tabledata` Place Cursor In Cell Editor At 9 line=1 character=4 - Wait For Our Completer To Replace Native In Cell 9 + Wait For Our Completer To Initialize Trigger Completer Completer Should Suggest display_table Select Completer Suggestion display_table @@ -201,7 +204,7 @@ Mid Token Completions Do Not Overwrite Wait Until Keyword Succeeds 40x 0.5s Cell Editor Should Equal 9 display_tabledata # `display` → `display_table` Place Cursor In Cell Editor At 11 line=1 character=4 - Wait For Our Completer To Replace Native In Cell 11 + Wait For Our Completer To Initialize Trigger Completer Wait For Ready State Completer Should Suggest display_table @@ -230,6 +233,7 @@ Kernel And LSP Completions Merge Prefix Conflicts Are Resolved Wait Until Keyword Succeeds 40x 0.5s Cell Editor Should Equal 15 import os.path Triggers Completer On Dot + Configure JupyterLab Plugin {"autoCompletion": true} plugin id=${MANAGER PLUGIN ID} Enter Cell Editor 2 line=1 Press Keys None . Wait Until Keyword Succeeds 10x 0.5s Cell Editor Should Equal 2 list. @@ -296,7 +300,7 @@ Completes Correctly With R Double And Triple Colon [Setup] Prepare File for Editing R completion completion.R Place Cursor In File Editor At 2 7 Wait Until Fully Initialized - Wait For Our Completer To Replace Native In File Editor + Wait For Our Completer To Initialize Trigger Completer Completer Should Suggest .print.via.format Select Completer Suggestion .print.via.format @@ -319,9 +323,10 @@ Completes Large Namespaces Shows Documentation With CompletionItem Resolve [Setup] Prepare File for Editing R completion completion.R + Configure JupyterLab Plugin {"showDocumentationPanel": true} plugin id=${MANAGER PLUGIN ID} Place Cursor In File Editor At 8 7 Wait Until Fully Initialized - Wait For Our Completer To Replace Native In File Editor + Wait For Our Completer To Initialize Trigger Completer Completer Should Suggest print.data.frame # if data.frame is not active, activate it (it should be in top 10 on any platform) @@ -348,7 +353,7 @@ Completes In R Magics # - R lanugage server is very sensitive to off-by-one errors (see https://github.com/REditorSupport/languageserver/issues/395) # '%%R\n librar' Enter Cell Editor 22 line=2 - Wait For Our Completer To Replace Native In Cell 22 + Wait For Our Completer To Initialize Trigger Completer Completer Should Suggest library # '%R lib' @@ -358,7 +363,7 @@ Completes In R Magics Completes Paths In Strings Enter Cell Editor 26 - Wait For Our Completer To Replace Native In Cell 26 + Wait For Our Completer To Initialize Press Keys None LEFT Trigger Completer Press Keys None ENTER @@ -371,13 +376,11 @@ Setup Completion Test Get Cell Editor Content [Arguments] ${cell_nr} - ${content} = Execute JavaScript - ... return document.querySelector('.jp-Cell:nth-child(${cell_nr}) .CodeMirror').CodeMirror.getValue() + ${content} = Get Editor Content .jp-Cell:nth-child(${cell_nr}) RETURN ${content} Get File Editor Content - ${content} = Execute JavaScript - ... return document.querySelector('.jp-FileEditorCodeWrapper .CodeMirror').CodeMirror.getValue() + ${content} = Get Editor Content .jp-FileEditorCodeWrapper RETURN ${content} Cell Editor Should Equal @@ -466,14 +469,5 @@ Should Complete While Kernel Is Busy # Confirm that the kernel indicator was busy all along Page Should Contain Element ${KERNEL_BUSY_INDICATOR} -Wait For Our Completer To Replace Native In File Editor - # Normally the completion adapter taking time to initialise is not a problem - # but because the token-based completion fallback would break some test example - # if it kicked in (by instant-completing some token) so we try to avoid it - # TODO remove after migrating to JupyterLab 4.0 native adapters. - Wait Until Page Contains Element css:.jp-FileEditor .lsp-completer-enabled - -Wait For Our Completer To Replace Native In Cell - [Arguments] ${cell_nr} - # TODO remove after migrating to JupyterLab 4.0 native adapters. - Wait Until Page Contains Element css:.jp-Cell:nth-child(${cell_nr}) .lsp-completer-enabled +Wait For Our Completer To Initialize + Wait Until Page Contains Element css:.body[data-lsp-completer-layout] diff --git a/atest/05_Features/Hover.robot b/atest/05_Features/Hover.robot index ad2f7e781..b1f4ef3fb 100644 --- a/atest/05_Features/Hover.robot +++ b/atest/05_Features/Hover.robot @@ -84,7 +84,7 @@ Update hover after character deletion Last Occurrence [Arguments] ${symbol} ${sel} = Set Variable If "${symbol}".startswith(("xpath", "css")) ${symbol} - ... xpath:(//span[@role="presentation"][contains(., "${symbol}")])[last()] + ... xpath:(//div[@class="cm-line"][contains(., "${symbol}")])[last()] RETURN ${sel} Trigger Automatically By Hover diff --git a/atest/Keywords.resource b/atest/Keywords.resource index e1d1623a6..a11b4b217 100644 --- a/atest/Keywords.resource +++ b/atest/Keywords.resource @@ -321,29 +321,33 @@ Gently Reset Workspace Enter Cell Editor [Arguments] ${cell_nr} ${line}=1 - Click Element css:.jp-Cell:nth-child(${cell_nr}) .CodeMirror-line:nth-child(${line}) - Wait Until Page Contains Element css:.jp-Cell:nth-child(${cell_nr}) .CodeMirror-focused + Click Element css:.jp-Cell:nth-child(${cell_nr}) .cm-line:nth-child(${line}) + Wait Until Page Contains Element css:.jp-Cell:nth-child(${cell_nr}) .cm-focused Open Context Menu Over Cell Editor [Arguments] ${cell_nr} ${line}=1 Enter Cell Editor ${cell_nr} line=${line} - Open Context Menu Over css:.jp-Cell:nth-child(${cell_nr}) .CodeMirror-line:nth-child(${line}) + Open Context Menu Over css:.jp-Cell:nth-child(${cell_nr}) .cm-line:nth-child(${line}) Place Cursor In Cell Editor At [Arguments] ${cell_nr} ${line} ${character} Enter Cell Editor ${cell_nr} ${line} Execute JavaScript - ... return document.querySelector('.jp-Cell:nth-child(${cell_nr}) .CodeMirror').CodeMirror.setCursor({line: ${line} - 1, ch: ${character}}) + ... var view = document.querySelector('.jp-Cell:nth-child(${cell_nr}) .cm-content').cmView.view; + ... var pos = view.doc.line(${line}).from + ${character}; + ... return view.dispatch({selection: {anchor: pos, head: pos}}); Enter File Editor - Click Element css:.jp-FileEditor .CodeMirror - Wait Until Page Contains Element css:.jp-FileEditor .CodeMirror-focused + Click Element css:.jp-FileEditor .cm-editor + Wait Until Page Contains Element css:.jp-FileEditor .cm-focused Place Cursor In File Editor At [Arguments] ${line} ${character} Enter File Editor Execute JavaScript - ... return document.querySelector('.jp-FileEditor .CodeMirror').CodeMirror.setCursor({line: ${line} - 1, ch: ${character}}) + ... var view = document.querySelector('.jp-FileEditor .cm-content').cmView.view; + ... var pos = view.doc.line(${line}).from + ${character}; + ... return view.dispatch({selection: {anchor: pos, head: pos}}); Wait Until Fully Initialized Wait Until Element Contains ${STATUSBAR} Fully initialized timeout=60s @@ -398,11 +402,15 @@ Open in Advanced Settings Set Editor Content [Arguments] ${text} ${css}=${EMPTY} - Execute JavaScript return document.querySelector('${css} .CodeMirror').CodeMirror.setValue(`${text}`) + Wait Until Page Contains Element css:${css} .cm-content + Execute JavaScript + ... var doc = document.querySelector('${css} .cm-content').cmView.view.doc; + ... return doc.replace(0, doc.length, `${text}`); Get Editor Content [Arguments] ${css}=${EMPTY} - ${content} = Execute JavaScript return document.querySelector('${css} .CodeMirror').CodeMirror.getValue() + Wait Until Page Contains Element css:${css} .cm-content + ${content} = Execute JavaScript return document.querySelector('${css} .cm-content').cmView.view.doc.toString() RETURN ${content} Configure JupyterLab Plugin diff --git a/atest/Variables.resource b/atest/Variables.resource index 942cc6357..a0bfd2e85 100644 --- a/atest/Variables.resource +++ b/atest/Variables.resource @@ -49,9 +49,9 @@ ${MENU SETTINGS} xpath://div[contains(@class, 'lm-MenuBar-itemLab ${MENU EDITOR THEME} ... xpath://div[contains(@class, 'lm-Menu-itemLabel')][contains(text(), "Text Editor Theme")] ${LAB MENU} css:.lm-Menu -${CM CURSOR} css:.CodeMirror-cursor +${CM CURSOR} css:.cm-cursor ${CM CURSORS} -... css:.jp-MainAreaWidget:not(.lm-mod-hidden) .CodeMirror-cursors:not([style='visibility: hidden']) +... css:.jp-MainAreaWidget:not(.lm-mod-hidden) .cm-cursorLayer:not([style='visibility: hidden']) # settings ${LSP PLUGIN ID} @jupyter-lsp/jupyterlab-lsp:plugin ${COMPLETION PLUGIN ID} @jupyter-lsp/jupyterlab-lsp:completion @@ -63,7 +63,7 @@ ${CSS USER SETTINGS} .jp-SettingsRawEditor-user ${JLAB XP CLOSE SETTINGS} ... ${JLAB XP DOCK TAB}\[contains(., 'Settings')]/*[contains(@class, 'm-TabBar-tabCloseIcon')] # diagnostics -${CSS DIAGNOSTIC} css:.cm-lsp-diagnostic +${CSS DIAGNOSTIC} css:.cm-lintRange # log messages @{KNOWN BAD ERRORS} ... pylsp_jsonrpc.endpoint - Failed to handle notification diff --git a/atest/fixtures/overrides.json b/atest/fixtures/overrides.json index 726fe9625..c4cb73ca9 100644 --- a/atest/fixtures/overrides.json +++ b/atest/fixtures/overrides.json @@ -9,6 +9,12 @@ "pylsp.plugins.flake8.enabled": true, "pylsp.plugins.pyflakes.enabled": false } + }, + "pyright": { + "priority": 500, + "serverSettings": { + "python.analysis.useLibraryCodeForTypes": false + } } } } diff --git a/binder/environment.yml b/binder/environment.yml index e35de7505..dcb621bdf 100644 --- a/binder/environment.yml +++ b/binder/environment.yml @@ -7,9 +7,10 @@ channels: dependencies: # runtime dependencies - python >=3.8,<3.11.0a0 - - jupyterlab >=3.6.0,<4.0.0a0 + - jupyterlab >=4.0.5,<5.0.0a0 - jupyter_server >=1.1.2 - - retrolab >=0.3.0,<0.4 + # TODO: uncomment once Notebook 7 is released + #- notebook >= 7.0 # build dependencies - nodejs >=16,!=17,<19 # for python language server (and development) diff --git a/docs/conf.py b/docs/conf.py index e800933bc..192d54809 100644 --- a/docs/conf.py +++ b/docs/conf.py @@ -121,4 +121,4 @@ def setup(app): """Runs before the "normal business" of sphinx. Don't go too crazy here.""" app.add_css_file("css/custom.css") - subprocess.check_call(["jlpm", "--ignore-optional"]) + subprocess.check_call(["jlpm"]) diff --git a/docs/rtd.yml b/docs/rtd.yml index 45031023f..3748c5101 100644 --- a/docs/rtd.yml +++ b/docs/rtd.yml @@ -7,7 +7,7 @@ channels: dependencies: - importlib_metadata - - jupyterlab >=3.6.0,<4.0.0a0 + - jupyterlab >=4.0.5,<5.0.0a0 - myst-nb - nodejs >=16,!=17,<19 - pandas diff --git a/package.json b/package.json index 26465052a..8a4c41e0a 100644 --- a/package.json +++ b/package.json @@ -1,5 +1,4 @@ { - "dependencies": {}, "devDependencies": { "@typescript-eslint/eslint-plugin": "^5.46.0", "@typescript-eslint/parser": "^5.46.0", @@ -13,11 +12,10 @@ "eslint-plugin-prettier": "^4.2.1", "eslint-plugin-react": "^7.31.11", "husky": "^3.0.9", - "jest-github-actions-reporter": "^1.0.3", - "lerna": "^6.0.0", + "lerna": "~6.5.0", "npm-run-all": "^4.1.5", "precise-commits": "^1.0.2", - "prettier": "^2.8.1", + "prettier": "^2.8.8", "pyright": "^1.1", "source-map-loader": "^4.0.1", "sql-language-server": "^1.2.1", @@ -29,7 +27,7 @@ "vscode-json-languageserver-bin": "^1.0.1", "vscode-json-languageservice": "^4.1.8", "yaml-language-server": "^1.0.0", - "yarn-deduplicate": "^6.0.0" + "yarn-deduplicate": "^6.0.2" }, "husky": { "hooks": {} @@ -41,15 +39,15 @@ }, "private": true, "resolutions": { - "**/node-gyp": "8.4.1", "prettier": "^2.8.1", "typescript": "~4.9.4", - "decode-uri-component": "^0.2.1" + "decode-uri-component": "^0.2.1", + "jest": "^29.0.0" }, "scripts": { - "bootstrap": "jlpm --no-optional --prefer-offline && jlpm deduplicate && lerna bootstrap && jlpm clean && jlpm build && jlpm lint", + "bootstrap": "jlpm & jlpm deduplicate && lerna bootstrap && jlpm clean && jlpm build && jlpm lint", "deduplicate": "yarn-deduplicate -s fewer --fail", - "build": "jlpm build:schema && jlpm build:meta && jlpm build:ws && jlpm build:labextension", + "build": "jlpm build:schema && jlpm build:meta && jlpm build:labextension", "build:schema": "lerna run build:schema --stream", "build:meta": "lerna run build --stream --scope @jupyter-lsp/jupyterlab-lsp-metapackage", "build:labextension": "lerna run build:labextension --stream", @@ -57,7 +55,6 @@ "build:theme-vscode": "lerna run build --stream --scope @jupyter-lsp/theme-vscode", "build:theme-material": "lerna run build --stream --scope @jupyter-lsp/theme-material", "build:jupyterlab-lsp": "lerna run build --stream --scope @jupyter-lsp/jupyterlab-lsp", - "build:ws": "lerna run build --stream --scope lsp-ws-connection", "build:jump": "lerna run build --stream --scope @jupyter-lsp/code-jumpers", "watch": "lerna run --parallel watch", "bundle": "lerna run --parallel bundle", diff --git a/packages/.eslintrc.js b/packages/.eslintrc.js index 20d7e9767..7f005d820 100644 --- a/packages/.eslintrc.js +++ b/packages/.eslintrc.js @@ -89,8 +89,7 @@ module.exports = { 'no-async-promise-executor': 'off', 'prefer-spread': 'off', 'react/display-name': 'off', - // TODO: re-enable once the lsp-ws-connection tests are re-written to jest - 'jest/no-done-callback': 'off' + 'jest/no-done-callback': 2 }, settings: { react: { diff --git a/packages/_example-extractor/babel.config.js b/packages/_example-extractor/babel.config.js index 8b5c76420..a49409f7d 100644 --- a/packages/_example-extractor/babel.config.js +++ b/packages/_example-extractor/babel.config.js @@ -1 +1 @@ -module.exports = require('@jupyterlab/testutils/lib/babel.config'); +module.exports = require('@jupyterlab/testing/lib/babel-config.js').default; diff --git a/packages/_example-extractor/jest.config.js b/packages/_example-extractor/jest.config.js index fd21ca40f..087adcd4b 100644 --- a/packages/_example-extractor/jest.config.js +++ b/packages/_example-extractor/jest.config.js @@ -1,35 +1,40 @@ -const func = require('@jupyterlab/testutils/lib/jest-config'); +const func = require('@jupyterlab/testing/lib/jest-config'); const upstream = func('jupyterlab-lsp', __dirname); +const reuseFromUpstream = [ + 'moduleFileExtensions', + 'moduleNameMapper', + 'setupFilesAfterEnv', + 'testPathIgnorePatterns', + 'setupFiles', + 'testEnvironment' +]; + const esModules = [ '@jupyterlab/', - '@retrolab/', + '@jupyter-notebook/', 'lib0', + 'nanoid', + 'vscode-ws-jsonrpc', 'y\\-protocols', 'y\\-websocket', '@jupyter/ydoc', 'yjs' ].join('|'); -const reuseFromUpstream = [ - 'moduleFileExtensions', - 'moduleNameMapper', - 'setupFiles', - 'setupFilesAfterEnv', - 'testPathIgnorePatterns' -]; - let local = { globals: { 'ts-jest': { tsconfig: 'tsconfig.json' } }, testRegex: `.*\.spec\.tsx?$`, + transformIgnorePatterns: [`/node_modules/(?!${esModules}).*`], + testLocationInResults: true, transform: { '\\.(ts|tsx)?$': 'ts-jest', '\\.(js|jsx)?$': './transform.js', - '\\.svg$': 'jest-raw-loader' + '\\.svg$': '@jupyterlab/testing/lib/jest-raw-loader.js' }, - transformIgnorePatterns: [`/node_modules/(?!${esModules}).*`], - testLocationInResults: true, - reporters: [...upstream['reporters'], 'jest-github-actions-reporter'] + reporters: [ + ...new Set([...upstream['reporters'], 'github-actions', 'summary']) + ] }; for (const option of reuseFromUpstream) { diff --git a/packages/_example-extractor/package.json b/packages/_example-extractor/package.json index c02ff124f..e7baa12a4 100644 --- a/packages/_example-extractor/package.json +++ b/packages/_example-extractor/package.json @@ -11,17 +11,15 @@ "LICENSE" ], "dependencies": { - "@jupyter-lsp/jupyterlab-lsp": "^4.0.0-alpha.0" + "@jupyter-lsp/jupyterlab-lsp": "^5.0.0-alpha.0" }, "devDependencies": { - "@babel/preset-env": "^7.4.3", - "@jupyterlab/application": "^3.3.0", - "@types/chai": "^4.1.7", - "@types/jest": "^23.3.11", - "chai": "^4.2.0", - "jest": "^26.0.0", - "ts-jest": "^26.4.3", - "typescript": "~4.9.4" + "@jupyterlab/application": "^4.0.5", + "@jupyterlab/testing": "^4.0.5", + "@types/jest": "^29.5.4", + "jest": "^29.2.0", + "rimraf": "^3.0.0", + "typescript": "~5.0.4" }, "jupyterlab": { "extension": true diff --git a/packages/_example-extractor/src/api.spec.ts b/packages/_example-extractor/src/api.spec.ts index e33dd4afd..0cc308030 100644 --- a/packages/_example-extractor/src/api.spec.ts +++ b/packages/_example-extractor/src/api.spec.ts @@ -1,5 +1,4 @@ import { IExtractedCode } from '@jupyter-lsp/jupyterlab-lsp'; -import { expect } from 'chai'; import { extractor } from '.'; @@ -9,37 +8,37 @@ bar let FIXTURES: { [key: string]: IExtractedCode } = { 'does extract foo': { - foreign_code: 'bar\n', - host_code: EXAMPLE, + foreignCode: 'bar\n', + hostCode: EXAMPLE, range: { end: { column: 0, line: 2 }, start: { column: 0, line: 1 } }, - virtual_shift: null + virtualShift: null }, 'does NOT extract bar': { - foreign_code: null, - host_code: 'baz', + foreignCode: null, + hostCode: 'baz', range: null, - virtual_shift: null + virtualShift: null }, 'does NOT extract foobar': { - foreign_code: null, - host_code: EXAMPLE.replace('foo', 'foobar'), + foreignCode: null, + hostCode: EXAMPLE.replace('foo', 'foobar'), range: null, - virtual_shift: null + virtualShift: null } }; FIXTURES['does extract foo -v bar'] = { ...FIXTURES['does extract foo'], - host_code: EXAMPLE.replace('foo', 'foo -v') + hostCode: EXAMPLE.replace('foo', 'foo -v') }; describe('The foo extractor', () => { test.each(Object.entries(FIXTURES))( '%s', (_: string, expected: IExtractedCode) => { - const extracted = extractor.extract_foreign_code(expected.host_code!); - expect(extracted).to.have.length(1); - expect(extracted[0]).to.deep.equal(expected); + const extracted = extractor.extractForeignCode(expected.hostCode!); + expect(extracted.length).toBe(1); + expect(extracted[0]).toEqual(expected); } ); }); diff --git a/packages/_example-extractor/src/index.ts b/packages/_example-extractor/src/index.ts index 9a6d9ee2e..c245e974f 100644 --- a/packages/_example-extractor/src/index.ts +++ b/packages/_example-extractor/src/index.ts @@ -1,20 +1,18 @@ -import { - ILSPCodeExtractorsManager, - RegExpForeignCodeExtractor -} from '@jupyter-lsp/jupyterlab-lsp'; +import { RegExpForeignCodeExtractor } from '@jupyter-lsp/jupyterlab-lsp'; import { JupyterFrontEnd, JupyterFrontEndPlugin } from '@jupyterlab/application'; +import { ILSPCodeExtractorsManager } from '@jupyterlab/lsp'; const NS = '@jupyter-lsp/jupyterlab-lsp-example-extractor'; export const extractor = new RegExpForeignCodeExtractor({ language: 'foo', pattern: '^%%(foo)( .*?)?\n([^]*)', - foreign_capture_groups: [3], - is_standalone: true, - file_extension: 'foo' + foreignCaptureGroups: [3], + isStandalone: true, + fileExtension: 'foo' }); const plugin: JupyterFrontEndPlugin = { diff --git a/packages/_klingon-integration/babel.config.js b/packages/_klingon-integration/babel.config.js index 8b5c76420..a49409f7d 100644 --- a/packages/_klingon-integration/babel.config.js +++ b/packages/_klingon-integration/babel.config.js @@ -1 +1 @@ -module.exports = require('@jupyterlab/testutils/lib/babel.config'); +module.exports = require('@jupyterlab/testing/lib/babel-config.js').default; diff --git a/packages/_klingon-integration/package.json b/packages/_klingon-integration/package.json index e31e36023..bb7d42ca9 100644 --- a/packages/_klingon-integration/package.json +++ b/packages/_klingon-integration/package.json @@ -11,13 +11,12 @@ "LICENSE" ], "dependencies": { - "@jupyterlab/application": "^3.3.0" + "@jupyterlab/application": "^4.0.5" }, "devDependencies": { - "@babel/preset-env": "^7.4.3", - "@jupyterlab/application": "^3.3.0", - "@jupyterlab/builder": "^3.5.0", - "typescript": "~4.9.4" + "@jupyterlab/application": "^4.0.5", + "@jupyterlab/builder": "^4.0.5", + "typescript": "~5.0.4" }, "jupyterlab": { "extension": true, diff --git a/packages/code-jumpers/jest.config.js b/packages/code-jumpers/jest.config.js index 17aaebe58..051ff8259 100644 --- a/packages/code-jumpers/jest.config.js +++ b/packages/code-jumpers/jest.config.js @@ -1,4 +1,4 @@ -const func = require('@jupyterlab/testutils/lib/jest-config'); +const func = require('@jupyterlab/testing/lib/jest-config'); const upstream = func('jupyterlab-lsp', __dirname); const reuseFromUpstream = [ diff --git a/packages/code-jumpers/package.json b/packages/code-jumpers/package.json index b2bbfd84d..ff1faed19 100644 --- a/packages/code-jumpers/package.json +++ b/packages/code-jumpers/package.json @@ -30,30 +30,29 @@ "clean": "rimraf lib" }, "peerDependencies": { - "@jupyterlab/apputils": "^3.3.0", - "@jupyterlab/codeeditor": "^3.3.0", - "@jupyterlab/coreutils": "^5.3.0", - "@jupyterlab/docmanager": "^3.3.0", - "@jupyterlab/docregistry": "^3.3.0", - "@jupyterlab/fileeditor": "^3.3.0", - "@jupyterlab/notebook": "^3.3.0", - "@jupyterlab/observables": "^4.3.0", - "@jupyterlab/translation": "^3.3.0" + "@jupyterlab/apputils": "^4.0.0", + "@jupyterlab/codeeditor": "^4.0.0", + "@jupyterlab/coreutils": "^6.0.0", + "@jupyterlab/docmanager": "^4.0.0", + "@jupyterlab/docregistry": "^4.0.0", + "@jupyterlab/fileeditor": "^4.0.0", + "@jupyterlab/notebook": "^4.0.0", + "@jupyterlab/observables": "^5.0.0", + "@jupyterlab/translation": "^4.0.0" }, "devDependencies": { - "@babel/preset-env": "^7.4.3", - "@jupyterlab/apputils": "^3.3.0", - "@jupyterlab/codeeditor": "^3.3.0", - "@jupyterlab/coreutils": "^5.3.0", - "@jupyterlab/docmanager": "^3.3.0", - "@jupyterlab/docregistry": "^3.3.0", - "@jupyterlab/fileeditor": "^3.3.0", - "@jupyterlab/notebook": "^3.3.0", - "@jupyterlab/observables": "^4.3.0", - "@jupyterlab/testutils": "^3.3.0", - "@jupyterlab/translation": "^3.3.0", - "rimraf": "^3.0.2", - "typescript": "~4.9.4" + "@jupyterlab/apputils": "^4.1.5", + "@jupyterlab/codeeditor": "^4.0.5", + "@jupyterlab/coreutils": "^6.0.5", + "@jupyterlab/docmanager": "^4.0.5", + "@jupyterlab/docregistry": "^4.0.5", + "@jupyterlab/fileeditor": "^4.0.5", + "@jupyterlab/notebook": "^4.0.5", + "@jupyterlab/observables": "^5.0.5", + "@jupyterlab/testing": "^4.0.5", + "@jupyterlab/translation": "^4.0.5", + "rimraf": "^3.0.0", + "typescript": "~5.0.4" }, "jupyterlab": { "extension": false, diff --git a/packages/code-jumpers/src/history.ts b/packages/code-jumpers/src/history.ts index 058abaf1d..12564f652 100644 --- a/packages/code-jumpers/src/history.ts +++ b/packages/code-jumpers/src/history.ts @@ -1,44 +1,17 @@ -import { IModelDB, IObservableUndoableList } from '@jupyterlab/observables'; -import { JSONValue } from '@lumino/coreutils'; - import { IGlobalPosition } from './positions'; -const DB_ENTRY = 'jumpy_history'; +const DATABASE: Array = []; export class JumpHistory { - jump_history: IObservableUndoableList; - model_db: IModelDB; - - constructor(model_db: IModelDB) { - this.model_db = model_db; - } - - ensure_history_is_ready() { - if (this.jump_history === undefined) { - if (this.model_db.has(DB_ENTRY)) { - this.jump_history = this.model_db.get( - DB_ENTRY - ) as IObservableUndoableList; - } else { - this.jump_history = this.model_db.createList(DB_ENTRY); - } - } - } - store(position: IGlobalPosition) { - this.ensure_history_is_ready(); - this.jump_history.push(JSON.stringify(position)); + DATABASE.push(position); } + // TODO: recollect should take a param with current position; + // It shold only go back if current contents_path is the same + // as the last one on the stack (or a previous disjoint one). + // Probably the jump paths should not be in an array of arrays. recollect(): IGlobalPosition | undefined { - this.ensure_history_is_ready(); - if (this.jump_history.length === 0) { - return; - } - let last_position = this.jump_history.get(this.jump_history.length - 1); - // being lazy here - undo addition instead of removal ;) - this.jump_history.undo(); - - return JSON.parse(last_position as string) as IGlobalPosition; + return DATABASE.pop(); } } diff --git a/packages/code-jumpers/src/jumpers/fileeditor.ts b/packages/code-jumpers/src/jumpers/fileeditor.ts index cf252b762..3cd41ce93 100644 --- a/packages/code-jumpers/src/jumpers/fileeditor.ts +++ b/packages/code-jumpers/src/jumpers/fileeditor.ts @@ -20,7 +20,7 @@ export class FileEditorJumper extends CodeJumper { this.widget = editor_widget; this.document_manager = document_manager; this.editor = editor_widget.content; - this.history = new JumpHistory(this.editor.model.modelDB); + this.history = new JumpHistory(); } get path() { diff --git a/packages/code-jumpers/src/jumpers/jumper.ts b/packages/code-jumpers/src/jumpers/jumper.ts index 815decb38..6fdc47094 100644 --- a/packages/code-jumpers/src/jumpers/jumper.ts +++ b/packages/code-jumpers/src/jumpers/jumper.ts @@ -1,3 +1,4 @@ +import { EditorView } from '@codemirror/view'; import { Dialog, showDialog } from '@jupyterlab/apputils'; import { CodeEditor } from '@jupyterlab/codeeditor'; import { IDocumentManager } from '@jupyterlab/docmanager'; @@ -7,8 +8,6 @@ import { FileEditor } from '@jupyterlab/fileeditor'; import { JumpHistory } from '../history'; import { IGlobalPosition, ILocalPosition } from '../positions'; -import IEditor = CodeEditor.IEditor; - const movement_keys = [ 'ArrowRight', 'ArrowLeft', @@ -99,45 +98,51 @@ export abstract class CodeJumper { // bug (https://github.com/jupyterlab/jupyterlab/issues/10856) prevents // us from doing so anymore. let editor = editor_widget.content.editor; - let disposable = editor.addKeydownHandler( - (editor: IEditor, event: KeyboardEvent) => { - // allow to move around, select text and use modifiers & browser keys freely - if ( - movement_keys.indexOf(event.key) !== -1 || - modifiers.indexOf(event.key) !== -1 || - system_keys.indexOf(event.key) !== -1 - ) { - return false; - } - - // allow to copy text (here assuming that, as on majority of OSs, copy is associated with ctrl+c) - // this is not foolproof, but should work in majority of sane settings (unfortunately, not in vim) - if (event.key === 'c' && event.ctrlKey) { - return false; + let active = true; + editor.injectExtension( + EditorView.domEventHandlers({ + keydown: (event: KeyboardEvent) => { + if (!active) { + return false; + } + // allow to move around, select text and use modifiers & browser keys freely + if ( + movement_keys.indexOf(event.key) !== -1 || + modifiers.indexOf(event.key) !== -1 || + system_keys.indexOf(event.key) !== -1 + ) { + return false; + } + + // allow to copy text (here assuming that, as on majority of OSs, copy is associated with ctrl+c) + // this is not foolproof, but should work in majority of sane settings (unfortunately, not in vim) + if (event.key === 'c' && event.ctrlKey) { + return false; + } + + let dialog_promise = showDialog({ + title: 'Edit external file?', + body: + 'This file is located outside of the root of the JupyterLab start directory. ' + + 'do you really wish to edit it?', + buttons: [ + Dialog.cancelButton({ label: 'Cancel' }), + Dialog.warnButton({ label: 'Edit anyway' }) + ] + }); + + dialog_promise + .then(result => { + if (result.button.accept) { + active = false; + } + }) + .catch(console.warn); + + // prevent default + return true; } - - let dialog_promise = showDialog({ - title: 'Edit external file?', - body: - 'This file is located outside of the root of the JupyterLab start directory. ' + - 'do you really wish to edit it?', - buttons: [ - Dialog.cancelButton({ label: 'Cancel' }), - Dialog.warnButton({ label: 'Edit anyway' }) - ] - }); - - dialog_promise - .then(result => { - if (result.button.accept) { - disposable.dispose(); - } - }) - .catch(console.warn); - - // prevent default - return true; - } + }) ); } diff --git a/packages/code-jumpers/src/jumpers/notebook.ts b/packages/code-jumpers/src/jumpers/notebook.ts index ada4c488b..152bbfeac 100644 --- a/packages/code-jumpers/src/jumpers/notebook.ts +++ b/packages/code-jumpers/src/jumpers/notebook.ts @@ -19,12 +19,12 @@ export class NotebookJumper extends CodeJumper { super(); this.widget = notebook_widget; this.notebook = notebook_widget.content; - this.history = new JumpHistory(this.notebook.model!.modelDB); + this.history = new JumpHistory(); this.document_manager = document_manager; } get editors() { - return this.notebook.widgets.map(cell => cell.editor); + return this.notebook.widgets.map(cell => cell.editor!); } jump(position: ILocalPosition) { @@ -38,7 +38,7 @@ export class NotebookJumper extends CodeJumper { this.notebook.mode = 'edit'; // find out offset for the element - let activeEditor = this.notebook.activeCell!.editor; + let activeEditor = this.notebook.activeCell!.editor!; // place cursor in the line with the definition let position = activeEditor.getPositionAt(token.offset)!; diff --git a/packages/code-jumpers/src/notebook_private.ts b/packages/code-jumpers/src/notebook_private.ts index b7d2264be..ddca9471f 100644 --- a/packages/code-jumpers/src/notebook_private.ts +++ b/packages/code-jumpers/src/notebook_private.ts @@ -8,7 +8,7 @@ import { Notebook } from '@jupyterlab/notebook'; */ function _ensureFocus(notebook: Notebook, force = false): void { let activeCell = notebook.activeCell; - if (notebook.mode === 'edit' && activeCell) { + if (notebook.mode === 'edit' && activeCell && activeCell.editor) { if (!activeCell.editor.hasFocus()) { activeCell.editor.focus(); } diff --git a/packages/completion-theme/package.json b/packages/completion-theme/package.json index 04926ad1a..a693cc0f1 100644 --- a/packages/completion-theme/package.json +++ b/packages/completion-theme/package.json @@ -33,13 +33,12 @@ "clean": "rimraf lib" }, "devDependencies": { - "@jupyterlab/builder": "^3.5.0", - "@jupyterlab/ui-components": "^3.3.0", - "react": "^17.0.1", - "rimraf": "^3.0.2", - "typescript": "~4.9.4" + "@jupyterlab/builder": "^4.0.5", + "@jupyterlab/ui-components": "^4.0.5", + "react": "^18.2.0", + "rimraf": "^3.0.0", + "typescript": "~5.0.4" }, - "peerDependencies": {}, "jupyterlab": { "extension": true, "schemaDir": "schema", diff --git a/packages/completion-theme/style/index.css b/packages/completion-theme/style/index.css index 56ef0423e..771463eda 100644 --- a/packages/completion-theme/style/index.css +++ b/packages/completion-theme/style/index.css @@ -17,19 +17,18 @@ justify-content: space-between; } -/* a workaround for scrollbars being always on in the completer documentation panel, see - https://github.com/jupyter-lsp/jupyterlab-lsp/pull/322#issuecomment-682724175 - */ -.lsp-completer .jp-Completer-docpanel { - overflow: auto; +body[data-lsp-completer-layout] .jp-Completer-docpanel { + width: 300px; + /* https://github.com/jupyterlab/jupyterlab/pull/15024 */ + flex-shrink: 0; } -.lsp-completer.jp-Completer { +body[data-lsp-completer-layout] .jp-Completer { --lsp-completer-max-label-width: 350px; --lsp-completer-max-detail-width: 200px; } -.lsp-completer .jp-Completer-match { +body[data-lsp-completer-layout] .jp-Completer-match { max-width: var(--lsp-completer-max-label-width); overflow-x: hidden; white-space: nowrap; @@ -37,7 +36,7 @@ text-overflow: ellipsis; } -.lsp-completer .jp-mod-active .jp-Completer-match { +body[data-lsp-completer-layout] .jp-mod-active .jp-Completer-match { text-overflow: clip; } @@ -47,7 +46,7 @@ } /* a workaround for code being larger font size than text in markdown-rendered panel */ -.lsp-completer .jp-Completer-docpanel pre code { +body[data-lsp-completer-layout] .jp-Completer-docpanel pre code { font-size: 90%; } @@ -89,11 +88,11 @@ body[data-lsp-completer-layout='detail-below'] .jp-Completer-match { white-space: nowrap; } -.lsp-completer .jp-mod-active .jp-Completer-typeExtended { +body[data-lsp-completer-layout] .jp-mod-active .jp-Completer-typeExtended { text-overflow: clip; } -.lsp-completer mark.lsp-elide:first-child { +body[data-lsp-completer-layout] mark.lsp-elide:first-child { display: inline-block; overflow-x: clip; text-overflow: ellipsis; @@ -105,7 +104,7 @@ body[data-lsp-completer-layout='detail-below'] .jp-Completer-match { min-width: 20px; } -.lsp-completer .lsp-elide-wrapper { +body[data-lsp-completer-layout] .lsp-elide-wrapper { display: flex; } diff --git a/packages/jupyterlab-lsp/babel.config.js b/packages/jupyterlab-lsp/babel.config.js index 8b5c76420..a49409f7d 100644 --- a/packages/jupyterlab-lsp/babel.config.js +++ b/packages/jupyterlab-lsp/babel.config.js @@ -1 +1 @@ -module.exports = require('@jupyterlab/testutils/lib/babel.config'); +module.exports = require('@jupyterlab/testing/lib/babel-config.js').default; diff --git a/packages/jupyterlab-lsp/jest.config.js b/packages/jupyterlab-lsp/jest.config.js index 9037ac2c9..087adcd4b 100644 --- a/packages/jupyterlab-lsp/jest.config.js +++ b/packages/jupyterlab-lsp/jest.config.js @@ -1,17 +1,21 @@ -const func = require('@jupyterlab/testutils/lib/jest-config'); +const func = require('@jupyterlab/testing/lib/jest-config'); const upstream = func('jupyterlab-lsp', __dirname); const reuseFromUpstream = [ 'moduleFileExtensions', 'moduleNameMapper', 'setupFilesAfterEnv', - 'testPathIgnorePatterns' + 'testPathIgnorePatterns', + 'setupFiles', + 'testEnvironment' ]; const esModules = [ '@jupyterlab/', - '@retrolab/', + '@jupyter-notebook/', 'lib0', + 'nanoid', + 'vscode-ws-jsonrpc', 'y\\-protocols', 'y\\-websocket', '@jupyter/ydoc', @@ -21,17 +25,15 @@ const esModules = [ let local = { globals: { 'ts-jest': { tsconfig: 'tsconfig.json' } }, testRegex: `.*\.spec\.tsx?$`, + transformIgnorePatterns: [`/node_modules/(?!${esModules}).*`], + testLocationInResults: true, transform: { '\\.(ts|tsx)?$': 'ts-jest', '\\.(js|jsx)?$': './transform.js', - '\\.svg$': 'jest-raw-loader' + '\\.svg$': '@jupyterlab/testing/lib/jest-raw-loader.js' }, - transformIgnorePatterns: [`/node_modules/(?!${esModules}).*`], - testLocationInResults: true, - reporters: [...upstream['reporters'], 'jest-github-actions-reporter'], - setupFiles: [ - ...upstream['setupFiles'], - '@jupyter-lsp/jupyterlab-lsp/lib/jest-shim.js' + reporters: [ + ...new Set([...upstream['reporters'], 'github-actions', 'summary']) ] }; diff --git a/packages/jupyterlab-lsp/package.json b/packages/jupyterlab-lsp/package.json index ed9f1889b..c59b35c93 100644 --- a/packages/jupyterlab-lsp/package.json +++ b/packages/jupyterlab-lsp/package.json @@ -1,6 +1,6 @@ { "name": "@jupyter-lsp/jupyterlab-lsp", - "version": "4.2.0", + "version": "5.0.0-alpha.0", "description": "Language Server Protocol integration for JupyterLab", "keywords": [ "jupyter", @@ -34,7 +34,7 @@ "build:labextension:dev": "jupyter labextension build --development True .", "build:lib": "tsc", "build:prod": "jlpm run build:lib && jlpm run build:labextension", - "build:schema": "jlpm build:schema-backend && jlpm build:schema-completion && jlpm build:schema-hover && jlpm build:schema-diagnostics && jlpm build:schema-syntax_highlighting && jlpm build:schema-jump_to && jlpm build:schema-signature && jlpm build:schema-highlights && jlpm build:schema-plugin", + "build:schema": "jlpm build:schema-backend && jlpm build:schema-completion && jlpm build:schema-hover && jlpm build:schema-diagnostics && jlpm build:schema-syntax_highlighting && jlpm build:schema-jump_to && jlpm build:schema-signature && jlpm build:schema-highlights && jlpm build:schema-plugin && jlpm build:schema-rename", "build:schema-backend": "json2ts ../../python_packages/jupyter_lsp/jupyter_lsp/schema/schema.json --unreachableDefinitions | prettier --stdin-filepath _schema.d.ts > src/_schema.ts", "build:schema-plugin": "json2ts schema/plugin.json | prettier --stdin-filepath _plugin.d.ts > src/_plugin.ts", "build:schema-completion": "json2ts schema/completion.json | prettier --stdin-filepath _completion.d.ts > src/_completion.ts ", @@ -43,6 +43,7 @@ "build:schema-jump_to": "json2ts schema/jump_to.json | prettier --stdin-filepath _jump_to.d.ts > src/_jump_to.ts", "build:schema-syntax_highlighting": "json2ts schema/syntax_highlighting.json | prettier --stdin-filepath _syntax_highlighting.d.ts > src/_syntax_highlighting.ts ", "build:schema-highlights": "json2ts schema/highlights.json | prettier --stdin-filepath _highlights.d.ts > src/_highlights.ts", + "build:schema-rename": "json2ts schema/rename.json | prettier --stdin-filepath _rename.d.ts > src/_rename.ts", "build:schema-signature": "json2ts schema/signature.json | prettier --stdin-filepath _signature.d.ts > src/_signature.ts", "bundle": "npm pack .", "clean": "jlpm run clean:lib", @@ -63,77 +64,78 @@ "@jupyter-lsp/completion-theme": "~3.3.0", "@jupyter-lsp/theme-material": "~2.1.1", "@jupyter-lsp/theme-vscode": "~2.1.1", - "lodash.mergewith": "^4.6.1", - "lsp-ws-connection": "~0.7.0" + "@jupyterlab/lsp": "^4.0.5", + "@rjsf/validator-ajv8": "^5.12.1", + "lodash.mergewith": "^4.6.1" }, "devDependencies": { - "@babel/preset-env": "^7.4.3", - "@jupyterlab/application": "^3.6.0", - "@jupyterlab/apputils": "^3.3.0", - "@jupyterlab/builder": "^3.5.0", - "@jupyterlab/cells": "^3.3.0", - "@jupyterlab/codeeditor": "^3.3.0", - "@jupyterlab/codemirror": "^3.3.0", - "@jupyterlab/completer": "^3.3.0", - "@jupyterlab/coreutils": "^5.3.0", - "@jupyterlab/docmanager": "^3.3.0", - "@jupyterlab/docregistry": "^3.3.0", - "@jupyterlab/fileeditor": "^3.3.0", - "@jupyterlab/logconsole": "^3.3.0", - "@jupyterlab/notebook": "^3.3.0", - "@jupyterlab/rendermime": "^3.3.0", - "@jupyterlab/services": "^6.3.0", - "@jupyterlab/statusbar": "^3.3.0", - "@jupyterlab/testutils": "^3.3.0", - "@jupyterlab/tooltip": "^3.3.0", - "@jupyterlab/ui-components": "^3.3.0", + "@codemirror/lint": "^6.4.0", + "@jupyter-notebook/application": "^7.0.2", + "@jupyterlab/application": "^4.0.5", + "@jupyterlab/apputils": "^4.1.5", + "@jupyterlab/builder": "^4.0.5", + "@jupyterlab/cells": "^4.0.5", + "@jupyterlab/codeeditor": "^4.0.5", + "@jupyterlab/codemirror": "^4.0.5", + "@jupyterlab/completer": "^4.0.5", + "@jupyterlab/coreutils": "^6.0.5", + "@jupyterlab/docmanager": "^4.0.5", + "@jupyterlab/docregistry": "^4.0.5", + "@jupyterlab/fileeditor": "^4.0.5", + "@jupyterlab/logconsole": "^4.0.5", + "@jupyterlab/notebook": "^4.0.5", + "@jupyterlab/rendermime": "^4.0.5", + "@jupyterlab/services": "^7.0.5", + "@jupyterlab/statusbar": "^4.0.5", + "@jupyterlab/testing": "^4.0.5", + "@jupyterlab/tooltip": "^4.0.5", + "@jupyterlab/ui-components": "^4.0.5", "@lumino/algorithm": "*", - "@lumino/widgets": "^1.16.1", - "@retrolab/application": "^0.2.0", - "@types/chai": "^4.1.7", - "@types/codemirror": "^5.6.20", - "@types/events": "^3.0.0", - "@types/jest": "^23.3.11", + "@lumino/widgets": "^2.3.0", + "@types/jest": "^29.5.4", "@types/lodash.mergewith": "^4.6.1", - "chai": "^4.2.0", "codemirror": "*", - "events": "^3.0.0", - "jest": "^26.0.0", - "jest-junit": "^8.0.0", + "jest": "^29.2.0", "json-schema-to-typescript": "^8.0.0", - "mkdirp": "^1.0.3", - "prettier": "^2.1.2", - "react": "^17.0.1", - "rimraf": "^3.0.2", - "ts-jest": "^26.4.3", - "typescript": "~4.9.4", - "vscode-languageserver-protocol": "^3.16.0" + "npm-run-all": "^4.1.5", + "prettier": "^2.8.8", + "react": "^18.2.0", + "rimraf": "^3.0.0", + "typescript": "~5.0.4", + "vscode-languageserver-protocol": "^3.17.0" }, "peerDependencies": { - "@jupyterlab/application": "^3.3.0", - "@jupyterlab/apputils": "^3.3.0", - "@jupyterlab/cells": "^3.3.0", - "@jupyterlab/codeeditor": "^3.3.0", - "@jupyterlab/codemirror": "^3.3.0", + "@codemirror/state": "*", + "@codemirror/view": "*", + "@jupyterlab/application": "^4.0.0", + "@jupyterlab/apputils": "^4.0.0", + "@jupyterlab/cells": "^4.0.0", + "@jupyterlab/codeeditor": "^4.0.0", + "@jupyterlab/codemirror": "^4.0.0", "@jupyterlab/completer": "^3.3.0", - "@jupyterlab/coreutils": "^5.3.0", - "@jupyterlab/docmanager": "^3.3.0", - "@jupyterlab/docregistry": "^3.3.0", - "@jupyterlab/fileeditor": "^3.3.0", - "@jupyterlab/notebook": "^3.3.0", - "@jupyterlab/rendermime": "^3.3.0", - "@jupyterlab/services": "^6.3.0", - "@jupyterlab/statusbar": "^3.3.0", - "@jupyterlab/tooltip": "^3.3.0", - "@jupyterlab/ui-components": "^3.3.0", + "@jupyterlab/coreutils": "^6.0.0", + "@jupyterlab/docmanager": "^4.0.0", + "@jupyterlab/docregistry": "^4.0.0", + "@jupyterlab/fileeditor": "^4.0.0", + "@jupyterlab/notebook": "^4.0.0", + "@jupyterlab/rendermime": "^4.0.0", + "@jupyterlab/services": "^7.0.0", + "@jupyterlab/statusbar": "^4.0.0", + "@jupyterlab/tooltip": "^4.0.0", + "@jupyterlab/ui-components": "^4.0.0", "@lumino/algorithm": "*", - "@lumino/widgets": "^1.16.1", - "codemirror": "*", + "@lumino/widgets": "^2.0.0", "react": "*" }, "jupyterlab": { "extension": true, "webpackConfig": "./webpack.config.js", + "disabledExtensions": [ + "@jupyterlab/notebook-extension:language-server", + "@jupyterlab/fileeditor-extension:language-server", + "@jupyterlab/completer-extension:base-service", + "@jupyterlab/lsp-extension:settings" + ], "discovery": { "server": { "base": { @@ -145,6 +147,13 @@ ] } }, + "sharedPackages": { + "@jupyterlab/lsp": { + "bundled": false, + "singleton": true, + "strictVersion": true + } + }, "schemaDir": "schema", "outputDir": "../../python_packages/jupyterlab_lsp/jupyterlab_lsp/labextensions/@jupyter-lsp/jupyterlab-lsp" } diff --git a/packages/jupyterlab-lsp/schema/completion.json b/packages/jupyterlab-lsp/schema/completion.json index 4e5e046e0..4ab968ff0 100644 --- a/packages/jupyterlab-lsp/schema/completion.json +++ b/packages/jupyterlab-lsp/schema/completion.json @@ -5,17 +5,11 @@ "description": "LSP Completion settings.", "type": "object", "properties": { - "showDocumentation": { - "title": "Show documentation box", - "type": "boolean", - "default": true, - "description": "Whether to show documentation box next to the completion suggestions." - }, "continuousHinting": { "title": "Continuous hinting", "type": "boolean", "default": false, - "description": "Whether to enable continuous hinting (Hinterland mode)." + "description": "Whether to enable continuous hinting (Hinterland mode). Requires enabling autocompletion in the other 'Code completion' settings" }, "suppressContinuousHintingIn": { "title": "Suppress invoke continuous hinting in specific code fragments", @@ -23,7 +17,7 @@ "items": { "type": "string" }, - "default": ["comment", "string", "def"], + "default": ["Comment", "BlockComment", "LineComment", "String"], "description": "An array of CodeMirror tokens for which the continuous hinting should be suppressed. The token names vary between languages (modes)." }, "suppressTriggerCharacterIn": { @@ -32,26 +26,9 @@ "items": { "type": "string" }, - "default": ["comment", "string"], + "default": ["Comment", "BlockComment", "LineComment", "String"], "description": "An array of CodeMirror tokens for which the auto-invoke after entering a trigger (e.g. `.` in Python or `::` in R) character should be suppressed. The token names vary between languages (modes)." }, - "kernelResponseTimeout": { - "title": "Kernel completion response timeout", - "default": 600, - "type": "number", - "description": "The time to wait for the kernel completions suggestions in milliseconds. Set to 0 to disable kernel completions, or to -1 to wait indefinitely (not recommended)." - }, - "disableCompletionsFrom": { - "title": "Disable completions by source", - "description": "The sources from which to exclude completion from. Possible values include 'Kernel', 'LSP'.", - "type": "array", - "items": { - "type": "string", - "enum": ["Kernel", "LSP"] - }, - "default": [], - "uniqueItems": true - }, "waitForBusyKernel": { "title": "Wait for kernel if busy", "default": true, diff --git a/packages/jupyterlab-lsp/schema/diagnostics.json b/packages/jupyterlab-lsp/schema/diagnostics.json index 2d29f5821..8859350d1 100644 --- a/packages/jupyterlab-lsp/schema/diagnostics.json +++ b/packages/jupyterlab-lsp/schema/diagnostics.json @@ -12,6 +12,16 @@ "default": "Warning", "description": "Default level of the severity for diagnostics without severity provided by the language server." }, + "gutter": { + "title": "Show guttter (experimental, requires restart)", + "type": "boolean", + "default": false + }, + "debounceDelay": { + "title": "Delay between typing and refreshing diagnostic (requires restart)", + "type": "number", + "default": 250 + }, "ignoreCodes": { "title": "Diagnostic codes to ignore", "type": "array", diff --git a/packages/jupyterlab-lsp/schema/jump_to.json b/packages/jupyterlab-lsp/schema/jump_to.json index 7776ff27c..1ac9e1f18 100644 --- a/packages/jupyterlab-lsp/schema/jump_to.json +++ b/packages/jupyterlab-lsp/schema/jump_to.json @@ -21,22 +21,22 @@ }, "jupyter.lab.shortcuts": [ { - "command": "lsp:jump-to-definition-notebook", + "command": "lsp:jump-to-definition", "keys": ["Accel B"], "selector": ".jp-Notebook .jp-CodeCell" }, { - "command": "lsp:jump-back-notebook", + "command": "lsp:jump-back", "keys": ["Alt O"], "selector": ".jp-Notebook .jp-CodeCell" }, { - "command": "lsp:jump-to-definition-file_editor", + "command": "lsp:jump-to-definition", "keys": ["Accel B"], "selector": ".jp-FileEditor" }, { - "command": "lsp:jump-back-file_editor", + "command": "lsp:jump-back", "keys": ["Alt O"], "selector": ".jp-FileEditor" } diff --git a/packages/jupyterlab-lsp/schema/plugin.json b/packages/jupyterlab-lsp/schema/plugin.json index 07a2922df..e169eabb5 100644 --- a/packages/jupyterlab-lsp/schema/plugin.json +++ b/packages/jupyterlab-lsp/schema/plugin.json @@ -2,7 +2,7 @@ "jupyter.lab.setting-icon": "lsp:codeCheck", "jupyter.lab.setting-icon-label": "Language integration", "jupyter.lab.transform": true, - "title": "Language Server", + "title": "Language Servers", "description": "Language Server Protocol settings.", "type": "object", "definitions": { diff --git a/packages/jupyterlab-lsp/src/adapter_manager.ts b/packages/jupyterlab-lsp/src/adapter_manager.ts deleted file mode 100644 index 33ea6467d..000000000 --- a/packages/jupyterlab-lsp/src/adapter_manager.ts +++ /dev/null @@ -1,155 +0,0 @@ -import { ILabShell, JupyterFrontEndPlugin } from '@jupyterlab/application'; -import { IDocumentWidget } from '@jupyterlab/docregistry'; -import { Signal } from '@lumino/signaling'; -import type { IRetroShell } from '@retrolab/application'; - -import { WidgetAdapter } from './adapters/adapter'; -import { - IAdapterRegistration, - IAdapterTypeOptions, - ILSPAdapterManager, - PLUGIN_ID -} from './tokens'; - -import { LSPExtension } from './index'; - -export class WidgetAdapterManager implements ILSPAdapterManager { - adapterTypeAdded: Signal< - WidgetAdapterManager, - IAdapterTypeOptions - >; - adapterChanged: Signal>; - adapterDisposed: Signal>; - currentAdapter: WidgetAdapter; - - protected adapters: Map> = new Map(); - protected adapterTypes: IAdapterTypeOptions[]; - - get types(): IAdapterTypeOptions[] { - return this.adapterTypes; - } - - constructor(protected shell: ILabShell | IRetroShell) { - this.adapterChanged = new Signal(this); - this.adapterDisposed = new Signal(this); - this.adapterTypeAdded = new Signal(this); - this.adapterTypes = []; - shell.currentChanged.connect(this.refreshAdapterFromCurrentWidget, this); - } - - public registerAdapterType(options: IAdapterTypeOptions) { - this.adapterTypes.push(options); - this.adapterTypeAdded.emit(options); - } - - private connect( - extension: LSPExtension, - type: IAdapterTypeOptions - ) { - type.tracker.widgetAdded.connect((tracker, widget) => { - this.connectWidget(extension, widget, type); - }); - extension.registerAdapterType(this, type); - } - - public registerExtension(extension: LSPExtension) { - for (let type of this.adapterTypes) { - this.connect(extension, type); - } - this.adapterTypeAdded.connect((manager, type) => { - this.connect(extension, type); - }); - } - - protected connectWidget( - extension: LSPExtension, - widget: IDocumentWidget, - type: IAdapterTypeOptions - ) { - let adapter = new type.adapter(extension, widget); - this.registerAdapter({ - adapter: adapter, - id: type.get_id(widget), - re_connector: () => { - this.connectWidget(extension, widget, type); - } - }); - // possibly update the value of currentAdapter using the current widget - this.refreshAdapterFromCurrentWidget(); - } - - protected refreshAdapterFromCurrentWidget() { - const current = this.shell.currentWidget as IDocumentWidget; - if (!current) { - return; - } - let adapter = null; - - for (let type of this.adapterTypes) { - if (type.tracker.has(current)) { - let id = type.get_id(current); - adapter = this.adapters.get(id); - } - } - - if (adapter != null) { - this.currentAdapter = adapter; - this.adapterChanged.emit(adapter); - } - } - - protected registerAdapter(options: IAdapterRegistration) { - let { id, adapter, re_connector } = options; - let widget = options.adapter.widget; - - if (this.adapters.has(id)) { - let old = this.adapters.get(id); - console.warn( - `Adapter with id ${id} was already registered (${adapter} vs ${old}) ` - ); - } - this.adapters.set(id, adapter); - - const disconnect = () => { - this.adapters.delete(id); - widget.disposed.disconnect(disconnect); - widget.context.pathChanged.disconnect(reconnect); - adapter.dispose(); - }; - - const reconnect = () => { - disconnect(); - re_connector(); - }; - - widget.disposed.connect(() => { - disconnect(); - this.adapterDisposed.emit(adapter); - }); - widget.context.pathChanged.connect(reconnect); - - // TODO: maybe emit adapterCreated. Should it be handled by statusbar? - this.refreshAdapterFromCurrentWidget(); - } - - isAnyActive(): boolean { - return ( - this.shell.currentWidget !== null && - this.adapterTypes.some(type => type.tracker.currentWidget) && - this.adapterTypes.some( - type => type.tracker.currentWidget == this.shell.currentWidget - ) - ); - } -} - -export const WIDGET_ADAPTER_MANAGER: JupyterFrontEndPlugin = - { - id: PLUGIN_ID + ':ILSPAdapterManager', - activate: app => { - let shell = app.shell as ILabShell | IRetroShell; - return new WidgetAdapterManager(shell); - }, - provides: ILSPAdapterManager, - autoStart: true - }; diff --git a/packages/jupyterlab-lsp/src/adapters/adapter.ts b/packages/jupyterlab-lsp/src/adapters/adapter.ts deleted file mode 100644 index 221885ca4..000000000 --- a/packages/jupyterlab-lsp/src/adapters/adapter.ts +++ /dev/null @@ -1,811 +0,0 @@ -import { JupyterFrontEnd } from '@jupyterlab/application'; -import { Dialog, showDialog } from '@jupyterlab/apputils'; -import { CodeEditor } from '@jupyterlab/codeeditor'; -import { DocumentRegistry, IDocumentWidget } from '@jupyterlab/docregistry'; -import { ILogPayload } from '@jupyterlab/logconsole'; -import { nullTranslator, TranslationBundle } from '@jupyterlab/translation'; -import { JSONObject } from '@lumino/coreutils'; -import { Signal } from '@lumino/signaling'; -import mergeWith from 'lodash.mergewith'; - -import { ICommandContext } from '../command_manager'; -import { LSPConnection } from '../connection'; -import { - DocumentConnectionManager, - IDocumentConnectionData, - ISocketConnectionOptions -} from '../connection_manager'; -import { EditorAdapter } from '../editor_integration/editor_adapter'; -import { IFeature, IFeatureEditorIntegration } from '../feature'; -import { ILSPExtension, ILSPLogConsole } from '../index'; -import { ClientCapabilities, LanguageIdentifier } from '../lsp'; -import { IRootPosition, IVirtualPosition } from '../positioning'; -import { IForeignContext, VirtualDocument } from '../virtual/document'; -import { IVirtualEditor } from '../virtual/editor'; - -import IEditor = CodeEditor.IEditor; -import IButton = Dialog.IButton; -import createButton = Dialog.createButton; - -export class StatusMessage { - /** - * The text message to be shown on the statusbar - */ - message: string; - changed: Signal; - private timer: number | null; - - constructor() { - this.message = ''; - this.changed = new Signal(this); - this.timer = null; - } - - /** - * Set the text message and (optionally) the timeout to remove it. - * @param message - * @param timeout - number of ms to until the message is cleaned; - * -1 if the message should stay up indefinitely; - * defaults to 3000ms (3 seconds) - */ - set(message: string, timeout: number = 1000 * 3) { - this.expire_timer(); - this.message = message; - this.changed.emit(); - if (timeout !== -1) { - this.timer = window.setTimeout(this.clear.bind(this), timeout); - } - } - - clear() { - this.message = ''; - this.changed.emit(); - } - - private expire_timer() { - if (this.timer !== null) { - window.clearTimeout(this.timer); - this.timer = 0; - } - } -} - -/** - * The values should follow the https://microsoft.github.io/language-server-protocol/specification guidelines - */ -const mime_type_language_map: JSONObject = { - 'text/x-rsrc': 'r', - 'text/x-r-source': 'r', - // currently there are no LSP servers for IPython we are aware of - 'text/x-ipython': 'python' -}; - -export interface IEditorChangedData { - editor: CodeEditor.IEditor; -} - -/** - * Foreign code: low level adapter is not aware of the presence of foreign languages; - * it operates on the virtual document and must not attempt to infer the language dependencies - * as this would make the logic of inspections caching impossible to maintain, thus the WidgetAdapter - * has to handle that, keeping multiple connections and multiple virtual documents. - */ -export abstract class WidgetAdapter { - protected adapters: Map< - VirtualDocument.id_path, - EditorAdapter> - >; - public adapterConnected: Signal, IDocumentConnectionData>; - public isConnected: boolean; - public connection_manager: DocumentConnectionManager; - public status_message: StatusMessage; - public trans: TranslationBundle; - protected isDisposed = false; - console: ILSPLogConsole; - - protected app: JupyterFrontEnd; - - public activeEditorChanged: Signal, IEditorChangedData>; - public editorAdded: Signal, IEditorChangedData>; - public editorRemoved: Signal, IEditorChangedData>; - public update_finished: Promise; - public initialized: Promise; - - /** - * (re)create virtual document using current path and language - */ - abstract create_virtual_document(): VirtualDocument; - - abstract get_editor_index_at(position: IVirtualPosition): number; - - abstract get_editor_index(ce_editor: CodeEditor.IEditor): number; - - abstract get_editor_wrapper(ce_editor: CodeEditor.IEditor): HTMLElement; - - // note: it could be using namespace/IOptions pattern, - // but I do not know how to make it work with the generic type T - // (other than using 'any' in the IOptions interface) - protected constructor(protected extension: ILSPExtension, public widget: T) { - this.app = extension.app; - this.connection_manager = extension.connection_manager; - this.adapterConnected = new Signal(this); - this.activeEditorChanged = new Signal(this); - this.editorRemoved = new Signal(this); - this.editorAdded = new Signal(this); - this.adapters = new Map(); - this.status_message = new StatusMessage(); - this.isConnected = false; - this.console = extension.console.scope('WidgetAdapter'); - this.trans = (extension.translator || nullTranslator).load( - 'jupyterlab-lsp' - ); - - // set up signal connections - this.widget.context.saveState.connect(this.on_save_state, this); - this.connection_manager.closed.connect(this.on_connection_closed, this); - this.widget.disposed.connect(this.dispose, this); - } - - protected get foreign_code_extractors() { - return this.extension.foreign_code_extractors; - } - - protected get code_overrides() { - return this.extension.code_overrides; - } - - on_connection_closed( - manager: DocumentConnectionManager, - { virtual_document }: IDocumentConnectionData - ) { - this.console.log( - 'connection closed, disconnecting adapter', - virtual_document.id_path - ); - if (virtual_document !== this.virtual_editor?.virtual_document) { - return; - } - this.dispose(); - } - - dispose() { - if (this.isDisposed) { - return; - } - - if (this.virtual_editor?.virtual_document) { - this.disconnect_adapter(this.virtual_editor?.virtual_document); - } - - this.widget.context.saveState.disconnect(this.on_save_state, this); - this.connection_manager.closed.disconnect(this.on_connection_closed, this); - this.widget.disposed.disconnect(this.dispose, this); - - this.disconnect(); - - // just to be sure - this.virtual_editor = null as any; - this.app = null as any; - this.widget = null as any; - this.connection_manager = null as any; - this.widget = null as any; - - this.isDisposed = true; - } - - virtual_editor: IVirtualEditor; - - abstract get document_path(): string; - - abstract get mime_type(): string; - - get widget_id(): string { - return this.widget.id; - } - - get language(): LanguageIdentifier { - // the values should follow https://microsoft.github.io/language-server-protocol/specification guidelines, - // see the table in https://microsoft.github.io/language-server-protocol/specification#textDocumentItem - if (mime_type_language_map.hasOwnProperty(this.mime_type)) { - return mime_type_language_map[this.mime_type] as string; - } else { - let without_parameters = this.mime_type.split(';')[0]; - let [type, subtype] = without_parameters.split('/'); - if (type === 'application' || type === 'text') { - if (subtype.startsWith('x-')) { - return subtype.substr(2); - } else { - return subtype; - } - } else { - return this.mime_type; - } - } - } - - abstract get language_file_extension(): string | undefined; - - disconnect() { - this.connection_manager.unregister_document( - this.virtual_editor.virtual_document - ); - this.widget.context.model.contentChanged.disconnect( - this.onContentChanged, - this - ); - - // pretend that all editors were removed to trigger the disconnection of even handlers - // they will be connected again on new connection - for (let editor of this.editors) { - this.editorRemoved.emit({ - editor: editor - }); - } - - for (let adapter of this.adapters.values()) { - adapter.dispose(); - } - this.adapters.clear(); - - this.virtual_editor.dispose(); - } - - // equivalent to triggering didClose and didOpen, as per syncing specification, - // but also reloads the connection; used during file rename (or when it was moved) - protected reload_connection() { - // ignore premature calls (before the editor was initialized) - if (this.virtual_editor == null) { - return; - } - - // disconnect all existing connections (and dispose adapters) - this.disconnect(); - - // recreate virtual document using current path and language - // as virtual editor assumes it gets the virtual document at init, - // just dispose virtual editor (which disposes virtual document too) - // and re-initialize both virtual editor and document - this.init_virtual(); - - // reconnect - this.connect_document(this.virtual_editor.virtual_document, true).catch( - this.console.warn - ); - } - - protected on_save_state(context: any, state: DocumentRegistry.SaveState) { - // ignore premature calls (before the editor was initialized) - if (this.virtual_editor == null) { - return; - } - - // TODO: remove workaround no later than with 3.2 release of JupyterLab - // workaround for https://github.com/jupyterlab/jupyterlab/issues/10721 - // while already reverted in https://github.com/jupyterlab/jupyterlab/pull/10741, - // it was not released yet and many users will continue to run 3.1.0 and 3.1.1 - // so lets workaround it for now - // eslint-disable-next-line @typescript-eslint/ban-ts-comment - // @ts-ignore - const completedManually = state === 'completed manually'; - - if (state === 'completed' || completedManually) { - // note: must only be send to the appropriate connections as - // some servers (Julia) break if they receive save notification - // for a document that was not opened before, see: - // https://github.com/jupyter-lsp/jupyterlab-lsp/issues/490 - const documents_to_save = [this.virtual_editor.virtual_document]; - - for (let virtual_document of documents_to_save) { - let connection = this.connection_manager.connections.get( - virtual_document.uri - )!; - this.console.log( - 'Sending save notification for', - virtual_document.uri, - 'to', - connection - ); - connection.sendSaved(virtual_document.document_info); - for (let foreign of virtual_document.foreign_documents.values()) { - documents_to_save.push(foreign); - } - } - } - } - - abstract activeEditor: CodeEditor.IEditor | undefined; - - abstract get editors(): CodeEditor.IEditor[]; - - /** - * public for use in tests (but otherwise could be private) - */ - public update_documents() { - if (this.isDisposed) { - this.console.warn('Cannot update documents: adapter disposed'); - return; - } - return this.virtual_editor.virtual_document.update_manager.update_documents( - this.editors.map(ce_editor => { - return { - ce_editor: ce_editor, - value: this.virtual_editor.get_editor_value(ce_editor) - }; - }) - ); - } - - get has_multiple_editors(): boolean { - return this.editors.length > 1; - } - - protected async on_connected(data: IDocumentConnectionData) { - let { virtual_document } = data; - - this.connect_adapter(data.virtual_document, data.connection); - this.adapterConnected.emit(data); - this.isConnected = true; - - const promise = this.update_documents(); - - if (!promise) { - this.console.warn('Could not update documents'); - return; - } - await promise.then(() => { - // refresh the document on the LSP server - this.document_changed(virtual_document, virtual_document, true); - - this.console.log( - 'virtual document(s) for', - this.document_path, - 'have been initialized' - ); - }); - - // Note: the logger extension behaves badly with non-default names - // as it changes the source to the active file afterwards anyways - const loggerSourceName = virtual_document.uri; - let log: (text: string) => void; - if (this.extension.user_console) { - const logger = this.extension.user_console.getLogger(loggerSourceName); - log = (text: string) => { - logger.log({ - type: 'text', - data: text - } as ILogPayload); - }; - } else { - log = (text: string) => console.log(text); - } - - data.connection.serverNotifications['$/logTrace'].connect( - (connection, message) => { - this.console.log( - data.connection.serverIdentifier, - 'trace', - virtual_document.uri, - message - ); - } - ); - - data.connection.serverNotifications['window/logMessage'].connect( - (connection, message) => { - this.console.log( - data.connection.serverIdentifier, - virtual_document.uri, - message - ); - log(connection.serverIdentifier + ': ' + message.message); - } - ); - - data.connection.serverNotifications['window/showMessage'].connect( - (connection, message) => { - this.console.log( - data.connection.serverIdentifier, - virtual_document.uri, - message.message - ); - void showDialog({ - title: this.trans.__('Message from ') + connection.serverIdentifier, - body: message.message - }); - } - ); - - data.connection.serverRequests['window/showMessageRequest'].setHandler( - async params => { - this.console.log( - data.connection.serverIdentifier, - virtual_document.uri, - params - ); - const actionItems = params.actions; - const buttons = actionItems - ? actionItems.map(action => { - return createButton({ - label: action.title - }); - }) - : [createButton({ label: this.trans.__('Dismiss') })]; - const result = await showDialog({ - title: - this.trans.__('Message from ') + data.connection.serverIdentifier, - body: params.message, - buttons: buttons - }); - const choice = buttons.indexOf(result.button); - if (choice === -1) { - return null; - } - if (actionItems) { - return actionItems[choice]; - } - return null; - } - ); - } - - /** - * Opens a connection for the document. The connection may or may - * not be initialized, yet, and depending on when this is called, the client - * may not be fully connected. - * - * @param virtual_document a VirtualDocument - * @param send_open whether to open the document immediately - */ - protected async connect_document( - virtual_document: VirtualDocument, - send_open = false - ): Promise { - virtual_document.changed.connect(this.document_changed, this); - - virtual_document.foreign_document_opened.connect( - this.on_foreign_document_opened, - this - ); - - const connection_context = await this.connect(virtual_document).catch( - this.console.warn - ); - - if (!send_open) { - return; - } - - if (connection_context && connection_context.connection) { - connection_context.connection.sendOpenWhenReady( - virtual_document.document_info - ); - } else { - this.console.warn( - `Connection for ${virtual_document.path} was not opened` - ); - } - } - - private create_virtual_editor( - options: IVirtualEditor.IOptions - ): IVirtualEditor | null { - let editorType = this.extension.editor_type_manager.findBestImplementation( - this.editors - ); - if (editorType == null) { - return null; - } - let virtualEditorConstructor = editorType.implementation; - return new virtualEditorConstructor(options); - } - - protected init_virtual() { - let virtual_editor = this.create_virtual_editor({ - adapter: this, - virtual_document: this.create_virtual_document() - }); - if (virtual_editor == null) { - this.console.error( - 'Could not initialize a VirtualEditor for adapter: ', - this - ); - return; - } - this.virtual_editor = virtual_editor; - this.connect_contentChanged_signal(); - } - - /** - * Handler for opening a document contained in a parent document. The assumption - * is that the editor already exists for this, and as such the document - * should be queued for immediate opening. - * - * @param host the VirtualDocument that contains the VirtualDocument in another language - * @param context information about the foreign VirtualDocument - */ - protected async on_foreign_document_opened( - host: VirtualDocument, - context: IForeignContext - ) { - const { foreign_document } = context; - - await this.connect_document(foreign_document, true); - - foreign_document.foreign_document_closed.connect( - this.on_foreign_document_closed, - this - ); - } - - private on_foreign_document_closed( - host: VirtualDocument, - context: IForeignContext - ) { - const { foreign_document } = context; - foreign_document.foreign_document_closed.disconnect( - this.on_foreign_document_closed, - this - ); - foreign_document.foreign_document_opened.disconnect( - this.on_foreign_document_opened, - this - ); - foreign_document.changed.disconnect(this.document_changed, this); - } - - document_changed( - virtual_document: VirtualDocument, - document: VirtualDocument, - is_init = false - ) { - if (this.isDisposed) { - this.console.warn('Cannot swap document: adapter disposed'); - return; - } - - // TODO only send the difference, using connection.sendSelectiveChange() - let connection = this.connection_manager.connections.get( - virtual_document.uri - ); - let adapter = this.adapters.get(virtual_document.id_path)!; - - if (!connection?.isReady) { - this.console.log('Skipping document update signal: connection not ready'); - return; - } - if (adapter == null) { - this.console.log('Skipping document update signal: adapter not ready'); - return; - } - - // this.virtual_editor.console.log( - // 'LSP: virtual document', - // virtual_document.id_path, - // 'has changed sending update' - // ); - connection.sendFullTextChange( - virtual_document.value, - virtual_document.document_info - ); - // the first change (initial) is not propagated to features, - // as it has no associated CodeMirrorChange object - if (!is_init) { - // guarantee that the virtual editor won't perform an update of the virtual documents while - // the changes are recorded... - // TODO this is not ideal - why it solves the problem of some errors, - // it introduces an unnecessary delay. A better way could be to invalidate some of the updates when a new one comes in. - // but maybe not every one (then the outdated state could be kept for too long fo a user who writes very quickly) - // also we would not want to invalidate the updates for the purpose of autocompletion (the trigger characters) - this.virtual_editor.virtual_document.update_manager - .with_update_lock(async () => { - await adapter.updateAfterChange(); - }) - .then() - .catch(this.console.warn); - } - } - - connect_adapter( - virtual_document: VirtualDocument, - connection: LSPConnection, - features: IFeature[] | null = null - ): EditorAdapter { - let adapter = this.create_adapter(virtual_document, connection, features); - this.adapters.set(virtual_document.id_path, adapter); - return adapter; - } - - private disconnect_adapter(virtual_document: VirtualDocument) { - let adapter = this.adapters.get(virtual_document.id_path); - this.adapters.delete(virtual_document.id_path); - if (adapter != null) { - adapter.dispose(); - } - } - - public get_features(virtual_document: VirtualDocument) { - let adapter = this.adapters.get(virtual_document.id_path); - return adapter?.features; - } - - private async connect(virtual_document: VirtualDocument) { - let language = virtual_document.language; - - this.console.log(`will connect using language: ${language}`); - - let capabilities: ClientCapabilities = { - textDocument: { - synchronization: { - dynamicRegistration: true, - willSave: false, - didSave: true, - willSaveWaitUntil: false - } - }, - workspace: { - didChangeConfiguration: { - dynamicRegistration: true - } - } - }; - - for (const feature of this.extension.feature_manager.features) { - if (!feature.capabilities) { - continue; - } - capabilities = mergeWith(capabilities, feature.capabilities); - } - - let options: ISocketConnectionOptions = { - capabilities, - virtual_document, - language, - document_path: this.document_path - }; - - let connection = await this.connection_manager.connect(options); - - if (connection) { - await this.on_connected({ virtual_document, connection }); - - return { - connection, - virtual_document - }; - } else { - return undefined; - } - } - - /** - * Connect the change signal in order to update all virtual documents after a change. - * - * Update to the state of a notebook may be done without a notice on the CodeMirror level, - * e.g. when a cell is deleted. Therefore a JupyterLab-specific signals are watched instead. - * - * While by not using the change event of CodeMirror editors we loose an easy way to send selective, - * (range) updates this can be still implemented by comparison of before/after states of the - * virtual documents, which is even more resilient and -obviously - editor-independent. - */ - private connect_contentChanged_signal() { - this.widget.context.model.contentChanged.connect( - this.onContentChanged, - this - ); - } - - private create_adapter( - virtual_document: VirtualDocument, - connection: LSPConnection, - features: IFeature[] | null = null - ): EditorAdapter> { - let adapter_features = new Array< - IFeatureEditorIntegration> - >(); - - if (features === null) { - features = this.extension.feature_manager.features; - } - - for (let feature of features) { - let featureEditorIntegrationConstructor = - feature.editorIntegrationFactory.get(this.virtual_editor.editor_name)!; - let integration = new featureEditorIntegrationConstructor({ - feature: feature, - virtual_editor: this.virtual_editor, - virtual_document: virtual_document, - connection: connection, - status_message: this.status_message, - settings: feature.settings!, - adapter: this, - trans: this.trans - }); - adapter_features.push(integration); - } - - let adapter = new EditorAdapter( - this.virtual_editor, - virtual_document, - adapter_features, - this.console - ); - this.console.log('Adapter for', this.document_path, 'is ready.'); - // the client is now fully ready: signal to the server that the document is "open" - connection.sendOpenWhenReady(virtual_document.document_info); - return adapter; - } - - private async onContentChanged(_slot: any) { - // update the virtual documents (sending the updates to LSP is out of scope here) - const promise = this.update_documents(); - if (!promise) { - this.console.warn('Could not update documents'); - return; - } - this.update_finished = promise.catch(this.console.warn); - await this.update_finished; - } - - get_position_from_context_menu(): IRootPosition | null { - // Note: could also try using this.app.contextMenu.menu.contentNode position. - // Note: could add a guard on this.app.contextMenu.menu.isAttached - - // get the first node as it gives the most accurate approximation - let leaf_node = this.app.contextMenuHitTest(() => true); - - if (!leaf_node) { - return null; - } - - let { left, top } = leaf_node.getBoundingClientRect(); - - // eslint-disable-next-line @typescript-eslint/ban-ts-comment - // @ts-ignore - let event = this.app._contextMenuEvent; - - // if possible, use more accurate position from the actual event - // (but this relies on an undocumented and unstable feature) - if (event !== undefined) { - left = event.clientX; - top = event.clientY; - event.stopPropagation(); - } - - return this.virtual_editor.window_coords_to_root_position({ - left: left, - top: top - }); - } - - abstract context_from_active_document(): ICommandContext | null; - - get_context(root_position: IRootPosition): ICommandContext | null { - // ignore premature calls and calls after disposal - if (!this.virtual_editor) { - return null; - } - let document = this.virtual_editor.document_at_root_position(root_position); - let virtual_position = - this.virtual_editor.root_position_to_virtual_position(root_position); - return { - document, - connection: this.connection_manager.connections.get(document.uri), - virtual_position, - root_position, - features: this.get_features(document)!, - editor: this.virtual_editor, - app: this.app, - adapter: this - }; - } - - get_context_from_context_menu(): ICommandContext | null { - let root_position = this.get_position_from_context_menu(); - if (!root_position) { - return null; - } - return this.get_context(root_position); - } - - abstract get wrapper_element(): HTMLElement; -} diff --git a/packages/jupyterlab-lsp/src/adapters/file_editor/file_editor.ts b/packages/jupyterlab-lsp/src/adapters/file_editor/file_editor.ts deleted file mode 100644 index b90396ead..000000000 --- a/packages/jupyterlab-lsp/src/adapters/file_editor/file_editor.ts +++ /dev/null @@ -1,143 +0,0 @@ -import { CodeEditor } from '@jupyterlab/codeeditor'; -import { CodeMirrorEditor } from '@jupyterlab/codemirror'; -import { IDocumentWidget } from '@jupyterlab/docregistry'; -import { FileEditor } from '@jupyterlab/fileeditor'; - -import { ICommandContext } from '../../command_manager'; -import { PositionConverter } from '../../converter'; -import { LSPExtension } from '../../index'; -import { IRootPosition, IVirtualPosition } from '../../positioning'; -import { VirtualDocument } from '../../virtual/document'; -import { IVirtualEditor } from '../../virtual/editor'; -import { WidgetAdapter } from '../adapter'; - -import IEditor = CodeEditor.IEditor; - -export class FileEditorAdapter extends WidgetAdapter< - IDocumentWidget -> { - editor: FileEditor; - virtual_editor: IVirtualEditor; - - get document_path() { - return this.widget.context.path; - } - - get mime_type() { - const codeMirrorMimeType = this.editor.model.mimeType; - const contentsModel = this.editor.context.contentsModel; - - // when MIME type is not known it defaults to 'text/plain', - // so if it is different we can accept it as it is - if (codeMirrorMimeType != 'text/plain') { - return codeMirrorMimeType; - } else if (contentsModel) { - // a script that does not have a MIME type known by the editor - // (no syntax highlight mode), can still be known by the document - // registry (and this is arguably easier to extend), so let's check it - // just in case; this is also how the "Klingon" language for testing - // gets registered, so we need it for tests too. - let fileType = - this.extension.app.docRegistry.getFileTypeForModel(contentsModel); - return fileType.mimeTypes[0]; - } else { - // "text/plain" this is - return codeMirrorMimeType; - } - } - - get language_file_extension(): string { - let parts = this.document_path.split('.'); - return parts[parts.length - 1]; - } - - get ce_editor(): CodeMirrorEditor { - return this.editor.editor as CodeMirrorEditor; - } - - get activeEditor(): CodeEditor.IEditor { - return this.editor.editor; - } - - constructor( - extension: LSPExtension, - editor_widget: IDocumentWidget - ) { - super(extension, editor_widget); - this.editor = editor_widget.content; - - this.initialized = new Promise((resolve, reject) => { - this.init_once_ready().then(resolve).catch(reject); - }); - } - - protected async init_once_ready() { - if (!this.editor.context.isReady) { - await this.editor.context.ready; - } - this.init_virtual(); - - this.console.log('file ready for connection:', this.path); - - // connect the document, but do not open it as the adapter will handle this - // after registering all features - this.connect_document(this.virtual_editor.virtual_document, false).catch( - this.console.warn - ); - - this.editor.model.mimeTypeChanged.connect(this.reload_connection, this); - } - - get_editor_index(ce_editor: CodeEditor.IEditor): number { - return 0; - } - - get_editor_wrapper(ce_editor: CodeEditor.IEditor): HTMLElement { - return this.wrapper_element; - } - - get wrapper_element(): HTMLElement { - return this.widget.node; - } - - get path() { - return this.widget.context.path; - } - - context_from_active_document(): ICommandContext | null { - // short circuit if disposed - if (!this.virtual_editor || !this.get_context) { - return null; - } - let editor = this.widget.content.editor; - let ce_cursor = editor.getCursorPosition(); - let root_position = PositionConverter.ce_to_cm(ce_cursor) as IRootPosition; - return this.get_context(root_position); - } - - get_editor_index_at(position: IVirtualPosition): number { - return 0; - } - - get editors(): CodeEditor.IEditor[] { - return [this.editor.editor]; - } - - create_virtual_document(): VirtualDocument { - // TODO: for now the magics and extractors are not used in FileEditor, - // although it would make sense to pass extractors (e.g. for CSS in HTML, - // or SQL in Python files) in the future. However, these would need to be - // a different registry (as we would not want to extract kernel-specific - // constructs like magics) - return new VirtualDocument({ - language: this.language, - file_extension: this.language_file_extension, - path: this.document_path, - overrides_registry: {}, - foreign_code_extractors: {}, - standalone: true, - has_lsp_supported_file: true, - console: this.console - }); - } -} diff --git a/packages/jupyterlab-lsp/src/adapters/file_editor/index.ts b/packages/jupyterlab-lsp/src/adapters/file_editor/index.ts deleted file mode 100644 index 13e613d22..000000000 --- a/packages/jupyterlab-lsp/src/adapters/file_editor/index.ts +++ /dev/null @@ -1,43 +0,0 @@ -import { JupyterFrontEndPlugin } from '@jupyterlab/application'; -import { IDocumentWidget } from '@jupyterlab/docregistry'; -import { IEditorTracker } from '@jupyterlab/fileeditor'; - -import { CommandEntryPoint } from '../../command_manager'; -import { ILSPAdapterManager, PLUGIN_ID } from '../../tokens'; - -import { FileEditorAdapter } from './file_editor'; - -export const FileEditorContextMenuEntryPoint: CommandEntryPoint = - 'file-editor-context-menu'; -export const FILE_EDITOR_ADAPTER: JupyterFrontEndPlugin = { - id: PLUGIN_ID + ':FileEditorAdapter', - requires: [ILSPAdapterManager], - optional: [IEditorTracker], - activate( - app, - adapterManager: ILSPAdapterManager, - fileEditorTracker: IEditorTracker | null - ) { - if (fileEditorTracker === null) { - console.warn( - 'LSP: no fileEditorTracker - not registering file editor capabilities' - ); - } else { - adapterManager.registerAdapterType({ - name: 'file_editor', - tracker: fileEditorTracker, - adapter: FileEditorAdapter, - entrypoint: FileEditorContextMenuEntryPoint, - get_id(widget: IDocumentWidget): string { - return widget.id; - }, - context_menu: { - selector: '.jp-FileEditor', - rank_group: 0, - rank_group_size: 4 - } - }); - } - }, - autoStart: true -}; diff --git a/packages/jupyterlab-lsp/src/adapters/fileeditor.ts b/packages/jupyterlab-lsp/src/adapters/fileeditor.ts new file mode 100644 index 000000000..8ce8a3dec --- /dev/null +++ b/packages/jupyterlab-lsp/src/adapters/fileeditor.ts @@ -0,0 +1,86 @@ +import { + JupyterFrontEnd, + JupyterFrontEndPlugin +} from '@jupyterlab/application'; +import { IDocumentWidget } from '@jupyterlab/docregistry'; +import { + FileEditorAdapter as UpstreamFileEditorAdapter, + FileEditor, + IFileEditorAdapterOptions, + IEditorTracker +} from '@jupyterlab/fileeditor'; +import { + ILSPCodeExtractorsManager, + ILSPFeatureManager, + ILSPDocumentConnectionManager +} from '@jupyterlab/lsp'; + +import { ILSPCodeOverridesManager } from '../overrides/tokens'; +import { VirtualDocument } from '../virtual/document'; + +interface IAdapterOptions extends IFileEditorAdapterOptions { + codeOverridesManager: ILSPCodeOverridesManager; +} + +export class FileEditorAdapter extends UpstreamFileEditorAdapter { + constructor( + public editorWidget: IDocumentWidget, + protected options: IAdapterOptions + ) { + super(editorWidget, options); + } + + /** + * Generate the virtual document associated with the document. + */ + createVirtualDocument(): VirtualDocument { + return new VirtualDocument({ + language: this.language, + foreignCodeExtractors: this.options.foreignCodeExtractorsManager, + path: this.documentPath, + fileExtension: this.languageFileExtension, + // notebooks are continuous, each cell is dependent on the previous one + standalone: true, + // notebooks are not supported by LSP servers + hasLspSupportedFile: true, + overridesRegistry: this.options.codeOverridesManager.registry + }); + } +} + +/** + * Activate the language server for file editor. + */ +function activateFileEditorLanguageServer( + app: JupyterFrontEnd, + editors: IEditorTracker, + connectionManager: ILSPDocumentConnectionManager, + featureManager: ILSPFeatureManager, + extractorManager: ILSPCodeExtractorsManager, + codeOverridesManager: ILSPCodeOverridesManager +): void { + editors.widgetAdded.connect(async (_, editor) => { + const adapter = new FileEditorAdapter(editor, { + connectionManager, + featureManager, + foreignCodeExtractorsManager: extractorManager, + docRegistry: app.docRegistry, + codeOverridesManager + }); + connectionManager.registerAdapter(editor.context.path, adapter); + }); +} + +export const FILEEDITOR_ADAPTER_PLUGIN: JupyterFrontEndPlugin = { + id: '@jupyter-lsp/fileeditor-adapter', + description: 'Adds language server capability to the notebooks.', + requires: [ + IEditorTracker, + ILSPDocumentConnectionManager, + ILSPFeatureManager, + ILSPCodeExtractorsManager, + ILSPCodeOverridesManager + ], + activate: activateFileEditorLanguageServer, + autoStart: true +}; diff --git a/packages/jupyterlab-lsp/src/adapters/integration.spec.ts b/packages/jupyterlab-lsp/src/adapters/integration.spec.ts new file mode 100644 index 000000000..a6da82ac9 --- /dev/null +++ b/packages/jupyterlab-lsp/src/adapters/integration.spec.ts @@ -0,0 +1,42 @@ +import { PageConfig } from '@jupyterlab/coreutils'; +import { DocumentConnectionManager } from '@jupyterlab/lsp'; + +import { + FileEditorTestEnvironment, + NotebookTestEnvironment +} from '../testutils'; + +describe('Integration of adapters', () => { + PageConfig.setOption('rootUri', '/home/username/project'); + PageConfig.setOption( + 'virtualDocumentsUri', + '/home/username/project/.virtualDocuments' + ); + + let fileEnvironment: FileEditorTestEnvironment; + let notebookEnvironment: NotebookTestEnvironment; + + beforeEach(async () => { + notebookEnvironment = new NotebookTestEnvironment(); + await notebookEnvironment.init(); + fileEnvironment = new FileEditorTestEnvironment(); + await fileEnvironment.init(); + }); + + // TODO: upstream this test + describe('#hasLspSupportedFile', () => { + it('gets passed on to the virtual document & used for connection uri base', () => { + const rootUri = PageConfig.getOption('rootUri'); + const virtualDocumentsUri = PageConfig.getOption('virtualDocumentsUri'); + expect(rootUri).not.toBe(virtualDocumentsUri); + + let document = notebookEnvironment.adapter.virtualDocument!; + let uris = DocumentConnectionManager.solveUris(document, 'python')!; + expect(uris.base.startsWith(virtualDocumentsUri)).toBe(true); + + document = fileEnvironment.adapter.virtualDocument!; + uris = DocumentConnectionManager.solveUris(document, 'python')!; + expect(uris.base.startsWith(virtualDocumentsUri)).toBe(false); + }); + }); +}); diff --git a/packages/jupyterlab-lsp/src/adapters/notebook.ts b/packages/jupyterlab-lsp/src/adapters/notebook.ts new file mode 100644 index 000000000..89723263f --- /dev/null +++ b/packages/jupyterlab-lsp/src/adapters/notebook.ts @@ -0,0 +1,114 @@ +import { + JupyterFrontEnd, + JupyterFrontEndPlugin +} from '@jupyterlab/application'; +import { + IAdapterOptions as IUpstreamIAdapterOptions, + ILSPCodeExtractorsManager, + ILSPFeatureManager, + ILSPDocumentConnectionManager, + Document +} from '@jupyterlab/lsp'; +import { + NotebookAdapter as UpstreamNotebookAdapter, + INotebookTracker, + NotebookPanel +} from '@jupyterlab/notebook'; + +import { ILSPCodeOverridesManager } from '../overrides/tokens'; +import { VirtualDocument } from '../virtual/document'; + +interface IAdapterOptions extends IUpstreamIAdapterOptions { + codeOverridesManager: ILSPCodeOverridesManager; +} + +export class NotebookAdapter extends UpstreamNotebookAdapter { + constructor( + public editorWidget: NotebookPanel, + protected options: IAdapterOptions + ) { + super(editorWidget, options); + } + + /** + * Generate the virtual document associated with the document. + */ + createVirtualDocument(): VirtualDocument { + return new VirtualDocument({ + language: this.language, + foreignCodeExtractors: this.options.foreignCodeExtractorsManager, + path: this.documentPath, + fileExtension: this.languageFileExtension, + // notebooks are continuous, each cell is dependent on the previous one + standalone: false, + // notebooks are not supported by LSP servers + hasLspSupportedFile: false, + overridesRegistry: this.options.codeOverridesManager.registry + }); + } + + protected async onForeignDocumentOpened( + _: VirtualDocument, + context: Document.IForeignContext + ): Promise { + /* + Opening a standalone foreign document can result in an inifnite loop, + as a new connection gets opened for these, and once that is ready + `updateDocuments()` gets called. + + To avoid the problem, `updateDocuments()` gets suppressed for standalone + documents. It does not affect non-standalone documents, because no new + connection gets opened for these. + */ + try { + this._blockUpdates = true; + await super.onForeignDocumentOpened(_, context); + } finally { + this._blockUpdates = false; + } + } + + updateDocuments(): Promise { + if (this._blockUpdates) { + return Promise.resolve(); + } + return super.updateDocuments(); + } + private _blockUpdates = false; +} + +/** + * Activate the language server for notebook. + */ +function activateNotebookLanguageServer( + app: JupyterFrontEnd, + notebooks: INotebookTracker, + connectionManager: ILSPDocumentConnectionManager, + featureManager: ILSPFeatureManager, + codeExtractorManager: ILSPCodeExtractorsManager, + codeOverridesManager: ILSPCodeOverridesManager +): void { + notebooks.widgetAdded.connect(async (_, notebook) => { + const adapter = new NotebookAdapter(notebook, { + connectionManager, + featureManager, + foreignCodeExtractorsManager: codeExtractorManager, + codeOverridesManager + }); + connectionManager.registerAdapter(notebook.context.path, adapter); + }); +} + +export const NOTEBOOK_ADAPTER_PLUGIN: JupyterFrontEndPlugin = { + id: '@jupyter-lsp/notebook-adapter', + description: 'Adds language server capability to the notebooks.', + requires: [ + INotebookTracker, + ILSPDocumentConnectionManager, + ILSPFeatureManager, + ILSPCodeExtractorsManager, + ILSPCodeOverridesManager + ], + activate: activateNotebookLanguageServer, + autoStart: true +}; diff --git a/packages/jupyterlab-lsp/src/adapters/notebook/index.ts b/packages/jupyterlab-lsp/src/adapters/notebook/index.ts deleted file mode 100644 index 1035da93c..000000000 --- a/packages/jupyterlab-lsp/src/adapters/notebook/index.ts +++ /dev/null @@ -1,54 +0,0 @@ -import { JupyterFrontEndPlugin } from '@jupyterlab/application'; -import { IDocumentWidget } from '@jupyterlab/docregistry'; -import { INotebookTracker } from '@jupyterlab/notebook'; - -import { CommandEntryPoint } from '../../command_manager'; -import { - IAdapterTypeOptions, - ILSPAdapterManager, - PLUGIN_ID -} from '../../tokens'; - -import { NotebookAdapter } from './notebook'; - -export const CellContextMenuEntryPoint: CommandEntryPoint = - 'notebook-cell-context-menu'; -export const NOTEBOOK_ADAPTER: JupyterFrontEndPlugin = { - id: PLUGIN_ID + ':NotebookAdapter', - requires: [ILSPAdapterManager, INotebookTracker], - activate( - app, - adapterManager: ILSPAdapterManager, - notebookTracker: INotebookTracker - ) { - adapterManager.registerAdapterType({ - name: 'notebook', - tracker: notebookTracker, - adapter: NotebookAdapter, - entrypoint: CellContextMenuEntryPoint, - get_id(widget: IDocumentWidget): string { - // TODO can we use id instead of content.id? - return widget.content.id; - }, - context_menu: { - selector: '.jp-Notebook .jp-CodeCell .jp-Editor', - // position context menu entries after 10th but before 11th default entry - // this lets it be before "Clear outputs" which is the last entry of the - // CodeCell contextmenu and plays nicely with the first notebook entry - // ('Clear all outputs') thus should stay as the last one. - // see https://github.com/blink1073/jupyterlab/blob/3592afd328116a588e3307b4cdd9bcabc7fe92bb/packages/notebook-extension/src/index.ts#L802 - // TODO: PR bumping rank of clear all outputs instead? - // adding a very small number (epsilon) places the group just after 10th entry - rank_group: 10 + Number.EPSILON, - // the group size is increased by one to account for separator, - // and by another one to prevent exceeding 11th rank by epsilon. - // TODO hardcoded space for 2 commands only! - rank_group_size: 2 + 2, - callback(manager) { - manager.add_context_separator(0); - } - } - } as IAdapterTypeOptions); - }, - autoStart: true -}; diff --git a/packages/jupyterlab-lsp/src/adapters/notebook/notebook.ts b/packages/jupyterlab-lsp/src/adapters/notebook/notebook.ts deleted file mode 100644 index c91655070..000000000 --- a/packages/jupyterlab-lsp/src/adapters/notebook/notebook.ts +++ /dev/null @@ -1,406 +0,0 @@ -import { SessionContext } from '@jupyterlab/apputils'; -import { Cell, ICellModel } from '@jupyterlab/cells'; -import { CodeEditor } from '@jupyterlab/codeeditor'; -import * as nbformat from '@jupyterlab/nbformat'; -import { Notebook, NotebookPanel } from '@jupyterlab/notebook'; -import { - IObservableList, - IObservableUndoableList -} from '@jupyterlab/observables'; -import { Session } from '@jupyterlab/services'; - -import { ICommandContext } from '../../command_manager'; -import { PositionConverter } from '../../converter'; -import { LSPExtension } from '../../index'; -import { IEditorPosition, IVirtualPosition } from '../../positioning'; -import { until_ready } from '../../utils'; -import { VirtualDocument } from '../../virtual/document'; -import { WidgetAdapter } from '../adapter'; - -import IEditor = CodeEditor.IEditor; -import ILanguageInfoMetadata = nbformat.ILanguageInfoMetadata; - -export class NotebookAdapter extends WidgetAdapter { - editor: Notebook; - private ce_editor_to_cell: Map; - private known_editors_ids: Set; - - private _language_info: ILanguageInfoMetadata; - private type: nbformat.CellType = 'code'; - - constructor(extension: LSPExtension, editor_widget: NotebookPanel) { - super(extension, editor_widget); - this.ce_editor_to_cell = new Map(); - this.editor = editor_widget.content; - this.known_editors_ids = new Set(); - this.initialized = new Promise((resolve, reject) => { - this.init_once_ready().then(resolve).catch(reject); - }); - } - - private async update_language_info() { - const language_info = ( - await this.widget.context.sessionContext?.session?.kernel?.info - )?.language_info; - if (language_info) { - this._language_info = language_info; - } else { - throw new Error( - 'Language info update failed (no session, kernel, or info available)' - ); - } - } - - async on_kernel_changed( - _session: SessionContext, - change: Session.ISessionConnection.IKernelChangedArgs - ) { - if (!change.newValue) { - this.console.log('Kernel was shut down'); - return; - } - try { - // note: we need to wait until ready before updating language info - this.console.log('Changed kernel, will try to reconnect'); - const old_language_info = this._language_info; - await until_ready(this.is_ready, -1); - await this.update_language_info(); - const new_language_info = this._language_info; - if ( - old_language_info?.name != new_language_info.name || - old_language_info?.mimetype != new_language_info?.mimetype || - old_language_info?.file_extension != new_language_info?.file_extension - ) { - this.console.log( - `Changed to ${this._language_info.name} kernel, reconnecting` - ); - this.reload_connection(); - } else { - this.console.log( - 'Keeping old LSP connection as the new kernel uses the same langauge' - ); - } - } catch (err) { - this.console.warn(err); - // try to reconnect anyway - this.reload_connection(); - } - } - - dispose() { - if (this.isDisposed) { - return; - } - - this.widget.context.sessionContext.kernelChanged.disconnect( - this.on_kernel_changed, - this - ); - this.widget.content.activeCellChanged.disconnect( - this.activeCellChanged, - this - ); - - super.dispose(); - - // editors are needed for the parent dispose() to unbind signals, so they are the last to go - this.ce_editor_to_cell.clear(); - } - - is_ready = () => { - return ( - !this.widget.isDisposed && - this.widget.context.isReady && - this.widget.content.isVisible && - this.widget.content.widgets.length > 0 && - this.widget.context.sessionContext.session?.kernel != null - ); - }; - - get document_path(): string { - return this.widget.context.path; - } - - protected language_info(): ILanguageInfoMetadata { - return this._language_info; - } - - get mime_type(): string { - let language_metadata = this.language_info(); - if (!language_metadata || !language_metadata.mimetype) { - // fallback to the code cell mime type if no kernel in use - return this.widget.content.codeMimetype; - } - return language_metadata.mimetype; - } - - get language_file_extension(): string | undefined { - let language_metadata = this.language_info(); - if (!language_metadata || !language_metadata.file_extension) { - return; - } - return language_metadata.file_extension.replace('.', ''); - } - - get wrapper_element() { - return this.widget.node; - } - - protected async init_once_ready() { - this.console.log('waiting for', this.document_path, 'to fully load'); - await this.widget.context.sessionContext.ready; - await until_ready(this.is_ready, -1); - await this.update_language_info(); - this.console.log(this.document_path, 'ready for connection'); - - this.init_virtual(); - - // connect the document, but do not open it as the adapter will handle this - // after registering all features - this.connect_document(this.virtual_editor.virtual_document, false).catch( - this.console.warn - ); - - this.widget.context.sessionContext.kernelChanged.connect( - this.on_kernel_changed, - this - ); - - this.widget.content.activeCellChanged.connect(this.activeCellChanged, this); - this._connectModelSignals(this.widget); - this.editor.modelChanged.connect(notebook => { - // note: this should not usually happen; - // there is no default action that would trigger this, - // its just a failsafe in case if another extension decides - // to swap the notebook model - this.console.warn( - 'Model changed, connecting cell change handler; this is not something we were expecting' - ); - this._connectModelSignals(notebook); - }); - } - - private _connectModelSignals(notebook: NotebookPanel | Notebook) { - if (notebook.model === null) { - this.console.warn( - `Model is missing for notebook ${notebook}, cannot connet cell changed signal!` - ); - } else { - notebook.model.cells.changed.connect(this.handle_cell_change, this); - } - } - - async handle_cell_change( - cells: IObservableUndoableList, - change: IObservableList.IChangedArgs - ) { - let cellsAdded: ICellModel[] = []; - let cellsRemoved: ICellModel[] = []; - const type = this.type; - - if (change.type === 'set') { - // handling of conversions is important, because the editors get re-used and their handlers inherited, - // so we need to clear our handlers from editors of e.g. markdown cells which previously were code cells. - let convertedToMarkdownOrRaw = []; - let convertedToCode = []; - - if (change.newValues.length === change.oldValues.length) { - // during conversion the cells should not get deleted nor added - for (let i = 0; i < change.newValues.length; i++) { - if ( - change.oldValues[i].type === type && - change.newValues[i].type !== type - ) { - convertedToMarkdownOrRaw.push(change.newValues[i]); - } else if ( - change.oldValues[i].type !== type && - change.newValues[i].type === type - ) { - convertedToCode.push(change.newValues[i]); - } - } - cellsAdded = convertedToCode; - cellsRemoved = convertedToMarkdownOrRaw; - } - } else if (change.type == 'add') { - cellsAdded = change.newValues.filter( - cellModel => cellModel.type === type - ); - } - // note: editorRemoved is not emitted for removal of cells by change of type 'remove' (but only during cell type conversion) - // because there is no easy way to get the widget associated with the removed cell(s) - because it is no - // longer in the notebook widget list! It would need to be tracked on our side, but it is not necessary - // as (except for a tiny memory leak) it should not impact the functionality in any way - - if ( - cellsRemoved.length || - cellsAdded.length || - change.type === 'move' || - change.type === 'remove' - ) { - // in contrast to the file editor document which can be only changed by the modification of the editor content, - // the notebook document cna also get modified by a change in the number or arrangement of editors themselves; - // for this reason each change has to trigger documents update (so that LSP mirror is in sync). - await this.update_documents(); - } - - for (let cellModel of cellsRemoved) { - let cellWidget = this.widget.content.widgets.find( - cell => cell.model.id === cellModel.id - ); - if (!cellWidget) { - this.console.warn( - `Widget for removed cell with ID: ${cellModel.id} not found!` - ); - continue; - } - this.known_editors_ids.delete(cellWidget.editor.uuid); - - // for practical purposes this editor got removed from our consideration; - // it might seem that we should instead look for the editor indicated by - // the oldValues[i] cellModel, but this one got already transferred to the - // markdown cell in newValues[i] - this.editorRemoved.emit({ - editor: cellWidget.editor - }); - } - - for (let cellModel of cellsAdded) { - let cellWidget = this.widget.content.widgets.find( - cell => cell.model.id === cellModel.id - ); - if (!cellWidget) { - this.console.warn( - `Widget for added cell with ID: ${cellModel.id} not found!` - ); - continue; - } - this.known_editors_ids.add(cellWidget.editor.uuid); - - this.editorAdded.emit({ - editor: cellWidget.editor - }); - } - } - - get editors(): CodeEditor.IEditor[] { - if (this.isDisposed) { - return []; - } - - let notebook = this.widget.content; - - this.ce_editor_to_cell.clear(); - - if (notebook.isDisposed) { - return []; - } - - return notebook.widgets - .filter(cell => cell.model.type === 'code') - .map(cell => { - this.ce_editor_to_cell.set(cell.editor, cell); - return cell.editor; - }); - } - - create_virtual_document() { - return new VirtualDocument({ - language: this.language, - path: this.document_path, - overrides_registry: this.code_overrides, - foreign_code_extractors: this.foreign_code_extractors, - file_extension: this.language_file_extension, - // notebooks are continuous, each cell is dependent on the previous one - standalone: false, - // notebooks are not supported by LSP servers - has_lsp_supported_file: false, - console: this.console - }); - } - - get activeEditor() { - return this.widget.content.activeCell?.editor; - } - - private activeCellChanged(notebook: Notebook, cell: Cell) { - if (cell.model.type !== this.type) { - return; - } - if (!this.known_editors_ids.has(cell.editor.uuid)) { - this.known_editors_ids.add(cell.editor.uuid); - this.editorAdded.emit({ - editor: cell.editor - }); - } - this.activeEditorChanged.emit({ - editor: cell.editor - }); - } - - context_from_active_document(): ICommandContext | null { - let cell = this.widget.content.activeCell; - if (cell === null) { - return null; - } - // short circuit if disposed - if (!this.virtual_editor || !this.get_context) { - return null; - } - if (cell.model.type !== this.type) { - // context will be sought on all cells to verify if the context menu should be visible, - // thus it is ok to just return null; it seems to stem from the implementation detail - // upstream, i.e. the markdown cells appear to be created by transforming the code cells - // but do not quote me on that. - return null; - } - let editor = cell.editor; - let ce_cursor = editor.getCursorPosition(); - let cm_cursor = PositionConverter.ce_to_cm(ce_cursor) as IEditorPosition; - - let virtual_editor = this.virtual_editor; - - if (virtual_editor == null) { - return null; - } - - let root_position = virtual_editor.transform_from_editor_to_root( - editor, - cm_cursor - ); - - if (root_position == null) { - this.console.warn('Could not retrieve current context', virtual_editor); - return null; - } - - return this.get_context(root_position); - } - - get_editor_index_at(position: IVirtualPosition): number { - let cell = this.get_cell_at(position); - let notebook = this.widget.content; - return notebook.widgets.findIndex(other_cell => { - return cell === other_cell; - }); - } - - get_editor_index(ce_editor: CodeEditor.IEditor): number { - let cell = this.ce_editor_to_cell.get(ce_editor)!; - let notebook = this.widget.content; - return notebook.widgets.findIndex(other_cell => { - return cell === other_cell; - }); - } - - get_editor_wrapper(ce_editor: CodeEditor.IEditor): HTMLElement { - let cell = this.ce_editor_to_cell.get(ce_editor)!; - return cell.node; - } - - private get_cell_at(pos: IVirtualPosition): Cell { - let ce_editor = - this.virtual_editor.virtual_document.get_editor_at_virtual_line(pos); - return this.ce_editor_to_cell.get(ce_editor)!; - } -} diff --git a/packages/jupyterlab-lsp/src/api/extractor.ts b/packages/jupyterlab-lsp/src/api/extractor.ts index df774caa5..db990a96a 100644 --- a/packages/jupyterlab-lsp/src/api/extractor.ts +++ b/packages/jupyterlab-lsp/src/api/extractor.ts @@ -5,10 +5,10 @@ * * @see https://github.com/jupyter-lsp/jupyterlab-lsp/issues/561 */ -export { LanguageIdentifier } from '../lsp'; -export { - IForeignCodeExtractor, - IForeignCodeExtractorsRegistry, - IExtractedCode -} from '../extractors/types'; +export { LanguageIdentifier } from '@jupyterlab/lsp/lib/lsp'; +/** + * @deprecated - use `@jupyterlab/lsp` + */ +export { IForeignCodeExtractor, IExtractedCode } from '@jupyterlab/lsp'; +export { IForeignCodeExtractorsRegistry } from '../extractors/types'; export { RegExpForeignCodeExtractor } from '../extractors/regexp'; diff --git a/packages/jupyterlab-lsp/src/command_manager.spec.ts b/packages/jupyterlab-lsp/src/command_manager.spec.ts deleted file mode 100644 index 1cb46edd1..000000000 --- a/packages/jupyterlab-lsp/src/command_manager.spec.ts +++ /dev/null @@ -1,103 +0,0 @@ -import { IDocumentWidget } from '@jupyterlab/docregistry'; -import { expect } from 'chai'; - -import { WidgetAdapter } from './adapters/adapter'; -import { - CommandEntryPoint, - ContextCommandManager, - IContextMenuOptions -} from './command_manager'; -import { IFeatureCommand } from './feature'; -import { BrowserConsole } from './virtual/console'; - -describe('ContextMenuCommandManager', () => { - class ManagerImplementation extends ContextCommandManager { - constructor(options: IContextMenuOptions) { - super({ - app: null as any, - adapter_manager: null as any, - palette: null as any, - tracker: null as any, - suffix: null as any, - entry_point: null as any, - console: new BrowserConsole(), - ...options - }); - } - - public get_rank(command: IFeatureCommand): number { - return super.get_rank(command); - } - - entry_point: CommandEntryPoint; - selector: string; - - get current_adapter(): WidgetAdapter { - return undefined as any; - } - } - let manager: ManagerImplementation; - - let base_command = { - id: 'cmd', - execute: () => { - // nothing here yet - }, - is_enabled: () => { - return true; - }, - label: 'Command' - } as IFeatureCommand; - - describe('#get_rank()', () => { - it('uses in-group (relative) positioning by default', () => { - manager = new ManagerImplementation({ - selector: 'body', - rank_group: 0, - rank_group_size: 5 - }); - let rank = manager.get_rank(base_command); - expect(rank).to.equal(0); - - rank = manager.get_rank({ ...base_command, rank: 1 }); - expect(rank).to.equal(1 / 5); - - manager = new ManagerImplementation({ - selector: 'body', - rank_group: 1, - rank_group_size: 5 - }); - - rank = manager.get_rank({ ...base_command, rank: 1 }); - expect(rank).to.equal(1 + 1 / 5); - - manager = new ManagerImplementation({ - selector: 'body' - }); - rank = manager.get_rank(base_command); - expect(rank).to.equal(Infinity); - }); - }); - - it('respects is_rank_relative value', () => { - manager = new ManagerImplementation({ - selector: 'body', - rank_group: 0, - rank_group_size: 5 - }); - - let rank = manager.get_rank({ - ...base_command, - rank: 1, - is_rank_relative: false - }); - expect(rank).to.equal(1); - - rank = manager.get_rank({ - ...base_command, - rank: 1, - is_rank_relative: true - }); - expect(rank).to.equal(1 / 5); - }); -}); diff --git a/packages/jupyterlab-lsp/src/command_manager.ts b/packages/jupyterlab-lsp/src/command_manager.ts deleted file mode 100644 index 79ccf7208..000000000 --- a/packages/jupyterlab-lsp/src/command_manager.ts +++ /dev/null @@ -1,245 +0,0 @@ -import { JupyterFrontEnd } from '@jupyterlab/application'; -import { ICommandPalette, IWidgetTracker } from '@jupyterlab/apputils'; -import { CodeEditor } from '@jupyterlab/codeeditor'; -import { IDocumentWidget } from '@jupyterlab/docregistry'; - -import { WidgetAdapter } from './adapters/adapter'; -import { LSPConnection } from './connection'; -import { IFeatureCommand, IFeatureEditorIntegration } from './feature'; -import { IRootPosition, IVirtualPosition, PositionError } from './positioning'; -import { ILSPAdapterManager, ILSPLogConsole } from './tokens'; -import { VirtualDocument } from './virtual/document'; -import { IVirtualEditor } from './virtual/editor'; - -function is_context_menu_over_token(adapter: WidgetAdapter) { - let position = adapter.get_position_from_context_menu(); - if (!position) { - return false; - } - let token = adapter.virtual_editor.get_token_at(position); - return token.value !== ''; -} - -export type CommandEntryPoint = string; - -export interface ILSPCommandManagerOptions { - adapter_manager: ILSPAdapterManager; - app: JupyterFrontEnd; - palette: ICommandPalette; - tracker: IWidgetTracker; - suffix: string; - entry_point: CommandEntryPoint; - console: ILSPLogConsole; -} - -abstract class LSPCommandManager { - protected adapter_manager: ILSPAdapterManager; - protected app: JupyterFrontEnd; - protected palette: ICommandPalette; - protected tracker: IWidgetTracker; - protected suffix: string; - protected entry_point: CommandEntryPoint; - - protected constructor(options: ILSPCommandManagerOptions) { - this.adapter_manager = options.adapter_manager; - this.app = options.app; - this.palette = options.palette; - this.tracker = options.tracker; - this.suffix = options.suffix; - this.entry_point = options.entry_point; - } - - get current_adapter() { - return this.adapter_manager.currentAdapter; - } - abstract attach_command(command: IFeatureCommand): void; - abstract execute(command: IFeatureCommand): void; - abstract is_enabled(command: IFeatureCommand): boolean; - abstract is_visible(command: IFeatureCommand): boolean; - add_to_palette: boolean = true; - category: string = 'Language Server Protocol'; - - add(commands: Array) { - for (let cmd of commands) { - let id = this.create_id(cmd); - this.app.commands.addCommand(id, { - execute: () => this.execute(cmd), - isEnabled: () => this.is_enabled(cmd), - isVisible: () => this.is_visible(cmd), - label: cmd.label, - icon: cmd.icon - }); - - if (this.should_attach(cmd)) { - this.attach_command(cmd); - } - - if (this.add_to_palette) { - this.palette.addItem({ command: id, category: this.category }); - } - } - } - - protected should_attach(command: IFeatureCommand) { - if (command.attach_to == null) { - return true; - } - return command.attach_to.has(this.entry_point); - } - - protected create_id(command: IFeatureCommand): string { - return 'lsp:' + command.id + '-' + this.suffix; - } -} - -export interface IContextMenuOptions { - selector: string; - rank_group?: number; - rank_group_size?: number; - callback?(manager: ContextCommandManager): void; -} - -export interface ILSPContextManagerOptions - extends ILSPCommandManagerOptions, - IContextMenuOptions {} - -/** - * Contextual commands, with the context retrieved from the ContextMenu - * position (if open) or from the cursor in the current widget. - */ -export class ContextCommandManager extends LSPCommandManager { - protected selector: string; - public entry_point: CommandEntryPoint; - protected rank_group?: number; - protected rank_group_size?: number; - protected console: ILSPLogConsole; - - constructor(options: ILSPContextManagerOptions) { - super(options); - this.selector = options.selector; - this.entry_point = options.entry_point; - this.rank_group = options.rank_group; - this.rank_group_size = options.rank_group_size; - this.console = options.console; - if (options.callback) { - options.callback(this); - } - } - - attach_command(command: IFeatureCommand): void { - this.app.contextMenu.addItem({ - selector: this.selector, - command: this.create_id(command), - rank: this.get_rank(command) - }); - } - - add_context_separator(position_in_group: number) { - this.app.contextMenu.addItem({ - type: 'separator', - selector: this.selector, - rank: (this.rank_group ?? 0) + position_in_group - }); - } - - execute(command: IFeatureCommand): void { - let context = this.get_context(); - if (context) { - command.execute(context); - } - } - - protected get is_context_menu_open(): boolean { - return this.app.contextMenu.menu.isAttached; - } - - protected get is_widget_current(): boolean { - // is the current widget of given type (notebook/editor) - // also the currently used widget in the entire app? - return ( - this.tracker.currentWidget != null && - this.tracker.currentWidget === this.app.shell.currentWidget - ); - } - - is_enabled() { - if (this.is_context_menu_open) { - return is_context_menu_over_token(this.current_adapter); - } else { - return this.is_widget_current; - } - } - - get_context(): ICommandContext | null { - let context: ICommandContext | null = null; - if (this.is_context_menu_open) { - try { - context = this.current_adapter.get_context_from_context_menu(); - } catch (e) { - this.console.warn( - 'contextMenu is attached, but could not get the context', - e - ); - context = null; - } - } - if (context == null) { - try { - context = this.current_adapter?.context_from_active_document(); - } catch (e) { - if (e instanceof PositionError) { - this.console.log( - 'Could not get context from active document: it is expected when restoring workspace with open files' - ); - } else { - throw e; - } - } - } - return context; - } - - is_visible(command: IFeatureCommand): boolean { - try { - let context = this.get_context(); - return ( - context != null && - this.current_adapter && - context.connection != null && - context.connection.isReady && - command.is_enabled(context) - ); - } catch (e) { - this.console.warn('is_visible failed', e); - return false; - } - } - - protected get_rank(command: IFeatureCommand): number { - let is_relative = - typeof command.is_rank_relative === 'undefined' - ? true - : command.is_rank_relative; - if ( - is_relative && - typeof this.rank_group !== 'undefined' && - this.rank_group_size - ) { - let relative = typeof command.rank !== 'undefined' ? command.rank : 0; - return this.rank_group + relative / this.rank_group_size; - } else { - return command.rank != null ? command.rank : Infinity; - } - } -} - -export interface ICommandContext { - app: JupyterFrontEnd; - document: VirtualDocument; - connection?: LSPConnection; - virtual_position: IVirtualPosition; - root_position: IRootPosition; - features: Map>; - editor: IVirtualEditor; - adapter: WidgetAdapter; -} diff --git a/packages/jupyterlab-lsp/src/components/free_tooltip.ts b/packages/jupyterlab-lsp/src/components/free_tooltip.ts index 4deed0983..30c9202c8 100644 --- a/packages/jupyterlab-lsp/src/components/free_tooltip.ts +++ b/packages/jupyterlab-lsp/src/components/free_tooltip.ts @@ -4,6 +4,7 @@ import { HoverBox } from '@jupyterlab/apputils'; import { CodeEditor } from '@jupyterlab/codeeditor'; import { IDocumentWidget } from '@jupyterlab/docregistry'; +import { IEditorPosition, isEqual, WidgetLSPAdapter } from '@jupyterlab/lsp'; import { IRenderMime, MimeModel, @@ -13,9 +14,7 @@ import { Tooltip } from '@jupyterlab/tooltip'; import { Widget } from '@lumino/widgets'; import * as lsProtocol from 'vscode-languageserver-protocol'; -import { WidgetAdapter } from '../adapters/adapter'; import { PositionConverter } from '../converter'; -import { IEditorPosition, is_equal } from '../positioning'; const MIN_HEIGHT = 20; const MAX_HEIGHT = 250; @@ -159,9 +158,6 @@ export class FreeTooltip extends Tooltip { offset: { horizontal: -1 * paddingLeft }, privilege: this.options.privilege || 'below', style: style, - // TODO: remove `ts-ignore` once minimum version is >=3.5 - // eslint-disable-next-line @typescript-eslint/ban-ts-comment - // @ts-ignore outOfViewDisplay: { left: 'stick-inside', right: 'stick-outside', @@ -181,9 +177,9 @@ export namespace EditorTooltip { export interface IOptions { id?: string; markup: lsProtocol.MarkupContent; - ce_editor: CodeEditor.IEditor; + ceEditor: CodeEditor.IEditor; position: IEditorPosition; - adapter: WidgetAdapter; + adapter: WidgetLSPAdapter; className?: string; tooltip?: Partial; } @@ -211,7 +207,7 @@ export class EditorTooltipManager { ...(options.tooltip || {}), anchor: widget.content, bundle: bundle, - editor: options.ce_editor, + editor: options.ceEditor, rendermime: this.rendermime_registry, position: PositionConverter.cm_to_ce(position) }); @@ -227,7 +223,7 @@ export class EditorTooltipManager { showOrCreate(options: EditorTooltip.IOptions): FreeTooltip { const samePosition = this.currentOptions && - is_equal(this.currentOptions.position, options.position); + isEqual(this.currentOptions.position, options.position); const sameMarkup = this.currentOptions && this.currentOptions.markup.value === options.markup.value && @@ -238,7 +234,7 @@ export class EditorTooltipManager { this.currentOptions && this.currentOptions.adapter === options.adapter && (samePosition || sameMarkup) && - this.currentOptions.ce_editor === options.ce_editor && + this.currentOptions.ceEditor === options.ceEditor && this.currentOptions.id === options.id ) { // we only allow either position or markup change, because if both changed, diff --git a/packages/jupyterlab-lsp/src/components/serverSettings.tsx b/packages/jupyterlab-lsp/src/components/serverSettings.tsx index 5287f7957..82a78579c 100644 --- a/packages/jupyterlab-lsp/src/components/serverSettings.tsx +++ b/packages/jupyterlab-lsp/src/components/serverSettings.tsx @@ -1,17 +1,19 @@ +import { ILanguageServerManager, LanguageServerManager } from '@jupyterlab/lsp'; import { ISettingRegistry, ISchemaValidator } from '@jupyterlab/settingregistry'; import { TranslationBundle } from '@jupyterlab/translation'; import { ReadonlyPartialJSONObject } from '@lumino/coreutils'; -import Form, { +import Form, { IChangeEvent } from '@rjsf/core'; +import { FieldProps, - IChangeEvent, - ObjectFieldTemplateProps -} from '@rjsf/core'; + ObjectFieldTemplateProps, + TemplatesType +} from '@rjsf/utils'; +import validatorAjv8 from '@rjsf/validator-ajv8'; import React, { useState } from 'react'; -import { LanguageServerManager } from '../manager'; import { TLanguageServerId, TLanguageServerSpec } from '../tokens'; import { ServerLinksList } from './utils'; @@ -19,15 +21,13 @@ import { ServerLinksList } from './utils'; namespace LanguageServerSettingsEditor { export interface IProps extends FieldProps { settingRegistry: ISettingRegistry; - languageServerManager: LanguageServerManager; + languageServerManager: ILanguageServerManager; trans: TranslationBundle; validationErrors: ISchemaValidator.IError[]; } - export interface IState { - // TODO - } + // TODO + export type IState = any; } - export const renderCollapseConflicts = (props: { conflicts: Record>; trans: TranslationBundle; @@ -75,7 +75,7 @@ export class LanguageServerSettings extends React.Component< super(props); this.state = { ...props.formData }; this._objectTemplate = TabbedObjectTemplateFactory({ - baseTemplate: (this.props.registry as any).ObjectFieldTemplate, + baseTemplate: this.props.registry.templates.ObjectFieldTemplate, objectSelector: props => { return ( props.title === this.props.schema.title && @@ -97,8 +97,9 @@ export class LanguageServerSettings extends React.Component< } const validationErrors = this.props.validationErrors.map(error => ( -
  • - {error.keyword}: {error.message} in {error.dataPath} +
  • + {error.keyword}: {error.message} in{' '} + {error.instancePath} {error.params && 'allowedValues' in error.params ? this.props.trans.__( 'allowed values: %1', @@ -107,6 +108,16 @@ export class LanguageServerSettings extends React.Component< : null}
  • )); + const templates = { + ...this.props.registry.templates, + ObjectFieldTemplate: this._objectTemplate + }; + // remove self field to avoid infinite recursion + const fields = Object.fromEntries( + Object.entries(this.props.registry.fields).filter( + f => f[0] != 'language_servers' + ) + ); return (
    @@ -131,17 +142,17 @@ export class LanguageServerSettings extends React.Component<
    of objects<; // the issue is in lines: https://github.com/jupyterlab/jupyterlab/blob/c2907074e58725942946a73a823fc60e1795da39/packages/settingeditor/src/SettingsFormEditor.tsx#L254-L272 // this is because 1) the schemaIds does not include the object key // 2) the code assumes all objects on the same have the same defaults // Probably the solution is to perform modification check on the level of ObjectFieldTemplate instead; this should be implemented upstream in JupyterLab. - FieldTemplate={(this.props.registry as any).FieldTemplate} - ArrayFieldTemplate={(this.props.registry as any).ArrayFieldTemplate} - ObjectFieldTemplate={this._objectTemplate} + // TODO + templates={templates} uiSchema={this.props.uiSchema} - fields={this.props.renderers} + fields={fields} formContext={this.props.formContext} liveValidate idPrefix={this.props.idPrefix + '_language_servers'} @@ -165,14 +176,15 @@ export class LanguageServerSettings extends React.Component< * Template for tabbed interface. */ const TabbedObjectTemplateFactory = (options: { - baseTemplate: (props: ObjectFieldTemplateProps) => JSX.Element; - languageServerManager: LanguageServerManager; + baseTemplate: TemplatesType['ObjectFieldTemplate']; + languageServerManager: ILanguageServerManager; objectSelector: (props: ObjectFieldTemplateProps) => boolean; trans: TranslationBundle; }): React.FC => { const factory = (props: ObjectFieldTemplateProps) => { if (!options.objectSelector(props)) { - return options.baseTemplate(props); + const BaseTemplate = options.baseTemplate; + return ; } const [tab, setTab] = useState( props.properties.length > 0 ? props.properties[0].name : null @@ -232,6 +244,7 @@ const TabbedObjectTemplateFactory = (options: { const manager = options.languageServerManager; const trans = options.trans; + // TODO: expose `specs` upstream return (
    @@ -248,9 +261,13 @@ const TabbedObjectTemplateFactory = (options: { })}
    - {manager.specs.has(tab as TLanguageServerId) + {(manager as LanguageServerManager).specs.has( + tab as TLanguageServerId + ) ? renderServerMetadata( - manager.specs.get(tab as TLanguageServerId)! + (manager as LanguageServerManager).specs.get( + tab as TLanguageServerId + )! ) : null} {props.properties diff --git a/packages/jupyterlab-lsp/src/components/statusbar.tsx b/packages/jupyterlab-lsp/src/components/statusbar.tsx index f67525858..c448f6aff 100644 --- a/packages/jupyterlab-lsp/src/components/statusbar.tsx +++ b/packages/jupyterlab-lsp/src/components/statusbar.tsx @@ -2,6 +2,7 @@ // Distributed under the terms of the Modified BSD License. // Based on the @jupyterlab/codemirror-extension statusbar +import { JupyterFrontEnd } from '@jupyterlab/application'; import { VDomModel, VDomRenderer, @@ -9,14 +10,16 @@ import { showDialog } from '@jupyterlab/apputils'; import { DocumentRegistry, IDocumentWidget } from '@jupyterlab/docregistry'; -import { INotebookModel, NotebookPanel } from '@jupyterlab/notebook'; import { - GroupItem, - Popup, - TextItem, - interactiveItem, - showPopup -} from '@jupyterlab/statusbar'; + ILSPConnection, + collectDocuments, + ILSPDocumentConnectionManager, + VirtualDocument, + WidgetLSPAdapter, + ILanguageServerManager +} from '@jupyterlab/lsp'; +import { INotebookModel, NotebookPanel } from '@jupyterlab/notebook'; +import { GroupItem, Popup, TextItem, showPopup } from '@jupyterlab/statusbar'; import { TranslationBundle } from '@jupyterlab/translation'; import { LabIcon, @@ -30,19 +33,8 @@ import React from 'react'; import '../../style/statusbar.css'; import * as SCHEMA from '../_schema'; -import { WidgetAdapter } from '../adapters/adapter'; -import { LSPConnection } from '../connection'; -import { DocumentConnectionManager } from '../connection_manager'; import { SERVER_EXTENSION_404 } from '../errors'; -import { LanguageServerManager } from '../manager'; -import { - ILSPAdapterManager, - ILanguageServerManager, - TSessionMap, - TLanguageServerId, - TSpecsMap -} from '../tokens'; -import { VirtualDocument, collect_documents } from '../virtual/document'; +import { TSessionMap, TLanguageServerId, TSpecsMap } from '../tokens'; import { codeCheckIcon, codeClockIcon, codeWarningIcon } from './icons'; import { DocumentLocator, ServerLinksList } from './utils'; @@ -384,55 +376,25 @@ class LSPPopup extends VDomRenderer { } } -const SELECTED_CLASS = 'jp-mod-selected'; - /** * StatusBar item. */ export class LSPStatus extends VDomRenderer { protected _popup: Popup | null = null; - private interactiveStateObserver: MutationObserver; private trans: TranslationBundle; /** * Construct a new VDomRenderer for the status item. */ constructor( - widget_manager: ILSPAdapterManager, protected displayText: boolean = true, + shell: JupyterFrontEnd.IShell, trans: TranslationBundle ) { - super(new LSPStatus.Model(widget_manager, trans)); - this.addClass(interactiveItem); + super(new LSPStatus.Model(shell, trans)); + this.addClass('jp-mod-highlighted'); this.addClass('lsp-statusbar-item'); this.trans = trans; this.title.caption = this.trans.__('LSP status'); - - // add human-readable (and stable) class name reflecting otherwise obfuscated typestyle interactiveItem - this.interactiveStateObserver = new MutationObserver(() => { - const has_selected = this.node.classList.contains(SELECTED_CLASS); - if (!this.node.classList.contains(interactiveItem)) { - if (!has_selected) { - this.addClass(SELECTED_CLASS); - } - } else { - if (has_selected) { - this.removeClass(SELECTED_CLASS); - } - } - }); - } - - protected onAfterAttach(msg: any) { - super.onAfterAttach(msg); - this.interactiveStateObserver.observe(this.node, { - attributes: true, - attributeFilter: ['class'] - }); - } - - protected onBeforeDetach(msg: any) { - super.onBeforeDetach(msg); - this.interactiveStateObserver.disconnect(); } /** @@ -454,7 +416,7 @@ export class LSPStatus extends VDomRenderer { > {this.displayText ? ( @@ -465,7 +427,6 @@ export class LSPStatus extends VDomRenderer { ) : ( <> )} - ); } @@ -484,7 +445,8 @@ export class LSPStatus extends VDomRenderer { this._popup = showPopup({ body: new LSPPopup(this.model), anchor: this, - align: 'left' + align: 'left', + hasDynamicSize: true }); } }; @@ -495,10 +457,10 @@ export class StatusButtonExtension { constructor( private options: { - language_server_manager: LanguageServerManager; - connection_manager: DocumentConnectionManager; - adapter_manager: ILSPAdapterManager; - translator_bundle: TranslationBundle; + languageServerManager: ILanguageServerManager; + connectionManager: ILSPDocumentConnectionManager; + shell: JupyterFrontEnd.IShell; + translatorBundle: TranslationBundle; } ) {} @@ -506,15 +468,15 @@ export class StatusButtonExtension * For statusbar registration and for internal use. */ createItem(displayText: boolean = true): LSPStatus { - const status_bar_item = new LSPStatus( - this.options.adapter_manager, + const statusBarItem = new LSPStatus( displayText, - this.options.translator_bundle + this.options.shell, + this.options.translatorBundle ); - status_bar_item.model.language_server_manager = - this.options.language_server_manager; - status_bar_item.model.connection_manager = this.options.connection_manager; - return status_bar_item; + statusBarItem.model.language_server_manager = + this.options.languageServerManager; + statusBarItem.model.connection_manager = this.options.connectionManager; + return statusBarItem; } /** @@ -543,13 +505,13 @@ type StatusCode = export interface IStatus { connected_documents: Set; initialized_documents: Set; - open_connections: Array; + open_connections: Array; detected_documents: Set; status: StatusCode; } -function collect_languages(virtual_document: VirtualDocument): Set { - let documents = collect_documents(virtual_document); +function collect_languages(virtualDocument: VirtualDocument): Set { + let documents = collectDocuments(virtualDocument); return new Set( [...documents].map(document => document.language.toLocaleLowerCase()) ); @@ -576,15 +538,6 @@ const iconByStatus: Record = { connecting: codeClockIcon }; -const shortMessageByStatus: StatusMap = { - no_server_extension: 'Server extension missing', - waiting: 'Waiting...', - initialized: 'Fully initialized', - initialized_but_some_missing: 'Initialized (additional servers needed)', - initializing: 'Initializing...', - connecting: 'Connecting...' -}; - export namespace LSPStatus { /** * A VDomModel for the LSP of current file editor/notebook. @@ -593,22 +546,25 @@ export namespace LSPStatus { server_extension_status: SCHEMA.ServersResponse | null = null; language_server_manager: ILanguageServerManager; trans: TranslationBundle; - private _connection_manager: DocumentConnectionManager; + private _connection_manager: ILSPDocumentConnectionManager; + private _shortMessageByStatus: StatusMap; constructor( - widget_adapter_manager: ILSPAdapterManager, + private _shell: JupyterFrontEnd.IShell, trans: TranslationBundle ) { super(); this.trans = trans; - widget_adapter_manager.adapterChanged.connect((manager, adapter) => { - this.change_adapter(adapter); - }, this); - widget_adapter_manager.adapterDisposed.connect((manager, adapter) => { - if (this.adapter === adapter) { - this.change_adapter(null); - } - }, this); + this._shortMessageByStatus = { + no_server_extension: trans.__('Server extension missing'), + waiting: trans.__('Waiting…'), + initialized: trans.__('Fully initialized'), + initialized_but_some_missing: trans.__( + 'Initialized (additional servers needed)' + ), + initializing: trans.__('Initializing…'), + connecting: trans.__('Connecting…') + }; } get available_servers(): TSessionMap { @@ -650,17 +606,17 @@ export namespace LSPStatus { SCHEMA.LanguageServerSession, Map >(); - if (!this.adapter?.virtual_editor) { + if (!this.adapter?.virtualDocument) { return data; } - let main_document = this.adapter.virtual_editor.virtual_document; - let documents = collect_documents(main_document); + let main_document = this.adapter.virtualDocument; + let documents = collectDocuments(main_document); for (let document of documents.values()) { let language = document.language.toLocaleLowerCase(); let server_ids = - this._connection_manager.language_server_manager.getMatchingServers({ + this._connection_manager.languageServerManager.getMatchingServers({ language: document.language }); if (server_ids.length === 0) { @@ -692,11 +648,11 @@ export namespace LSPStatus { } get detected_languages(): Set { - if (!this.adapter?.virtual_editor) { + if (!this.adapter?.virtualDocument) { return new Set(); } - let document = this.adapter.virtual_editor.virtual_document; + let document = this.adapter.virtualDocument; return collect_languages(document); } @@ -710,13 +666,13 @@ export namespace LSPStatus { get status(): IStatus { let detected_documents: Map; - if (!this.adapter?.virtual_editor) { + if (!this.adapter?.virtualDocument) { detected_documents = new Map(); } else { - let main_document = this.adapter.virtual_editor.virtual_document; + let main_document = this.adapter.virtualDocument; const all_documents = this._connection_manager.documents; // detected documents that are open in the current virtual editor - const detected_documents_set = collect_documents(main_document); + const detected_documents_set = collectDocuments(main_document); detected_documents = new Map( [...all_documents].filter(([id, doc]) => detected_documents_set.has(doc) @@ -735,7 +691,7 @@ export namespace LSPStatus { detected_documents.forEach((document, uri) => { let connection = this._connection_manager.connections.get(uri); let server_ids = - this._connection_manager.language_server_manager.getMatchingServers({ + this._connection_manager.languageServerManager.getMatchingServers({ language: document.language }); @@ -759,7 +715,7 @@ export namespace LSPStatus { // there may be more open connections than documents if a document was recently closed // and the grace period has not passed yet - let open_connections = new Array(); + let open_connections = new Array(); this._connection_manager.connections.forEach((connection, path) => { if (connection.isConnected) { open_connections.push(connection); @@ -806,13 +762,9 @@ export namespace LSPStatus { get short_message(): string { if (!this.adapter) { - return this.trans.__('not initialized'); + return this.trans.__('Not initialized'); } - return this.trans.__(shortMessageByStatus[this.status.status]); - } - - get feature_message(): string { - return this.adapter?.status_message?.message || ''; + return this._shortMessageByStatus[this.status.status]; } get long_message(): string { @@ -845,7 +797,7 @@ export namespace LSPStatus { status.detected_documents.size, uninitialized.size, status.detected_documents.size, - [...uninitialized].map(document => document.id_path).join(', ') + [...uninitialized].map(document => document.idPath).join(', ') ); } else { const unconnected = new Set(status.detected_documents); @@ -861,26 +813,17 @@ export namespace LSPStatus { status.connected_documents.size, status.detected_documents.size, status.open_connections.length, - [...unconnected].map(document => document.id_path).join(', ') + [...unconnected].map(document => document.idPath).join(', ') ); } return msg; } - get adapter(): WidgetAdapter | null { - return this._adapter; - } - - change_adapter(adapter: WidgetAdapter | null) { - if (this._adapter != null) { - this._adapter.status_message.changed.disconnect(this._onChange); - } - - if (adapter != null) { - adapter.status_message.changed.connect(this._onChange); - } - - this._adapter = adapter; + get adapter(): WidgetLSPAdapter | null { + const adapter = [...this.connection_manager.adapters.values()].find( + adapter => adapter.widget == this._shell.currentWidget + ); + return adapter ?? null; } get connection_manager() { @@ -896,7 +839,7 @@ export namespace LSPStatus { this._connection_manager.initialized.connect(this._onChange); this._connection_manager.disconnected.disconnect(this._onChange); this._connection_manager.closed.disconnect(this._onChange); - this._connection_manager.documents_changed.disconnect(this._onChange); + this._connection_manager.documentsChanged.disconnect(this._onChange); } if (connection_manager != null) { @@ -904,7 +847,7 @@ export namespace LSPStatus { connection_manager.initialized.connect(this._onChange); connection_manager.disconnected.connect(this._onChange); connection_manager.closed.connect(this._onChange); - connection_manager.documents_changed.connect(this._onChange); + connection_manager.documentsChanged.connect(this._onChange); } this._connection_manager = connection_manager; @@ -913,7 +856,5 @@ export namespace LSPStatus { private _onChange = () => { this.stateChanged.emit(void 0); }; - - private _adapter: WidgetAdapter | null = null; } } diff --git a/packages/jupyterlab-lsp/src/components/utils.spec.ts b/packages/jupyterlab-lsp/src/components/utils.spec.ts index bb6212f78..78efe7865 100644 --- a/packages/jupyterlab-lsp/src/components/utils.spec.ts +++ b/packages/jupyterlab-lsp/src/components/utils.spec.ts @@ -1,8 +1,7 @@ import { IDocumentWidget } from '@jupyterlab/docregistry'; +import { CodeExtractorsManager, WidgetLSPAdapter } from '@jupyterlab/lsp'; import { nullTranslator } from '@jupyterlab/translation'; -import { WidgetAdapter } from '../adapters/adapter'; -import { BrowserConsole } from '../virtual/console'; import { VirtualDocument } from '../virtual/document'; import { getBreadcrumbs } from './utils'; @@ -10,12 +9,11 @@ import { getBreadcrumbs } from './utils'; function create_dummy_document(options: Partial) { return new VirtualDocument({ language: 'python', - foreign_code_extractors: {}, - overrides_registry: {}, + overridesRegistry: {}, + foreignCodeExtractors: new CodeExtractorsManager(), path: 'Untitled.ipynb.py', - file_extension: 'py', - has_lsp_supported_file: false, - console: new BrowserConsole(), + fileExtension: 'py', + hasLspSupportedFile: false, ...options }); } @@ -29,8 +27,8 @@ describe('getBreadcrumbs', () => { let breadcrumbs = getBreadcrumbs( document, { - has_multiple_editors: false - } as WidgetAdapter, + hasMultipleEditors: false + } as WidgetLSPAdapter, trans ); expect(breadcrumbs[0].props['title']).toBe('dir1/dir2/Test.ipynb'); @@ -40,14 +38,14 @@ describe('getBreadcrumbs', () => { it('should trim the extra filename suffix for files created out of notebooks', () => { let document = create_dummy_document({ path: 'Test.ipynb.py', - file_extension: 'py', - has_lsp_supported_file: false + fileExtension: 'py', + hasLspSupportedFile: false }); let breadcrumbs = getBreadcrumbs( document, { - has_multiple_editors: false - } as WidgetAdapter, + hasMultipleEditors: false + } as WidgetLSPAdapter, trans ); expect(breadcrumbs[0].props['children']).toBe('Test.ipynb'); @@ -56,14 +54,14 @@ describe('getBreadcrumbs', () => { it('should not trim the filename suffix for standalone files', () => { let document = create_dummy_document({ path: 'test.py', - file_extension: 'py', - has_lsp_supported_file: true + fileExtension: 'py', + hasLspSupportedFile: true }); let breadcrumbs = getBreadcrumbs( document, { - has_multiple_editors: false - } as WidgetAdapter, + hasMultipleEditors: false + } as WidgetLSPAdapter, trans ); expect(breadcrumbs[0].props['children']).toBe('test.py'); diff --git a/packages/jupyterlab-lsp/src/components/utils.tsx b/packages/jupyterlab-lsp/src/components/utils.tsx index cb6d8cdd7..8532c348e 100644 --- a/packages/jupyterlab-lsp/src/components/utils.tsx +++ b/packages/jupyterlab-lsp/src/components/utils.tsx @@ -1,14 +1,13 @@ import { IDocumentWidget } from '@jupyterlab/docregistry'; +import { VirtualDocument, WidgetLSPAdapter, Document } from '@jupyterlab/lsp'; import { nullTranslator, TranslationBundle } from '@jupyterlab/translation'; import React from 'react'; -import { WidgetAdapter } from '../adapters/adapter'; import { TLanguageServerSpec } from '../tokens'; -import { VirtualDocument } from '../virtual/document'; export function getBreadcrumbs( document: VirtualDocument, - adapter: WidgetAdapter, + adapter: WidgetLSPAdapter, trans?: TranslationBundle, collapse = true ): JSX.Element[] { @@ -19,11 +18,11 @@ export function getBreadcrumbs( if (!document.parent) { let path = document.path; if ( - !document.has_lsp_supported_file && - document.file_extension && - path.endsWith(document.file_extension) + !document.hasLspSupportedFile && + document.fileExtension && + path.endsWith(document.fileExtension) ) { - path = path.slice(0, -document.file_extension.length - 1); + path = path.slice(0, -document.fileExtension.length - 1); } const full_path = path; if (collapse) { @@ -38,18 +37,20 @@ export function getBreadcrumbs( ); } - if (!document.virtual_lines.size) { + // eslint-disable-next-line @typescript-eslint/ban-ts-comment + // @ts-ignore + const virtualLines = document.virtualLines; + + if (!virtualLines.size) { return Empty document; } try { - if (adapter.has_multiple_editors) { - let first_line = document.virtual_lines.get(0)!; - let last_line = document.virtual_lines.get( - document.last_virtual_line - 1 - )!; + if (adapter.hasMultipleEditors) { + let first_line = virtualLines.get(0)!; + let last_line = virtualLines.get(document.lastVirtualLine - 1)!; - let first_cell = adapter.get_editor_index(first_line.editor); - let last_cell = adapter.get_editor_index(last_line.editor); + let first_cell = adapter.getEditorIndex(first_line.editor); + let last_cell = adapter.getEditorIndex(last_line.editor); let cell_locator = first_cell === last_cell @@ -69,36 +70,28 @@ export function getBreadcrumbs( }); } -/** - * @deprecated please use getBreadcrumbs instead; `get_breadcrumbs` will be removed in 4.0 - */ -export function get_breadcrumbs( - document: VirtualDocument, - adapter: WidgetAdapter, - collapse = true -) { - return getBreadcrumbs(document, adapter, undefined, collapse); -} - -export function focus_on(node: HTMLElement) { - if (!node) { +async function focusEditor(accessor: Document.IEditor) { + if (!accessor) { return; } - node.scrollIntoView(); - node.focus(); + await accessor.reveal(); + const editor = accessor.getEditor(); + editor!.focus(); } export function DocumentLocator(props: { document: VirtualDocument; - adapter: WidgetAdapter; + adapter: WidgetLSPAdapter; trans?: TranslationBundle; }) { let { document, adapter } = props; - let target: HTMLElement | null = null; - if (adapter.has_multiple_editors) { - let first_line = document.virtual_lines.get(0); + let target: Document.IEditor | null = null; + if (adapter.hasMultipleEditors) { + // eslint-disable-next-line @typescript-eslint/ban-ts-comment + // @ts-ignore + let first_line = document.virtualLines.get(0); if (first_line) { - target = adapter.get_editor_wrapper(first_line.editor); + target = first_line.editor; } else { console.warn('Could not get first line of ', document); } @@ -107,7 +100,7 @@ export function DocumentLocator(props: { return (
    (target ? focus_on(target) : null)} + onClick={() => (target ? focusEditor(target) : null)} > {breadcrumbs}
    diff --git a/packages/jupyterlab-lsp/src/connection.ts b/packages/jupyterlab-lsp/src/connection.ts deleted file mode 100644 index 0326dccbf..000000000 --- a/packages/jupyterlab-lsp/src/connection.ts +++ /dev/null @@ -1,647 +0,0 @@ -// Disclaimer/acknowledgement: Fragments are based on LspWsConnection, which is copyright of wylieconlon and contributors and ISC licenced. -// ISC licence is, quote, "functionally equivalent to the simplified BSD and MIT licenses, -// but without language deemed unnecessary following the Berne Convention." (Wikipedia). -// Introduced modifications are BSD licenced, copyright JupyterLab development team. -import { ISignal, Signal } from '@lumino/signaling'; -import { - AnyCompletion, - AnyLocation, - IDocumentInfo, - ILspOptions, - IPosition, - LspWsConnection -} from 'lsp-ws-connection'; -import { - registerServerCapability, - unregisterServerCapability -} from 'lsp-ws-connection/lib/server-capability-registration'; -import type * as rpc from 'vscode-jsonrpc'; -import type * as lsp from 'vscode-languageserver-protocol'; -import type { MessageConnection } from 'vscode-ws-jsonrpc'; - -import { ClientCapabilities } from './lsp'; -import { ILSPLogConsole } from './tokens'; -import { until_ready } from './utils'; - -interface ILSPOptions extends ILspOptions { - capabilities: ClientCapabilities; - serverIdentifier?: string; - console: ILSPLogConsole; -} - -/** - * Method strings are reproduced here because a non-typing import of - * `vscode-languageserver-protocol` is ridiculously expensive. - */ -export namespace Method { - /** Server notifications */ - export enum ServerNotification { - PUBLISH_DIAGNOSTICS = 'textDocument/publishDiagnostics', - SHOW_MESSAGE = 'window/showMessage', - LOG_TRACE = '$/logTrace', - LOG_MESSAGE = 'window/logMessage' - } - - /** Client notifications */ - export enum ClientNotification { - DID_CHANGE = 'textDocument/didChange', - DID_CHANGE_CONFIGURATION = 'workspace/didChangeConfiguration', - DID_OPEN = 'textDocument/didOpen', - DID_SAVE = 'textDocument/didSave', - INITIALIZED = 'initialized', - SET_TRACE = '$/setTrace' - } - - /** Server requests */ - export enum ServerRequest { - REGISTER_CAPABILITY = 'client/registerCapability', - SHOW_MESSAGE_REQUEST = 'window/showMessageRequest', - UNREGISTER_CAPABILITY = 'client/unregisterCapability', - WORKSPACE_CONFIGURATION = 'workspace/configuration' - } - - /** Client requests */ - export enum ClientRequest { - COMPLETION = 'textDocument/completion', - COMPLETION_ITEM_RESOLVE = 'completionItem/resolve', - DEFINITION = 'textDocument/definition', - DOCUMENT_HIGHLIGHT = 'textDocument/documentHighlight', - DOCUMENT_SYMBOL = 'textDocument/documentSymbol', - HOVER = 'textDocument/hover', - IMPLEMENTATION = 'textDocument/implementation', - INITIALIZE = 'initialize', - REFERENCES = 'textDocument/references', - RENAME = 'textDocument/rename', - SIGNATURE_HELP = 'textDocument/signatureHelp', - TYPE_DEFINITION = 'textDocument/typeDefinition' - } -} - -export interface IServerNotifyParams { - [Method.ServerNotification.LOG_MESSAGE]: lsp.LogMessageParams; - [Method.ServerNotification.LOG_TRACE]: rpc.LogTraceParams; - [Method.ServerNotification.PUBLISH_DIAGNOSTICS]: lsp.PublishDiagnosticsParams; - [Method.ServerNotification.SHOW_MESSAGE]: lsp.ShowMessageParams; -} - -export interface IClientNotifyParams { - [Method.ClientNotification - .DID_CHANGE_CONFIGURATION]: lsp.DidChangeConfigurationParams; - [Method.ClientNotification.DID_CHANGE]: lsp.DidChangeTextDocumentParams; - [Method.ClientNotification.DID_OPEN]: lsp.DidOpenTextDocumentParams; - [Method.ClientNotification.DID_SAVE]: lsp.DidSaveTextDocumentParams; - [Method.ClientNotification.INITIALIZED]: lsp.InitializedParams; - [Method.ClientNotification.SET_TRACE]: rpc.SetTraceParams; -} - -export interface IServerRequestParams { - [Method.ServerRequest.REGISTER_CAPABILITY]: lsp.RegistrationParams; - [Method.ServerRequest.SHOW_MESSAGE_REQUEST]: lsp.ShowMessageRequestParams; - [Method.ServerRequest.UNREGISTER_CAPABILITY]: lsp.UnregistrationParams; - [Method.ServerRequest.WORKSPACE_CONFIGURATION]: lsp.ConfigurationParams; -} - -export interface IServerResult { - [Method.ServerRequest.REGISTER_CAPABILITY]: void; - [Method.ServerRequest.SHOW_MESSAGE_REQUEST]: lsp.MessageActionItem | null; - [Method.ServerRequest.UNREGISTER_CAPABILITY]: void; - [Method.ServerRequest.WORKSPACE_CONFIGURATION]: any[]; -} - -export interface IClientRequestParams { - [Method.ClientRequest.COMPLETION_ITEM_RESOLVE]: lsp.CompletionItem; - [Method.ClientRequest.COMPLETION]: lsp.CompletionParams; - [Method.ClientRequest.DEFINITION]: lsp.TextDocumentPositionParams; - [Method.ClientRequest.DOCUMENT_HIGHLIGHT]: lsp.TextDocumentPositionParams; - [Method.ClientRequest.DOCUMENT_SYMBOL]: lsp.DocumentSymbolParams; - [Method.ClientRequest.HOVER]: lsp.TextDocumentPositionParams; - [Method.ClientRequest.IMPLEMENTATION]: lsp.TextDocumentPositionParams; - [Method.ClientRequest.INITIALIZE]: lsp.InitializeParams; - [Method.ClientRequest.REFERENCES]: lsp.ReferenceParams; - [Method.ClientRequest.RENAME]: lsp.RenameParams; - [Method.ClientRequest.SIGNATURE_HELP]: lsp.TextDocumentPositionParams; - [Method.ClientRequest.TYPE_DEFINITION]: lsp.TextDocumentPositionParams; -} - -export interface IClientResult { - [Method.ClientRequest.COMPLETION_ITEM_RESOLVE]: lsp.CompletionItem; - [Method.ClientRequest.COMPLETION]: AnyCompletion; - [Method.ClientRequest.DEFINITION]: AnyLocation; - [Method.ClientRequest.DOCUMENT_HIGHLIGHT]: lsp.DocumentHighlight[]; - [Method.ClientRequest.DOCUMENT_SYMBOL]: lsp.DocumentSymbol[]; - [Method.ClientRequest.HOVER]: lsp.Hover | null; - [Method.ClientRequest.IMPLEMENTATION]: AnyLocation; - [Method.ClientRequest.INITIALIZE]: lsp.InitializeResult; - [Method.ClientRequest.REFERENCES]: lsp.Location[] | null; - [Method.ClientRequest.RENAME]: lsp.WorkspaceEdit; - [Method.ClientRequest.SIGNATURE_HELP]: lsp.SignatureHelp; - [Method.ClientRequest.TYPE_DEFINITION]: AnyLocation; -} - -export type ServerNotifications< - T extends keyof IServerNotifyParams = keyof IServerNotifyParams -> = { - readonly // ISignal does not have emit, which is intended - client cannot emit server notifications. - [key in T]: ISignal; -}; - -export type ClientNotifications< - T extends keyof IClientNotifyParams = keyof IClientNotifyParams -> = { - readonly // Signal has emit. - [key in T]: Signal; -}; - -export interface IClientRequestHandler< - T extends keyof IClientRequestParams = keyof IClientRequestParams -> { - request(params: IClientRequestParams[T]): Promise; -} - -export interface IServerRequestHandler< - T extends keyof IServerRequestParams = keyof IServerRequestParams -> { - setHandler( - handler: ( - params: IServerRequestParams[T], - connection?: LSPConnection - ) => Promise - ): void; - clearHandler(): void; -} - -export type ClientRequests< - T extends keyof IClientRequestParams = keyof IClientRequestParams -> = { - readonly // has async request(params) returning a promise with result. - [key in T]: IClientRequestHandler; -}; - -export type ServerRequests< - T extends keyof IServerRequestParams = keyof IServerRequestParams -> = { - readonly // has async request(params) returning a promise with result. - [key in T]: IServerRequestHandler; -}; - -class ClientRequestHandler< - T extends keyof IClientRequestParams = keyof IClientRequestParams -> implements IClientRequestHandler -{ - constructor( - protected connection: MessageConnection, - protected method: T, - protected emitter: LSPConnection - ) {} - request(params: IClientRequestParams[T]): Promise { - // TODO check if is ready? - this.emitter.log(MessageKind.client_requested, { - method: this.method, - message: params - }); - return this.connection - .sendRequest(this.method, params) - .then((result: IClientResult[T]) => { - this.emitter.log(MessageKind.result_for_client, { - method: this.method, - message: params - }); - return result; - }); - } -} - -class ServerRequestHandler< - T extends keyof IServerRequestParams = keyof IServerRequestParams -> implements IServerRequestHandler -{ - private _handler: - | (( - params: IServerRequestParams[T], - connection?: LSPConnection - ) => Promise) - | null; - - constructor( - protected connection: MessageConnection, - protected method: T, - protected emitter: LSPConnection - ) { - // on request accepts "thenable" - this.connection.onRequest(method, this.handle.bind(this)); - this._handler = null; - } - - private handle( - request: IServerRequestParams[T] - ): Promise { - this.emitter.log(MessageKind.server_requested, { - method: this.method, - message: request - }); - if (!this._handler) { - return new Promise(() => undefined); - } - return this._handler(request, this.emitter).then(result => { - this.emitter.log(MessageKind.response_for_server, { - method: this.method, - message: result - }); - return result; - }); - } - - setHandler( - handler: ( - params: IServerRequestParams[T], - connection?: LSPConnection - ) => Promise - ) { - this._handler = handler; - } - - clearHandler() { - this._handler = null; - } -} - -export const Provider: { [key: string]: keyof lsp.ServerCapabilities } = { - TEXT_DOCUMENT_SYNC: 'textDocumentSync', - COMPLETION: 'completionProvider', - HOVER: 'hoverProvider', - SIGNATURE_HELP: 'signatureHelpProvider', - DECLARATION: 'declarationProvider', - DEFINITION: 'definitionProvider', - TYPE_DEFINITION: 'typeDefinitionProvider', - IMPLEMENTATION: 'implementationProvider', - REFERENCES: 'referencesProvider', - DOCUMENT_HIGHLIGHT: 'documentHighlightProvider', - DOCUMENT_SYMBOL: 'documentSymbolProvider', - CODE_ACTION: 'codeActionProvider', - CODE_LENS: 'codeLensProvider', - DOCUMENT_LINK: 'documentLinkProvider', - COLOR: 'colorProvider', - DOCUMENT_FORMATTING: 'documentFormattingProvider', - DOCUMENT_RANGE_FORMATTING: 'documentRangeFormattingProvider', - DOCUMENT_ON_TYPE_FORMATTING: 'documentOnTypeFormattingProvider', - RENAME: 'renameProvider', - FOLDING_RANGE: 'foldingRangeProvider', - EXECUTE_COMMAND: 'executeCommandProvider', - SELECTION_RANGE: 'selectionRangeProvider', - WORKSPACE_SYMBOL: 'workspaceSymbolProvider', - WORKSPACE: 'workspace' -}; - -type AnyMethodType = - | typeof Method.ServerNotification - | typeof Method.ClientNotification - | typeof Method.ClientRequest - | typeof Method.ServerRequest; -type AnyMethod = - | Method.ServerNotification - | Method.ClientNotification - | Method.ClientRequest - | Method.ServerRequest; - -function createMethodMap( - methods: AnyMethodType, - handlerFactory: (method: U) => H -) { - const result: { [key in U]?: H } = {}; - for (let method of Object.values(methods)) { - result[method as U] = handlerFactory(method as U); - } - return result as T; -} - -enum MessageKind { - client_notified_server, - server_notified_client, - server_requested, - client_requested, - result_for_client, - response_for_server -} - -interface IMessageLog { - method: T; - message: any; -} - -export class LSPConnection extends LspWsConnection { - protected documentsToOpen: IDocumentInfo[]; - public serverIdentifier?: string; - - public clientNotifications: ClientNotifications; - public serverNotifications: ServerNotifications; - public clientRequests: ClientRequests; - public serverRequests: ServerRequests; - protected console: ILSPLogConsole; - private _options: ILSPOptions; - public logAllCommunication: boolean; - - public log(kind: MessageKind, message: IMessageLog) { - if (this.logAllCommunication) { - this.console.log(kind, message); - } - } - - protected constructNotificationHandlers< - T extends ServerNotifications | ClientNotifications - >( - methods: typeof Method.ServerNotification | typeof Method.ClientNotification - ) { - return createMethodMap>( - methods, - () => new Signal(this) - ); - } - - protected constructClientRequestHandler< - T extends ClientRequests, - U extends keyof T = keyof T - >(methods: typeof Method.ClientRequest) { - return createMethodMap( - methods, - method => - new ClientRequestHandler(this.connection, method as U as any, this) - ); - } - - protected constructServerRequestHandler< - T extends ServerRequests, - U extends keyof T = keyof T - >(methods: typeof Method.ServerRequest) { - return createMethodMap( - methods, - method => - new ServerRequestHandler(this.connection, method as U as any, this) - ); - } - - constructor(options: ILSPOptions) { - super(options); - this._options = options; - this.logAllCommunication = false; - this.serverIdentifier = options.serverIdentifier; - this.console = options.console.scope(this.serverIdentifier + ' connection'); - this.documentsToOpen = []; - this.clientNotifications = - this.constructNotificationHandlers( - Method.ClientNotification - ); - this.serverNotifications = - this.constructNotificationHandlers( - Method.ServerNotification - ); - } - - /** - * Initialization parameters to be sent to the language server. - * Subclasses can overload this when adding more features. - */ - protected initializeParams(): lsp.InitializeParams { - return { - ...super.initializeParams(), - // TODO: remove as `lsp.ClientCapabilities` after upgrading to 3.17 - // which should finally include a fix for moniker issue: - // https://github.com/microsoft/vscode-languageserver-node/pull/720 - capabilities: this._options.capabilities as lsp.ClientCapabilities, - initializationOptions: null, - processId: null, - workspaceFolders: null - }; - } - - sendOpenWhenReady(documentInfo: IDocumentInfo) { - if (this.isReady) { - this.sendOpen(documentInfo); - } else { - this.documentsToOpen.push(documentInfo); - } - } - - protected onServerInitialized(params: lsp.InitializeResult) { - this.afterInitialized(); - super.onServerInitialized(params); - while (this.documentsToOpen.length) { - this.sendOpen(this.documentsToOpen.pop()!); - } - } - - protected afterInitialized() { - for (const method of Object.values( - Method.ServerNotification - ) as (keyof ServerNotifications)[]) { - const signal = this.serverNotifications[method] as Signal; - this.connection.onNotification(method, params => { - this.log(MessageKind.server_notified_client, { - method, - message: params - }); - signal.emit(params); - }); - } - - for (const method of Object.values( - Method.ClientNotification - ) as (keyof ClientNotifications)[]) { - const signal = this.clientNotifications[method] as Signal; - signal.connect((emitter, params) => { - this.log(MessageKind.client_notified_server, { - method, - message: params - }); - void this.connection.sendNotification(method, params); - }); - } - - this.clientRequests = this.constructClientRequestHandler( - Method.ClientRequest - ); - this.serverRequests = this.constructServerRequestHandler( - Method.ServerRequest - ); - - this.serverRequests['client/registerCapability'].setHandler( - async (params: lsp.RegistrationParams) => { - params.registrations.forEach( - (capabilityRegistration: lsp.Registration) => { - try { - const updatedCapabilities = registerServerCapability( - this.serverCapabilities, - capabilityRegistration - ); - if (updatedCapabilities === null) { - this.console.error( - `Failed to register server capability: ${capabilityRegistration}` - ); - return; - } - this.serverCapabilities = updatedCapabilities; - } catch (err) { - this.console.error(err); - } - } - ); - } - ); - - this.serverRequests['client/unregisterCapability'].setHandler( - async (params: lsp.UnregistrationParams) => { - params.unregisterations.forEach( - (capabilityUnregistration: lsp.Unregistration) => { - this.serverCapabilities = unregisterServerCapability( - this.serverCapabilities, - capabilityUnregistration - ); - } - ); - } - ); - - this.serverRequests['workspace/configuration'].setHandler(async params => { - return params.items.map(item => { - // LSP: "If the client can’t provide a configuration setting for a given scope - // then `null` needs to be present in the returned array." - - // for now we do not support configuration, but yaml server does not respect - // client capability so we have a handler just for that - return null; - }); - }); - } - - public sendSelectiveChange( - changeEvent: lsp.TextDocumentContentChangeEvent, - documentInfo: IDocumentInfo - ) { - this._sendChange([changeEvent], documentInfo); - } - - public sendFullTextChange(text: string, documentInfo: IDocumentInfo): void { - this._sendChange([{ text }], documentInfo); - } - - /** - * @deprecated The method should not be used in new code. Use provides() instead. - */ - public isRenameSupported() { - return !!( - this.serverCapabilities && this.serverCapabilities.renameProvider - ); - } - - provides(provider: keyof lsp.ServerCapabilities): boolean { - return !!(this.serverCapabilities && this.serverCapabilities[provider]); - } - - /** - * @deprecated The method should not be used in new code - */ - async rename( - location: IPosition, - documentInfo: IDocumentInfo, - newName: string, - emit = true - ): Promise { - if (!this.isReady || !this.isRenameSupported()) { - return null; - } - - const params: lsp.RenameParams = { - textDocument: { - uri: documentInfo.uri - }, - position: { - line: location.line, - character: location.ch - }, - newName - }; - - const edit: lsp.WorkspaceEdit = await this.connection.sendRequest( - 'textDocument/rename', - params - ); - - if (emit) { - this.emit('renamed', edit); - } - - return edit; - } - - public connect(socket: WebSocket): this { - super.connect(socket); - - until_ready(() => { - return this.isConnected; - }, -1) - .then(() => { - this.connection.onClose(() => { - this.isConnected = false; - this.emit('close', this.closing_manually); - }); - }) - .catch(() => { - console.error('Could not connect onClose signal'); - }); - return this; - } - - private closing_manually = false; - - public close() { - try { - this.closing_manually = true; - super.close(); - } catch (e) { - this.closing_manually = false; - } - } - - private _sendChange( - changeEvents: lsp.TextDocumentContentChangeEvent[], - documentInfo: IDocumentInfo - ) { - if (!this.isReady) { - return; - } - if (!this.openedUris.get(documentInfo.uri)) { - this.sendOpen(documentInfo); - } - const textDocumentChange: lsp.DidChangeTextDocumentParams = { - textDocument: { - uri: documentInfo.uri, - version: documentInfo.version - } as lsp.VersionedTextDocumentIdentifier, - contentChanges: changeEvents - }; - void this.connection.sendNotification( - 'textDocument/didChange', - textDocumentChange - ); - documentInfo.version++; - } - - async getCompletionResolve(completionItem: lsp.CompletionItem) { - if (!this.isReady || !this.isCompletionResolveProvider()) { - return; - } - return this.connection.sendRequest( - 'completionItem/resolve', - completionItem - ); - } - - /** - * Does support completionItem/resolve? - * @deprecated The method should not be used in new code - */ - public isCompletionResolveProvider(): boolean { - return ( - this.serverCapabilities?.completionProvider?.resolveProvider || false - ); - } -} diff --git a/packages/jupyterlab-lsp/src/connection_manager.ts b/packages/jupyterlab-lsp/src/connection_manager.ts deleted file mode 100644 index 2399a5bc0..000000000 --- a/packages/jupyterlab-lsp/src/connection_manager.ts +++ /dev/null @@ -1,536 +0,0 @@ -import { PageConfig, URLExt } from '@jupyterlab/coreutils'; -import { Signal } from '@lumino/signaling'; -import type * as protocol from 'vscode-languageserver-protocol'; - -import { AskServersToSendTraceNotifications } from './_plugin'; -import type * as ConnectionModuleType from './connection'; -import { ClientCapabilities } from './lsp'; -import { - ILSPLogConsole, - ILanguageServerManager, - TLanguageServerConfigurations, - TLanguageServerId, - TServerKeys -} from './tokens'; -import { expandDottedPaths, sleep, until_ready } from './utils'; -import { IForeignContext, VirtualDocument } from './virtual/document'; - -export interface IDocumentConnectionData { - virtual_document: VirtualDocument; - connection: ConnectionModuleType.LSPConnection; -} - -export interface ISocketConnectionOptions { - virtual_document: VirtualDocument; - /** - * The language identifier, corresponding to the API endpoint on the LSP proxy server. - */ - language: string; - /** - * Path to the document in the JupyterLab space - */ - document_path: string; - /** - * LSP capabilities describing currently supported features - */ - capabilities: ClientCapabilities; -} - -/** - * Each Widget with a document (whether file or a notebook) has the same DocumentConnectionManager - * (see JupyterLabWidgetAdapter). Using id_path instead of uri led to documents being overwritten - * as two identical id_paths could be created for two different notebooks. - */ -export class DocumentConnectionManager { - connections: Map; - documents: Map; - initialized: Signal; - connected: Signal; - /** - * Connection temporarily lost or could not be fully established; a re-connection will be attempted; - */ - disconnected: Signal; - /** - * Connection was closed permanently and no-reconnection will be attempted, e.g.: - * - there was a serious server error - * - user closed the connection, - * - re-connection attempts exceeded, - */ - closed: Signal; - documents_changed: Signal< - DocumentConnectionManager, - Map - >; - language_server_manager: ILanguageServerManager; - initial_configurations: TLanguageServerConfigurations; - private ignored_languages: Set; - private readonly console: ILSPLogConsole; - - constructor(options: DocumentConnectionManager.IOptions) { - this.connections = new Map(); - this.documents = new Map(); - this.ignored_languages = new Set(); - this.connected = new Signal(this); - this.initialized = new Signal(this); - this.disconnected = new Signal(this); - this.closed = new Signal(this); - this.documents_changed = new Signal(this); - this.language_server_manager = options.language_server_manager; - this.console = options.console; - Private.setLanguageServerManager(options.language_server_manager); - } - - connect_document_signals(virtual_document: VirtualDocument) { - virtual_document.foreign_document_opened.connect( - this.on_foreign_document_opened, - this - ); - - virtual_document.foreign_document_closed.connect( - this.on_foreign_document_closed, - this - ); - - this.documents.set(virtual_document.uri, virtual_document); - this.documents_changed.emit(this.documents); - } - - disconnect_document_signals(virtual_document: VirtualDocument, emit = true) { - virtual_document.foreign_document_opened.disconnect( - this.on_foreign_document_opened, - this - ); - - virtual_document.foreign_document_closed.disconnect( - this.on_foreign_document_closed, - this - ); - - this.documents.delete(virtual_document.uri); - for (const foreign of virtual_document.foreign_documents.values()) { - this.disconnect_document_signals(foreign, false); - } - - if (emit) { - this.documents_changed.emit(this.documents); - } - } - - on_foreign_document_opened(_host: VirtualDocument, context: IForeignContext) { - this.console.log( - 'ConnectionManager received foreign document: ', - context.foreign_document.uri - ); - } - - on_foreign_document_closed(_host: VirtualDocument, context: IForeignContext) { - const { foreign_document } = context; - this.disconnect_document_signals(foreign_document); - } - - private async connect_socket( - options: ISocketConnectionOptions - ): Promise { - this.console.log('Connection Socket', options); - let { virtual_document, language, capabilities } = options; - - this.connect_document_signals(virtual_document); - - const uris = DocumentConnectionManager.solve_uris( - virtual_document, - language - ); - - const matchingServers = this.language_server_manager.getMatchingServers({ - language - }); - this.console.debug('Matching servers: ', matchingServers); - - // for now use only the server with the highest priority. - const language_server_id = - matchingServers.length === 0 ? null : matchingServers[0]; - - // lazily load 1) the underlying library (1.5mb) and/or 2) a live WebSocket- - // like connection: either already connected or potentially in the process - // of connecting. - const connection = await Private.connection( - language, - language_server_id!, - uris, - this.on_new_connection, - this.console, - capabilities - ); - - // if connecting for the first time, all documents subsequent documents will - // be re-opened and synced - this.connections.set(virtual_document.uri, connection); - - return connection; - } - - /** - * Handles the settings that do not require an existing connection - * with a language server (or can influence to which server the - * connection will be created, e.g. `priority`). - * - * This function should be called **before** initialization of servers. - */ - public updateConfiguration(allServerSettings: TLanguageServerConfigurations) { - this.language_server_manager.setConfiguration(allServerSettings); - } - - /** - * Handles the settings that the language servers accept using - * `onDidChangeConfiguration` messages, which should be passed under - * the "serverSettings" keyword in the setting registry. - * Other configuration options are handled by `updateConfiguration` instead. - * - * This function should be called **after** initialization of servers. - */ - public updateServerConfigurations( - allServerSettings: TLanguageServerConfigurations - ) { - let language_server_id: TServerKeys; - - for (language_server_id in allServerSettings) { - if (!allServerSettings.hasOwnProperty(language_server_id)) { - continue; - } - const rawSettings = allServerSettings[language_server_id]!; - - const parsedSettings = expandDottedPaths( - rawSettings.serverSettings || {} - ); - - const serverSettings: protocol.DidChangeConfigurationParams = { - settings: parsedSettings - }; - - this.console.log('Server Update: ', language_server_id); - this.console.log('Sending settings: ', serverSettings); - Private.updateServerConfiguration(language_server_id, serverSettings); - } - } - - /** - * Fired the first time a connection is opened. These _should_ be the only - * invocation of `.on` (once remaining LSPFeature.connection_handlers are made - * singletons). - */ - on_new_connection = (connection: ConnectionModuleType.LSPConnection) => { - connection.on('error', e => { - this.console.warn(e); - // TODO invalid now - let error: Error = e.length && e.length >= 1 ? e[0] : new Error(); - // TODO: those codes may be specific to my proxy client, need to investigate - if (error.message.indexOf('code = 1005') !== -1) { - this.console.warn(`Connection failed for ${connection}`); - this.forEachDocumentOfConnection(connection, virtual_document => { - this.console.warn('disconnecting ' + virtual_document.uri); - this.closed.emit({ connection, virtual_document }); - this.ignored_languages.add(virtual_document.language); - - this.console.warn( - `Cancelling further attempts to connect ${virtual_document.uri} and other documents for this language (no support from the server)` - ); - }); - } else if (error.message.indexOf('code = 1006') !== -1) { - this.console.warn('Connection closed by the server'); - } else { - this.console.error('Connection error:', e); - } - }); - - connection.on('serverInitialized', capabilities => { - this.forEachDocumentOfConnection(connection, virtual_document => { - // TODO: is this still necessary, e.g. for status bar to update responsively? - this.initialized.emit({ connection, virtual_document }); - }); - - // Initialize using settings stored in the SettingRegistry - this.updateServerConfigurations(this.initial_configurations); - }); - - connection.on('close', closed_manually => { - if (!closed_manually) { - this.console.warn('Connection unexpectedly disconnected'); - } else { - this.console.warn('Connection closed'); - this.forEachDocumentOfConnection(connection, virtual_document => { - this.closed.emit({ connection, virtual_document }); - }); - } - }); - }; - - private forEachDocumentOfConnection( - connection: ConnectionModuleType.LSPConnection, - callback: (virtual_document: VirtualDocument) => void - ) { - for (const [ - virtual_document_uri, - a_connection - ] of this.connections.entries()) { - if (connection !== a_connection) { - continue; - } - callback(this.documents.get(virtual_document_uri)!); - } - } - - /** - * TODO: presently no longer referenced. A failing connection would close - * the socket, triggering the language server on the other end to exit - */ - public async retry_to_connect( - options: ISocketConnectionOptions, - reconnect_delay: number, - retrials_left = -1 - ) { - let { virtual_document } = options; - - if (this.ignored_languages.has(virtual_document.language)) { - return; - } - - let interval = reconnect_delay * 1000; - let success = false; - - while (retrials_left !== 0 && !success) { - await this.connect(options) - .then(() => { - success = true; - }) - .catch(e => { - this.console.warn(e); - }); - - this.console.log( - 'will attempt to re-connect in ' + interval / 1000 + ' seconds' - ); - await sleep(interval); - - // gradually increase the time delay, up to 5 sec - interval = interval < 5 * 1000 ? interval + 500 : interval; - } - } - - async connect( - options: ISocketConnectionOptions, - firstTimeoutSeconds = 30, - secondTimeoutMinutes = 5 - ) { - this.console.log('connection requested', options); - let connection = await this.connect_socket(options); - - let { virtual_document, document_path } = options; - - if (!connection.isReady) { - try { - // user feedback hinted that 40 seconds was too short and some users are willing to wait more; - // to make the best of both worlds we first check frequently (6.6 times a second) for the first - // 30 seconds, and show the warning early in case if something is wrong; we then continue retrying - // for another 5 minutes, but only once per second. - await until_ready( - () => connection.isReady, - Math.round((firstTimeoutSeconds * 1000) / 150), - 150 - ); - } catch { - this.console.warn( - `Connection to ${virtual_document.uri} timed out after ${firstTimeoutSeconds} seconds, will continue retrying for another ${secondTimeoutMinutes} minutes` - ); - try { - await until_ready( - () => connection.isReady, - 60 * secondTimeoutMinutes, - 1000 - ); - } catch { - this.console.warn( - `Connection to ${virtual_document.uri} timed out again after ${secondTimeoutMinutes} minutes, giving up` - ); - return; - } - } - } - - this.console.log(document_path, virtual_document.uri, 'connected.'); - - this.connected.emit({ connection, virtual_document }); - - return connection; - } - - public unregister_document(virtual_document: VirtualDocument) { - this.connections.delete(virtual_document.uri); - this.documents_changed.emit(this.documents); - } - - updateLogging( - logAllCommunication: boolean, - setTrace: AskServersToSendTraceNotifications - ) { - for (const connection of this.connections.values()) { - connection.logAllCommunication = logAllCommunication; - if (setTrace !== null) { - connection.clientNotifications['$/setTrace'].emit({ value: setTrace }); - } - } - } -} - -export namespace DocumentConnectionManager { - export interface IOptions { - language_server_manager: ILanguageServerManager; - console: ILSPLogConsole; - } - - export function solve_uris( - virtual_document: VirtualDocument, - language: string - ): IURIs { - const serverManager = Private.getLanguageServerManager(); - const wsBase = serverManager.settings.wsUrl; - const rootUri = PageConfig.getOption('rootUri'); - const virtualDocumentsUri = PageConfig.getOption('virtualDocumentsUri'); - - // for now take the best match only - const serverOptions: ILanguageServerManager.IGetServerIdOptions = { - language - }; - const matchingServers = serverManager.getMatchingServers(serverOptions); - const languageServerId = - matchingServers.length === 0 ? null : matchingServers[0]; - - if (languageServerId === null) { - throw `No language server installed for language ${language}`; - } - - const specs = serverManager.getMatchingSpecs(serverOptions); - const spec = specs.get(languageServerId); - if (!spec) { - console.warn( - `Specification not available for server ${languageServerId}` - ); - } - const requiresOnDiskFiles = spec?.requires_documents_on_disk ?? true; - const supportsInMemoryFiles = !requiresOnDiskFiles; - - const baseUri = - virtual_document.has_lsp_supported_file || supportsInMemoryFiles - ? rootUri - : virtualDocumentsUri; - - // workaround url-parse bug(s) (see https://github.com/jupyter-lsp/jupyterlab-lsp/issues/595) - let documentUri = URLExt.join(baseUri, virtual_document.uri); - if ( - !documentUri.startsWith('file:///') && - documentUri.startsWith('file://') - ) { - documentUri = documentUri.replace('file://', 'file:///'); - if ( - documentUri.startsWith('file:///users/') && - baseUri.startsWith('file:///Users/') - ) { - documentUri = documentUri.replace('file:///users/', 'file:///Users/'); - } - } - - return { - base: baseUri, - document: documentUri, - server: URLExt.join('ws://jupyter-lsp', language), - socket: URLExt.join( - wsBase, - ILanguageServerManager.URL_NS, - 'ws', - languageServerId - ) - }; - } - - export interface IURIs { - base: string; - document: string; - server: string; - socket: string; - } -} - -/** - * Namespace primarily for language-keyed cache of ConnectionModuleType.LSPConnections - */ -namespace Private { - const _connections: Map< - TLanguageServerId, - ConnectionModuleType.LSPConnection - > = new Map(); - let _promise: Promise; - let _language_server_manager: ILanguageServerManager; - - export function getLanguageServerManager() { - return _language_server_manager; - } - export function setLanguageServerManager( - language_server_manager: ILanguageServerManager - ) { - _language_server_manager = language_server_manager; - } - - /** - * Return (or create and initialize) the WebSocket associated with the language - */ - export async function connection( - language: string, - language_server_id: TLanguageServerId, - uris: DocumentConnectionManager.IURIs, - onCreate: (connection: ConnectionModuleType.LSPConnection) => void, - console: ILSPLogConsole, - capabilities: ClientCapabilities - ): Promise { - if (_promise == null) { - // TODO: consider lazy-loading _only_ the modules that _must_ be webpacked - // with custom shims, e.g. `fs` - _promise = import( - /* webpackChunkName: "jupyter-lsp-connection" */ './connection' - ); - } - - const { LSPConnection } = await _promise; - let connection = _connections.get(language_server_id); - - if (connection == null) { - const { settings } = Private.getLanguageServerManager(); - const socket = new settings.WebSocket(uris.socket); - const connection = new LSPConnection({ - languageId: language, - serverUri: uris.server, - rootUri: uris.base, - serverIdentifier: language_server_id, - console: console, - capabilities: capabilities - }); - // TODO: remove remaining unbounded users of connection.on - connection.setMaxListeners(999); - _connections.set(language_server_id, connection); - connection.connect(socket); - onCreate(connection); - } - - connection = _connections.get(language_server_id)!; - - return connection; - } - - export function updateServerConfiguration( - language_server_id: TLanguageServerId, - settings: protocol.DidChangeConfigurationParams - ): void { - const connection = _connections.get(language_server_id); - if (connection) { - connection.sendConfigurationChange(settings); - } - } -} diff --git a/packages/jupyterlab-lsp/src/context.ts b/packages/jupyterlab-lsp/src/context.ts new file mode 100644 index 000000000..9cf795b83 --- /dev/null +++ b/packages/jupyterlab-lsp/src/context.ts @@ -0,0 +1,276 @@ +import { JupyterFrontEnd } from '@jupyterlab/application'; +import { CodeEditor } from '@jupyterlab/codeeditor'; +import { IDocumentWidget } from '@jupyterlab/docregistry'; +import { + ILSPConnection, + WidgetLSPAdapter, + ILSPDocumentConnectionManager, + IEditorPosition, + IRootPosition, + IVirtualPosition, + Document +} from '@jupyterlab/lsp'; + +import { + PositionConverter, + documentAtRootPosition, + rootPositionToVirtualPosition, + editorPositionToRootPosition, + rootPositionToEditorPosition +} from './converter'; +import { BrowserConsole } from './virtual/console'; +import { VirtualDocument } from './virtual/document'; + +// TODO: reconsider naming +export class ContextAssembler { + protected console = new BrowserConsole().scope('ContexAssembler'); + + constructor(private options: ContextAssembler.IOptions) { + // no-op + } + + get isContextMenuOpen(): boolean { + return this.options.app.contextMenu.menu.isAttached; + } + + getContext(): ICommandContext | null { + let context: ICommandContext | null = null; + if (this.isContextMenuOpen) { + try { + context = this.getContextFromContextMenu(); + } catch (e) { + this.console.warn( + 'contextMenu is attached, but could not get the context', + e + ); + context = null; + } + } + if (context == null) { + try { + context = this._contextFromActiveDocument(); + } catch (e) { + if ( + e instanceof Error && + e.message === 'Source line not mapped to virtual position' + ) { + this.console.log( + 'Could not get context from active document: it is expected when restoring workspace with open files' + ); + } else { + throw e; + } + } + } + return context; + } + + isContextMenuOverToken() { + const context = this.getContextFromContextMenu(); + if (!context) { + // annoyingly `isEnabled()` gets called again when mouse is over the menu + // which means we are no longer able to retrieve context; therefore we cache + // last value and return it if the mouse is over menu. + return this._wasOverToken; + } + const { rootPosition, adapter } = context; + const editor = adapter.activeEditor?.getEditor(); + if (!editor) { + return; + } + + const editorPosition = rootPositionToEditorPosition(adapter, rootPosition); + + const offset = editor.getOffsetAt( + PositionConverter.cm_to_ce(editorPosition) + ); + const token = editor.getTokenAt(offset); + const isOverToken = token.value !== ''; + this._wasOverToken = isOverToken; + return isOverToken; + } + private _wasOverToken = false; + + private _contextFromActiveDocument(): ICommandContext | null { + const adapter = [...this.options.connectionManager.adapters.values()].find( + adapter => adapter.widget == this.options.app.shell.currentWidget + ); + + if (!adapter) { + this.console.debug('No adapter'); + return null; + } + + const editor = adapter.activeEditor!.getEditor(); + + if (editor === null) { + return null; + } + + let ce_cursor = editor.getCursorPosition(); + let cm_cursor = PositionConverter.ce_to_cm(ce_cursor) as IEditorPosition; + + const virtualDocument = adapter.virtualDocument; + if (!virtualDocument) { + console.warn('Could not retrieve current context', virtualDocument); + return null; + } + const rootPosition = virtualDocument.transformFromEditorToRoot( + adapter.activeEditor!, + cm_cursor + )!; + + if (rootPosition == null) { + console.warn('Could not retrieve current context', virtualDocument); + return null; + } + + return this._contextFromRoot(adapter, rootPosition); + } + + private _contextFromRoot( + adapter: WidgetLSPAdapter, + rootPosition: IRootPosition + ): ICommandContext | null { + const document = documentAtRootPosition(adapter, rootPosition); + const connection = this.options.connectionManager.connections.get( + document.uri + )!; + const virtualPosition = rootPositionToVirtualPosition( + adapter, + rootPosition + ); + return { + document: document as any, + connection, + virtualPosition, + rootPosition, + adapter: adapter + }; + } + + adapterFromNode(leafNode: HTMLElement): WidgetLSPAdapter | undefined { + return [...this.options.connectionManager.adapters.values()].find(adapter => + adapter.widget.node.contains(leafNode!) + ); + } + + positionFromCoordinates( + left: number, + top: number, + adapter: WidgetLSPAdapter + ): IRootPosition | null { + // TODO: this relies on the editor under the cursor being the active editor; + // this may not be the case. Instead we should find editor from DOM and then + // have a magic way of transforming editor instances into CodeEditor and Document.Editor + // a naive way is to iterate all the editors in adapter (=cells) and see which one matches + // but the predicate is expensive and fallible in windowed notebook. + const editorAccessor = adapter.activeEditor; + + if (!editorAccessor) { + return null; + } + + const editorPosition = this.editorPositionFromCoordinates( + left, + top, + editorAccessor + ); + + if (!editorPosition) { + return null; + } + + return editorPositionToRootPosition( + adapter, + editorAccessor, + editorPosition + ); + } + + editorPositionFromCoordinates( + left: number, + top: number, + editorAccessor: Document.IEditor + ): IEditorPosition | null { + const editor = editorAccessor.getEditor(); + if (!editor) { + return null; + } + const position = editor.getPositionForCoordinate({ + left: left, + right: left, + bottom: top, + top: top, + y: top, + x: left, + width: 0, + height: 0 + } as CodeEditor.ICoordinate); + + if (!position) { + return null; + } + + const editorPosition = { + ch: position.column, + line: position.line + } as IEditorPosition; + + return editorPosition; + } + + private getContextFromContextMenu(): ICommandContext | null { + // Note: could also try using this.app.contextMenu.menu.contentNode position. + // Note: could add a guard on this.app.contextMenu.menu.isAttached + + // get the first node as it gives the most accurate approximation + const leafNode = this.options.app.contextMenuHitTest(() => true); + + if (!leafNode) { + return null; + } + + let { left, top } = leafNode.getBoundingClientRect(); + + // eslint-disable-next-line @typescript-eslint/ban-ts-comment + // @ts-ignore + let event = this.options.app._contextMenuEvent; + + // if possible, use more accurate position from the actual event + // (but this relies on an undocumented and unstable feature) + if (event !== undefined) { + left = event.clientX; + top = event.clientY; + event.stopPropagation(); + } + const adapter = this.adapterFromNode(leafNode); + + if (!adapter) { + return null; + } + + const rootPosition = this.positionFromCoordinates(left, top, adapter); + + if (!rootPosition) { + return null; + } + + return this._contextFromRoot(adapter!, rootPosition); + } +} + +export namespace ContextAssembler { + export interface IOptions { + app: JupyterFrontEnd; + connectionManager: ILSPDocumentConnectionManager; + } +} + +export interface ICommandContext { + document: VirtualDocument; + connection?: ILSPConnection; + virtualPosition: IVirtualPosition; + rootPosition: IRootPosition; + adapter: WidgetLSPAdapter; +} diff --git a/packages/jupyterlab-lsp/src/converter.spec.ts b/packages/jupyterlab-lsp/src/converter.spec.ts new file mode 100644 index 000000000..72b39c968 --- /dev/null +++ b/packages/jupyterlab-lsp/src/converter.spec.ts @@ -0,0 +1,105 @@ +import { + Document, + CodeExtractorsManager, + IRootPosition +} from '@jupyterlab/lsp'; + +import { + documentAtRootPosition, + rootPositionToVirtualPosition +} from './converter'; +import { RegExpForeignCodeExtractor } from './extractors/regexp'; +import { TestEnvironment, NotebookTestEnvironment } from './testutils'; + +describe('Position conversion', () => { + let rLineExtractor = new RegExpForeignCodeExtractor({ + language: 'R', + pattern: '(^|\n)%R (.*)\n?', + foreignCaptureGroups: [2], + isStandalone: false, + fileExtension: 'R' + }); + + let environment: NotebookTestEnvironment; + + const extractorManager = new CodeExtractorsManager(); + extractorManager.register(rLineExtractor, 'python'); + + const options: Partial = { + document: { + foreignCodeExtractors: extractorManager + } + }; + + beforeAll(async () => { + environment = new NotebookTestEnvironment(options); + await environment.init(); + }); + + describe('#documentAtRootPosition()', () => { + it('returns correct document', () => { + let ceEditor_for_cell_1 = {} as Document.IEditor; + let ceEditor_for_cell_2 = {} as Document.IEditor; + const adapter = environment.adapter!; + const mainDocument = environment.adapter.virtualDocument!; + + mainDocument.clear(); + mainDocument.appendCodeBlock({ + value: 'test line in Python 1\n%R test line in R 1', + ceEditor: ceEditor_for_cell_1, + type: 'code' + }); + mainDocument.appendCodeBlock({ + value: 'test line in Python 2\n%R test line in R 2', + ceEditor: ceEditor_for_cell_2, + type: 'code' + }); + + // The first (Python) line in the first block + let rootPosition = { line: 0, ch: 0 } as IRootPosition; + let document = documentAtRootPosition(adapter, rootPosition); + let virtualPosition = rootPositionToVirtualPosition( + adapter, + rootPosition + ); + expect(document).toBe(mainDocument); + expect(virtualPosition.line).toBe(0); + + // The second (Python | R) line in the first block - Python fragment + rootPosition = { line: 1, ch: 0 } as IRootPosition; + document = documentAtRootPosition(adapter, rootPosition); + virtualPosition = rootPositionToVirtualPosition(adapter, rootPosition); + expect(document).toBe(mainDocument); + expect(virtualPosition.line).toBe(1); + + // The second (Python | R) line in the first block - R fragment + rootPosition = { line: 1, ch: 3 } as IRootPosition; + document = documentAtRootPosition(adapter, rootPosition); + virtualPosition = rootPositionToVirtualPosition(adapter, rootPosition); + expect(document).not.toBe(mainDocument); + expect(virtualPosition.line).toBe(0); + + // The first (Python) line in the second block + rootPosition = { line: 2, ch: 0 } as IRootPosition; + document = documentAtRootPosition(adapter, rootPosition); + virtualPosition = rootPositionToVirtualPosition(adapter, rootPosition); + expect(document).toBe(mainDocument); + expect(virtualPosition.line).toBe(2 + 2); + + // The second (Python | R) line in the second block - Python fragment + rootPosition = { line: 3, ch: 0 } as IRootPosition; + document = documentAtRootPosition(adapter, rootPosition); + virtualPosition = rootPositionToVirtualPosition(adapter, rootPosition); + expect(document).toBe(mainDocument); + expect(virtualPosition.line).toBe(2 + 2 + 1); + + // The second (Python | R) line in the second block - R fragment + rootPosition = { line: 3, ch: 3 } as IRootPosition; + document = documentAtRootPosition(adapter, rootPosition); + virtualPosition = rootPositionToVirtualPosition(adapter, rootPosition); + expect(document).not.toBe(mainDocument); + // 0 + 1 (next line) + 2 (between-block spacing) + expect(virtualPosition.line).toBe(1 + 2); + }); + }); +}); diff --git a/packages/jupyterlab-lsp/src/converter.ts b/packages/jupyterlab-lsp/src/converter.ts index d93f6d055..7149114fd 100644 --- a/packages/jupyterlab-lsp/src/converter.ts +++ b/packages/jupyterlab-lsp/src/converter.ts @@ -1,13 +1,23 @@ import { CodeEditor } from '@jupyterlab/codeeditor'; -import type * as CodeMirror from 'codemirror'; +import type { + ISourcePosition, + IVirtualPosition, + IRootPosition, + IPosition, + IEditorPosition, + WidgetLSPAdapter, + Document +} from '@jupyterlab/lsp'; import type * as lsProtocol from 'vscode-languageserver-protocol'; +import type { VirtualDocument } from './virtual/document'; + export class PositionConverter { - static lsp_to_cm(position: lsProtocol.Position): CodeMirror.Position { + static lsp_to_cm(position: lsProtocol.Position): IPosition { return { line: position.line, ch: position.character }; } - static cm_to_lsp(position: CodeMirror.Position): lsProtocol.Position { + static cm_to_lsp(position: IPosition): lsProtocol.Position { return { line: position.line, character: position.ch }; } @@ -15,11 +25,131 @@ export class PositionConverter { return { line: position.line, column: position.character }; } - static cm_to_ce(position: CodeMirror.Position): CodeEditor.IPosition { + static cm_to_ce(position: IPosition): CodeEditor.IPosition { return { line: position.line, column: position.ch }; } - static ce_to_cm(position: CodeEditor.IPosition): CodeMirror.Position { + static ce_to_cm(position: CodeEditor.IPosition): IPosition { return { line: position.line, ch: position.column }; } } + +/** TODO should it be wrapped into an object? Where should these live? */ + +export interface IEditorRange { + start: IEditorPosition; + end: IEditorPosition; + editor: CodeEditor.IEditor; +} + +export function documentAtRootPosition( + adapter: WidgetLSPAdapter, + position: IRootPosition +): VirtualDocument { + let rootAsSource = position as ISourcePosition; + if (!adapter.virtualDocument) { + throw Error('Virtual document of adapter disposed!'); + } + if (adapter.virtualDocument.root !== adapter.virtualDocument) { + throw Error('Virtual document on adapter must be the root document'); + } + return adapter.virtualDocument.documentAtSourcePosition( + rootAsSource + ) as VirtualDocument; +} + +export function editorAtRootPosition( + adapter: WidgetLSPAdapter, + position: IRootPosition +): Document.IEditor { + let rootAsSource = position as ISourcePosition; + if (!adapter.virtualDocument) { + throw Error('Virtual document of adapter disposed!'); + } + if (adapter.virtualDocument.root !== adapter.virtualDocument) { + throw Error('Virtual document on adapter must be the root document'); + } + return adapter.virtualDocument.getEditorAtSourceLine(rootAsSource); +} + +export function rootPositionToVirtualPosition( + adapter: WidgetLSPAdapter, + position: IRootPosition +): IVirtualPosition { + let rootAsSource = position as ISourcePosition; + if (!adapter.virtualDocument) { + throw Error('Virtual document of adapter disposed!'); + } + if (adapter.virtualDocument.root !== adapter.virtualDocument) { + throw Error('Virtual document on adapter must be the root document'); + } + return adapter.virtualDocument!.virtualPositionAtDocument(rootAsSource); +} + +export function virtualPositionToRootPosition( + adapter: WidgetLSPAdapter, + position: IVirtualPosition +): IRootPosition | null { + if (!adapter.virtualDocument) { + throw Error('Virtual document of adapter disposed!'); + } + return (adapter.virtualDocument as VirtualDocument).transformVirtualToRoot( + position + ); +} + +export function rootPositionToEditorPosition( + adapter: WidgetLSPAdapter, + position: IRootPosition +): IEditorPosition { + let rootAsSource = position as ISourcePosition; + if (!adapter.virtualDocument) { + throw Error('Virtual document of adapter disposed!'); + } + if (adapter.virtualDocument.root !== adapter.virtualDocument) { + throw Error('Virtual document on adapter must be the root document'); + } + return adapter.virtualDocument.transformSourceToEditor(rootAsSource); +} + +export function editorPositionToRootPosition( + adapter: WidgetLSPAdapter, + editor: Document.IEditor, + position: IEditorPosition +): IRootPosition | null { + if (!adapter.virtualDocument) { + throw Error('Virtual document of adapter disposed!'); + } + return adapter.virtualDocument.transformFromEditorToRoot(editor, position); +} + +export function rangeToEditorRange( + adapter: WidgetLSPAdapter, + range: lsProtocol.Range, + editor: CodeEditor.IEditor | null +): IEditorRange { + let start = PositionConverter.lsp_to_cm(range.start) as IVirtualPosition; + let end = PositionConverter.lsp_to_cm(range.end) as IVirtualPosition; + + let startInRoot = virtualPositionToRootPosition(adapter, start); + if (!startInRoot) { + throw Error('Could not determine position in root'); + } + + if (editor == null) { + let editorAccessor = editorAtRootPosition(adapter, startInRoot); + const candidate = editorAccessor.getEditor(); + if (!candidate) { + throw Error('Editor could not be accessed'); + } + editor = candidate; + } + + const document = documentAtRootPosition(adapter, startInRoot); + + return { + start: document.transformVirtualToEditor(start)!, + end: document.transformVirtualToEditor(end)!, + editor: editor + }; +} diff --git a/packages/jupyterlab-lsp/src/editor_integration/cm_adapter.spec.ts b/packages/jupyterlab-lsp/src/editor_integration/cm_adapter.spec.ts deleted file mode 100644 index ab18a0ec0..000000000 --- a/packages/jupyterlab-lsp/src/editor_integration/cm_adapter.spec.ts +++ /dev/null @@ -1,48 +0,0 @@ -import { expect } from 'chai'; -import type * as CodeMirror from 'codemirror'; - -import { IRootPosition } from '../positioning'; -import { IEditorChange } from '../virtual/editor'; - -import { CodeMirrorIntegration } from './codemirror'; -import { FileEditorFeatureTestEnvironment } from './testutils'; - -describe('CodeMirrorAdapter', () => { - let env: FileEditorFeatureTestEnvironment; - - beforeEach(() => (env = new FileEditorFeatureTestEnvironment())); - afterEach(() => env.dispose()); - - describe('Works with VirtualFileEditor', () => { - it('updates on change', async () => { - class UpdateReceivingFeature extends CodeMirrorIntegration { - public received_update = false; - public last_change: CodeMirror.EditorChange = null as any; - public last_change_position: IRootPosition; - - afterChange(change: IEditorChange, root_position: IRootPosition): void { - this.received_update = true; - this.last_change = change; - this.last_change_position = root_position; - } - } - - await env.adapter.widget.context.initialize(true); - await env.adapter.widget.context.ready; - await env.adapter.initialized; - - let feature = env.init_integration({ - constructor: UpdateReceivingFeature, - id: 'UpdateReceivingFeature' - }) as UpdateReceivingFeature; - - await env.adapter.update_finished; - expect(feature.received_update).to.equal(false); - - env.ce_editor.model.value.text = 'fo'; - await env.adapter.update_finished; - expect(feature.received_update).to.equal(true); - expect(feature.last_change.text[0]).to.equal('fo'); - }); - }); -}); diff --git a/packages/jupyterlab-lsp/src/editor_integration/codemirror.ts b/packages/jupyterlab-lsp/src/editor_integration/codemirror.ts deleted file mode 100644 index 06925a269..000000000 --- a/packages/jupyterlab-lsp/src/editor_integration/codemirror.ts +++ /dev/null @@ -1,536 +0,0 @@ -import { CodeEditor } from '@jupyterlab/codeeditor'; -import { IDocumentWidget } from '@jupyterlab/docregistry'; -import { TranslationBundle } from '@jupyterlab/translation'; -import type * as CodeMirror from 'codemirror'; -import type * as lsProtocol from 'vscode-languageserver-protocol'; - -import { StatusMessage, WidgetAdapter } from '../adapters/adapter'; -import { LSPConnection } from '../connection'; -import { PositionConverter } from '../converter'; -import { - IEditorIntegrationOptions, - IFeature, - IFeatureEditorIntegration, - IFeatureSettings -} from '../feature'; -import { - IEditorPosition, - IRootPosition, - IVirtualPosition, - offset_at_position -} from '../positioning'; -import { ILSPLogConsole } from '../tokens'; -import { DefaultMap, uris_equal } from '../utils'; -import { - CodeMirrorHandler, - CodeMirrorVirtualEditor, - EventName as CodeMirrorEventName -} from '../virtual/codemirror_editor'; -import { VirtualDocument } from '../virtual/document'; -import { IEditorChange } from '../virtual/editor'; - -function toDocumentChanges(changes: { - [uri: string]: lsProtocol.TextEdit[]; -}): lsProtocol.TextDocumentEdit[] { - let documentChanges = []; - for (let uri of Object.keys(changes)) { - documentChanges.push({ - textDocument: { uri }, - edits: changes[uri] - } as lsProtocol.TextDocumentEdit); - } - return documentChanges; -} - -export interface IEditorRange { - start: IEditorPosition; - end: IEditorPosition; - editor: CodeMirror.Editor; -} - -function offset_from_lsp(position: lsProtocol.Position, lines: string[]) { - return offset_at_position(PositionConverter.lsp_to_ce(position), lines); -} - -export interface IEditOutcome { - appliedChanges: number | null; - modifiedCells: number; - wasGranular: boolean; - errors: string[]; -} - -/** - * Interface for storage of HTMLElement event specifications (event name + handler). - */ -interface IHTMLEventMap< - T extends keyof HTMLElementEventMap = keyof HTMLElementEventMap -> extends Map void> { - set( - k: E, - handler: (event: HTMLElementEventMap[E]) => void - ): this; - get(k: E): (event: HTMLElementEventMap[E]) => void; -} - -/** - * One feature of each type exists per VirtualDocument - * (the initialization is performed by the adapter). - */ -export abstract class CodeMirrorIntegration - implements IFeatureEditorIntegration -{ - is_registered: boolean; - feature: IFeature; - - protected readonly editor_handlers: Map< - CodeMirrorEventName, - CodeMirrorHandler - >; - // TODO use better type constraints for connection event names and for responses - protected readonly connection_handlers: Map< - string, - (response: Record) => void - >; - protected readonly wrapper_handlers: IHTMLEventMap; - protected wrapper: HTMLElement; - - protected virtual_editor: CodeMirrorVirtualEditor; - protected virtual_document: VirtualDocument; - protected connection: LSPConnection; - - /** @deprecated: use `setStatusMessage()` instead */ - protected status_message: StatusMessage; - protected adapter: WidgetAdapter; - protected console: ILSPLogConsole; - - protected trans: TranslationBundle; - - get settings(): IFeatureSettings | undefined { - return this.feature.settings; - } - - get lab_integration() { - return this.feature.labIntegration; - } - - constructor(options: IEditorIntegrationOptions) { - this.feature = options.feature; - this.virtual_editor = options.virtual_editor as CodeMirrorVirtualEditor; - this.virtual_document = options.virtual_document; - this.connection = options.connection; - this.status_message = options.status_message; - this.adapter = options.adapter; - this.console = this.adapter.console.scope(options.feature.name); - this.trans = options.trans; - - this.editor_handlers = new Map(); - this.connection_handlers = new Map(); - this.wrapper_handlers = new Map(); - this.is_registered = false; - } - - /** - * Set the text message and (optionally) the timeout to remove it. - * @param message - * @param timeout - number of ms to until the message is cleaned; - * -1 if the message should stay up indefinitely; - * defaults to 3000ms (3 seconds) - */ - setStatusMessage(message: string, timeout?: number): void { - this.status_message.set(message, timeout); - } - - register(): void { - // register editor handlers - for (let [event_name, handler] of this.editor_handlers) { - this.virtual_editor.on(event_name, handler); - } - // register connection handlers - for (let [event_name, handler] of this.connection_handlers) { - this.connection.on(event_name, handler); - } - // register editor wrapper handlers - this.wrapper = this.virtual_editor.getWrapperElement(); - for (let [event_name, handler] of this.wrapper_handlers) { - this.wrapper.addEventListener(event_name, handler); - } - - this.is_registered = true; - } - - remove(): void { - // unregister editor handlers - for (let [event_name, handler] of this.editor_handlers) { - this.virtual_editor.off(event_name, handler); - } - this.editor_handlers.clear(); - // unregister connection handlers - for (let [event_name, handler] of this.connection_handlers) { - this.connection.off(event_name, handler); - } - this.connection_handlers.clear(); - // unregister editor wrapper handlers - for (let [event_name, handler] of this.wrapper_handlers) { - this.wrapper.removeEventListener(event_name, handler); - } - this.wrapper_handlers.clear(); - } - - protected range_to_editor_range( - range: lsProtocol.Range, - cm_editor?: CodeMirror.Editor - ): IEditorRange { - let start = PositionConverter.lsp_to_cm(range.start) as IVirtualPosition; - let end = PositionConverter.lsp_to_cm(range.end) as IVirtualPosition; - - if (cm_editor == null) { - let start_in_root = - this.transform_virtual_position_to_root_position(start); - let ce_editor = - this.virtual_editor.get_editor_at_root_position(start_in_root); - cm_editor = this.virtual_editor.ce_editor_to_cm_editor.get(ce_editor)!; - } - - return { - start: this.virtual_document.transform_virtual_to_editor(start)!, - end: this.virtual_document.transform_virtual_to_editor(end)!, - editor: cm_editor - }; - } - - protected position_from_mouse(event: MouseEvent): IRootPosition | null { - const position = this.virtual_editor.coordsChar( - { - left: event.clientX, - top: event.clientY - }, - 'window' - ); - if (position.line === -1 && position.ch === -1) { - return null; - } else { - return position as IRootPosition; - } - } - - public transform_virtual_position_to_root_position( - start: IVirtualPosition - ): IRootPosition { - let ce_editor = this.virtual_document.virtual_lines.get(start.line)!.editor; - let editor_position = - this.virtual_document.transform_virtual_to_editor(start); - return this.virtual_editor.transform_from_editor_to_root( - ce_editor, - editor_position! - )!; - } - - protected get_cm_editor(position: IRootPosition) { - return this.virtual_editor.get_cm_editor(position); - } - - protected get_language_at( - position: IEditorPosition, - editor: CodeMirror.Editor - ) { - return editor.getModeAt(position).name; - } - - protected extract_last_character(change: CodeMirror.EditorChange): string { - if (change.origin === 'paste') { - let last_line = change.text[change.text.length - 1]; - return last_line[last_line.length - 1]; - } else { - return change.text[0][0]; - } - } - - /** - * @deprecated - */ - protected highlight_range( - range: IEditorRange, - class_name: string - ): CodeMirror.TextMarker { - return range.editor - .getDoc() - .markText(range.start, range.end, { className: class_name }); - } - - /** - * Does the edit cover the entire document? - */ - protected is_whole_document_edit(edit: lsProtocol.TextEdit) { - let value = this.virtual_document.value; - let lines = value.split('\n'); - let range = edit.range; - let lsp_to_ce = PositionConverter.lsp_to_ce; - return ( - offset_at_position(lsp_to_ce(range.start), lines) === 0 && - offset_at_position(lsp_to_ce(range.end), lines) === value.length - ); - } - - protected async apply_edit( - workspaceEdit: lsProtocol.WorkspaceEdit - ): Promise { - let current_uri = this.virtual_document.document_info.uri; - - // Specs: documentChanges are preferred over changes - let changes = workspaceEdit.documentChanges - ? workspaceEdit.documentChanges.map( - change => change as lsProtocol.TextDocumentEdit - ) - : toDocumentChanges(workspaceEdit.changes!); - let applied_changes = 0; - let edited_cells: number = 0; - let is_whole_document_edit: boolean = false; - let errors: string[] = []; - - for (let change of changes) { - let uri = change.textDocument.uri; - - if (!uris_equal(uri, current_uri)) { - errors.push( - `Workspace-wide edits not implemented: ${uri} != ${current_uri}` - ); - } else { - is_whole_document_edit = - change.edits.length === 1 && - this.is_whole_document_edit(change.edits[0]); - - let edit: lsProtocol.TextEdit; - - if (!is_whole_document_edit) { - applied_changes = 0; - let value = this.virtual_document.value; - // TODO: make sure that it was not changed since the request was sent (using the returned document version) - let lines = value.split('\n'); - - let edits_by_offset = new Map(); - for (let e of change.edits) { - let offset = offset_from_lsp(e.range.start, lines); - if (edits_by_offset.has(offset)) { - console.warn( - 'Edits should not overlap, ignoring an overlapping edit' - ); - } else { - edits_by_offset.set(offset, e); - applied_changes += 1; - } - } - - // TODO make use of old_to_new_line for edits which add of remove lines: - // this is crucial to preserve cell boundaries in notebook in such cases - let old_to_new_line = new DefaultMap(() => []); - let new_text = ''; - let last_end = 0; - let current_old_line = 0; - let current_new_line = 0; - // going over the edits in descending order of start points: - let start_offsets = [...edits_by_offset.keys()].sort((a, b) => a - b); - for (let start of start_offsets) { - let edit = edits_by_offset.get(start)!; - let prefix = value.slice(last_end, start); - for (let i = 0; i < prefix.split('\n').length; i++) { - let new_lines = old_to_new_line.get_or_create(current_old_line); - new_lines.push(current_new_line); - current_old_line += 1; - current_new_line += 1; - } - new_text += prefix + edit.newText; - let end = offset_from_lsp(edit.range.end, lines); - let replaced_fragment = value.slice(start, end); - for (let i = 0; i < edit.newText.split('\n').length; i++) { - if (i < replaced_fragment.length) { - current_old_line += 1; - } - current_new_line += 1; - let new_lines = old_to_new_line.get_or_create(current_old_line); - new_lines.push(current_new_line); - } - last_end = end; - } - new_text += value.slice(last_end, value.length); - - edit = { - range: { - start: { line: 0, character: 0 }, - end: { - line: lines.length - 1, - character: lines[lines.length - 1].length - } - }, - newText: new_text - }; - console.assert(this.is_whole_document_edit(edit)); - } else { - edit = change.edits[0]; - applied_changes += 1; - } - edited_cells = this.apply_single_edit(edit); - } - } - const all_empty = changes.every(change => change.edits.length === 0); - return { - appliedChanges: applied_changes, - modifiedCells: edited_cells, - wasGranular: !is_whole_document_edit && !all_empty, - errors: errors - }; - } - - protected replace_fragment( - newText: string, - editor: CodeEditor.IEditor, - fragment_start: CodeMirror.Position, - fragment_end: CodeMirror.Position, - start: CodeMirror.Position, - end: CodeMirror.Position, - is_whole_document_edit = false - ): number { - let document = this.virtual_document; - let newFragmentText = newText - .split('\n') - .slice(fragment_start.line - start.line, fragment_end.line - start.line) - .join('\n'); - - if (newFragmentText.endsWith('\n')) { - newFragmentText = newFragmentText.slice(0, -1); - } - - let doc = this.virtual_editor.ce_editor_to_cm_editor.get(editor)!.getDoc(); - - let raw_value = doc.getValue('\n'); - // extract foreign documents and substitute magics, - // as it was done when the shadow virtual document was being created - let { lines } = document.prepare_code_block({ - value: raw_value, - ce_editor: editor - }); - let old_value = lines.join('\n'); - - if (is_whole_document_edit) { - // partial edit - let cm_to_ce = PositionConverter.cm_to_ce; - let up_to_offset = offset_at_position(cm_to_ce(start), lines); - let from_offset = offset_at_position(cm_to_ce(end), lines); - newFragmentText = - old_value.slice(0, up_to_offset) + - newText + - old_value.slice(from_offset); - } - - if (old_value === newFragmentText) { - return 0; - } - - let new_value = document.decode_code_block(newFragmentText); - - let cursor = doc.getCursor(); - - doc.replaceRange( - new_value, - { line: 0, ch: 0 }, - { - line: fragment_end.line - fragment_start.line + 1, - ch: 0 - } - ); - - try { - // try to restore the cursor to the position prior to the edit - // (this might not be the best UX, but definitely better than - // the cursor jumping to the very end of the cell/file). - doc.setCursor(cursor, cursor.ch, { scroll: false }); - // note: this does not matter for actions invoke from context menu - // as those loose focus anyways (this might be addressed elsewhere) - } catch (e) { - console.log('Could not place the cursor back', e); - } - - return 1; - } - - afterChange(change: IEditorChange, root_position: IRootPosition) { - // nothing here - } - - protected apply_single_edit(edit: lsProtocol.TextEdit): number { - let document = this.virtual_document; - let applied_changes = 0; - let start = PositionConverter.lsp_to_cm(edit.range.start); - let end = PositionConverter.lsp_to_cm(edit.range.end); - - let start_editor = document.get_editor_at_virtual_line( - start as IVirtualPosition - ); - let end_editor = document.get_editor_at_virtual_line( - end as IVirtualPosition - ); - if (start_editor !== end_editor) { - let last_editor = start_editor; - let fragment_start = start; - let fragment_end = { ...start }; - - let line = start.line; - let recently_replaced = false; - while (line <= end.line) { - line++; - let editor = document.get_editor_at_virtual_line({ - line: line, - ch: 0 - } as IVirtualPosition); - - if (editor === last_editor) { - fragment_end.line = line; - fragment_end.ch = 0; - recently_replaced = false; - } else { - applied_changes += this.replace_fragment( - edit.newText, - last_editor, - fragment_start, - fragment_end, - start, - end - ); - recently_replaced = true; - fragment_start = { - line: line, - ch: 0 - }; - fragment_end = { - line: line, - ch: 0 - }; - last_editor = editor; - } - } - if (!recently_replaced) { - applied_changes += this.replace_fragment( - edit.newText, - last_editor, - fragment_start, - fragment_end, - start, - end - ); - } - } else { - applied_changes += this.replace_fragment( - edit.newText, - start_editor, - start, - end, - start, - end - ); - } - return applied_changes; - } -} - -export type CodeMirrorIntegrationConstructor = { - new (options: IEditorIntegrationOptions): CodeMirrorIntegration; -}; diff --git a/packages/jupyterlab-lsp/src/editor_integration/editor_adapter.ts b/packages/jupyterlab-lsp/src/editor_integration/editor_adapter.ts deleted file mode 100644 index f4dab15aa..000000000 --- a/packages/jupyterlab-lsp/src/editor_integration/editor_adapter.ts +++ /dev/null @@ -1,123 +0,0 @@ -import { CodeEditor } from '@jupyterlab/codeeditor'; - -import { IFeatureEditorIntegration } from '../feature'; -import { IRootPosition } from '../positioning'; -import { ILSPLogConsole } from '../tokens'; -import { until_ready } from '../utils'; -import { VirtualDocument } from '../virtual/document'; -import { IEditorChange, IVirtualEditor } from '../virtual/editor'; - -import IEditor = CodeEditor.IEditor; - -export class EditorAdapter> { - features: Map>; - isDisposed = false; - - private last_change: IEditorChange | null; - private console: ILSPLogConsole; - - constructor( - protected editor: IVirtualEditor, - protected virtual_document: VirtualDocument, - features = new Array>(), - console: ILSPLogConsole - ) { - this.editor.change.connect(this.saveChange, this); - this.console = console.scope('EditorAdapter'); - - this.features = new Map(); - - for (let feature of features) { - feature.register(); - if (!feature.is_registered) { - this.console.warn( - 'The feature ', - feature, - 'was not registered properly' - ); - } - this.features.set(feature.feature.id, feature); - } - } - - public async updateAfterChange() { - try { - await until_ready(() => this.last_change != null, 30, 22); - } catch (err) { - this.console.log( - 'No change obtained from CodeMirror editor within the expected time of 0.66s' - ); - return; - } - - let change: IEditorChange | null = this.last_change; - - let root_position: IRootPosition; - - try { - root_position = this.editor.get_cursor_position(); - } catch (err) { - this.console.log('Root position not found'); - return; - } - - try { - let document = this.editor.document_at_root_position(root_position); - - if (this.virtual_document !== document) { - return true; - } - - if ( - !change || - ((!change.text.length || !change.text[0].length) && - (!change.removed || - !change.removed.length || - !change.removed[0].length)) - ) { - return true; - } - - for (let feature of this.features.values()) { - try { - if (feature.afterChange) { - feature.afterChange(change, root_position); - } - } catch (err) { - console.warn('afterChange of feature', feature, 'failed with', err); - } - } - return true; - } catch (e) { - this.console.log('updateAfterChange failure'); - this.console.error(e); - } - this.invalidateLastChange(); - return undefined; - } - - public invalidateLastChange() { - this.last_change = null; - } - - public saveChange(sender: IVirtualEditor, change: IEditorChange) { - this.last_change = change; - } - - public dispose() { - if (this.isDisposed) { - return; - } - for (let feature of this.features.values()) { - feature.remove(); - } - this.features.clear(); - this.editor.change.disconnect(this.saveChange); - - // just to be sure - this.editor = null as any; - - // actually disposed - this.isDisposed = true; - } -} diff --git a/packages/jupyterlab-lsp/src/editor_integration/feature.spec.ts b/packages/jupyterlab-lsp/src/editor_integration/feature.spec.ts deleted file mode 100644 index be71ef08c..000000000 --- a/packages/jupyterlab-lsp/src/editor_integration/feature.spec.ts +++ /dev/null @@ -1,329 +0,0 @@ -import { PageConfig } from '@jupyterlab/coreutils'; -import * as nbformat from '@jupyterlab/nbformat'; -import { NotebookModel } from '@jupyterlab/notebook'; -import { expect } from 'chai'; -import * as lsProtocol from 'vscode-languageserver-protocol'; - -import { foreign_code_extractors } from '../transclusions/ipython/extractors'; -import { overrides } from '../transclusions/ipython/overrides'; - -import { CodeMirrorIntegration } from './codemirror'; -import { - FileEditorFeatureTestEnvironment, - NotebookFeatureTestEnvironment, - code_cell, - getCellsJSON, - python_notebook_metadata, - showAllCells -} from './testutils'; - -const js_fib_code = `function fib(n) { - return n<2?n:fib(n-1)+fib(n-2); -} - -fib(5); - -window.location /;`; - -const js_fib2_code = `function fib2(n) { - return n<2?n:fib2(n-1)+fib2(n-2); -} - -fib2(5); - -window.location /;`; - -const js_partial_edits = [ - { - range: { - start: { - line: 0, - character: 9 - }, - end: { - line: 0, - character: 12 - } - }, - newText: 'fib2' - }, - { - range: { - start: { - line: 1, - character: 15 - }, - end: { - line: 1, - character: 18 - } - }, - newText: 'fib2' - }, - { - range: { - start: { - line: 1, - character: 24 - }, - end: { - line: 1, - character: 27 - } - }, - newText: 'fib2' - }, - { - range: { - start: { - line: 4, - character: 0 - }, - end: { - line: 4, - character: 3 - } - }, - newText: 'fib2' - } -]; - -describe('Feature', () => { - PageConfig.setOption('rootUri', 'file://'); - - describe('apply_edit()', () => { - class EditApplyingFeatureCM extends CodeMirrorIntegration { - do_apply_edit(workspaceEdit: lsProtocol.WorkspaceEdit) { - return this.apply_edit(workspaceEdit); - } - } - - describe('editing in FileEditor', () => { - let feature: EditApplyingFeatureCM; - let environment: FileEditorFeatureTestEnvironment; - - beforeEach(() => { - environment = new FileEditorFeatureTestEnvironment(); - feature = environment.init_integration({ - constructor: EditApplyingFeatureCM, - id: 'EditApplyingFeature' - }); - }); - - afterEach(() => { - environment.dispose(); - }); - - it('applies simple edit in FileEditor', async () => { - environment.ce_editor.model.value.text = 'foo bar'; - await environment.adapter.update_documents(); - - let outcome = await feature.do_apply_edit({ - changes: { - ['file:///' + environment.document_options.path]: [ - { - range: { - start: { line: 0, character: 0 }, - end: { line: 1, character: 0 } - }, - newText: 'changed bar' - } as lsProtocol.TextEdit - ] - } - }); - let raw_value = environment.ce_editor.doc.getValue(); - expect(raw_value).to.be.equal('changed bar'); - expect(environment.ce_editor.model.value.text).to.be.equal( - 'changed bar' - ); - expect(outcome.wasGranular).to.be.equal(false); - expect(outcome.modifiedCells).to.be.equal(1); - expect(outcome.appliedChanges).to.be.equal(1); - }); - - it('correctly summarizes empty edit', async () => { - environment.ce_editor.model.value.text = 'foo bar'; - await environment.adapter.update_documents(); - - let outcome = await feature.do_apply_edit({ - changes: { - ['file:///' + environment.document_options.path]: [] - } - }); - let raw_value = environment.ce_editor.doc.getValue(); - expect(raw_value).to.be.equal('foo bar'); - expect(environment.ce_editor.model.value.text).to.be.equal('foo bar'); - expect(outcome.wasGranular).to.be.equal(false); - expect(outcome.appliedChanges).to.be.equal(0); - expect(outcome.modifiedCells).to.be.equal(0); - }); - - it('applies partial edits', async () => { - environment.ce_editor.model.value.text = js_fib_code; - await environment.adapter.update_documents(); - - let result = await feature.do_apply_edit({ - changes: { - ['file:///' + environment.document_options.path]: js_partial_edits - } - }); - let raw_value = environment.ce_editor.doc.getValue(); - expect(raw_value).to.be.equal(js_fib2_code); - expect(environment.ce_editor.model.value.text).to.be.equal( - js_fib2_code - ); - - expect(result.appliedChanges).to.be.equal(js_partial_edits.length); - expect(result.wasGranular).to.be.equal(true); - expect(result.modifiedCells).to.be.equal(1); - }); - }); - - describe('editing in Notebook', () => { - let feature: EditApplyingFeatureCM; - let environment: NotebookFeatureTestEnvironment; - - beforeEach(() => { - environment = new NotebookFeatureTestEnvironment({ - overrides_registry: { - python: { - cell: overrides.filter(override => override.scope == 'cell'), - line: overrides.filter(override => override.scope == 'line') - } - }, - foreign_code_extractors: foreign_code_extractors - }); - - feature = environment.init_integration({ - constructor: EditApplyingFeatureCM, - id: 'EditApplyingFeature' - }); - }); - - afterEach(() => { - environment.dispose(); - }); - - async function synchronizeContent() { - await environment.adapter.update_documents(); - } - - it('applies edit across cells', async () => { - let test_notebook = { - cells: [ - code_cell(['def a_function():\n', ' pass']), - code_cell(['x = a_function()']) - ], - metadata: python_notebook_metadata - } as nbformat.INotebookContent; - - let notebook = environment.notebook; - - notebook.model = new NotebookModel(); - notebook.model.fromJSON(test_notebook); - showAllCells(notebook); - - await synchronizeContent(); - let main_document = environment.virtual_editor.virtual_document; - - let old_virtual_source = - 'def a_function():\n pass\n\n\nx = a_function()\n'; - let new_virtual_source = - 'def a_function_2():\n pass\n\n\nx = a_function_2()\n'; - expect(main_document.value).to.be.equal(old_virtual_source); - - let outcome = await feature.do_apply_edit({ - changes: { - [main_document.document_info.uri]: [ - { - range: { - start: { line: 0, character: 0 }, - end: { line: 5, character: 0 } - }, - newText: new_virtual_source - } as lsProtocol.TextEdit - ] - } - }); - - await synchronizeContent(); - - let value = main_document.value; - expect(value).to.be.equal(new_virtual_source); - - let code_cells = getCellsJSON(notebook); - - expect(code_cells[0]).to.have.property( - 'source', - 'def a_function_2():\n pass' - ); - expect(code_cells[1]).to.have.property('source', 'x = a_function_2()'); - - expect(outcome.appliedChanges).to.be.equal(1); - expect(outcome.wasGranular).to.be.equal(false); - expect(outcome.modifiedCells).to.be.equal(2); - }); - - it('handles IPython magics', async () => { - let test_notebook = { - cells: [ - code_cell(['x = %ls\n', 'print(x)']), - code_cell(['%%python\n', 'y = x\n', 'print(x)']) - ], - metadata: python_notebook_metadata - } as nbformat.INotebookContent; - - let notebook = environment.notebook; - - notebook.model = new NotebookModel(); - notebook.model.fromJSON(test_notebook); - showAllCells(notebook); - - let main_document = environment.virtual_editor.virtual_document; - - let old_virtual_source = `x = get_ipython().run_line_magic("ls", "") -print(x) - - -get_ipython().run_cell_magic("python", "", """y = x -print(x)""") -`; - - let new_virtual_source = `z = get_ipython().run_line_magic("ls", "") -print(z) - - -get_ipython().run_cell_magic("python", "", """y = x -print(x)""") -`; - - await synchronizeContent(); - expect(main_document.value).to.be.equal(old_virtual_source); - - await feature.do_apply_edit({ - changes: { - [main_document.document_info.uri]: [ - { - range: { - start: { line: 0, character: 0 }, - end: { line: 6, character: 10 } - }, - newText: new_virtual_source - } as lsProtocol.TextEdit - ] - } - }); - await synchronizeContent(); - expect(main_document.value).to.be.equal(new_virtual_source); - - let code_cells = getCellsJSON(notebook); - - expect(code_cells[0]).to.have.property('source', 'z = %ls\nprint(z)'); - expect(code_cells[1]).to.have.property( - 'source', - '%%python\ny = x\nprint(x)' - ); - }); - }); - }); -}); diff --git a/packages/jupyterlab-lsp/src/editor_integration/testutils.ts b/packages/jupyterlab-lsp/src/editor_integration/testutils.ts deleted file mode 100644 index 041ce8580..000000000 --- a/packages/jupyterlab-lsp/src/editor_integration/testutils.ts +++ /dev/null @@ -1,438 +0,0 @@ -import { JupyterFrontEnd } from '@jupyterlab/application'; -import { ICellModel } from '@jupyterlab/cells'; -import { CodeEditor } from '@jupyterlab/codeeditor'; -import { - CodeMirrorEditor, - CodeMirrorEditorFactory, - CodeMirrorMimeTypeService -} from '@jupyterlab/codemirror'; -import { - Context, - IDocumentWidget, - TextModelFactory -} from '@jupyterlab/docregistry'; -import { FileEditor, FileEditorFactory } from '@jupyterlab/fileeditor'; -import { ILoggerRegistry } from '@jupyterlab/logconsole'; -import * as nbformat from '@jupyterlab/nbformat'; -import { - Notebook, - NotebookModel, - NotebookModelFactory, - NotebookPanel -} from '@jupyterlab/notebook'; -import { ServiceManager } from '@jupyterlab/services'; -import { Mock, NBTestUtils } from '@jupyterlab/testutils'; -import { ITranslator } from '@jupyterlab/translation'; -import { Signal } from '@lumino/signaling'; - -import { WidgetAdapter } from '../adapters/adapter'; -import { FileEditorAdapter } from '../adapters/file_editor/file_editor'; -import { NotebookAdapter } from '../adapters/notebook/notebook'; -import { LSPConnection } from '../connection'; -import { DocumentConnectionManager } from '../connection_manager'; -import { IForeignCodeExtractorsRegistry } from '../extractors/types'; -import { IFeatureSettings } from '../feature'; -import { FeatureManager, ILSPExtension } from '../index'; -import { LanguageServerManager } from '../manager'; -import { ICodeOverridesRegistry } from '../overrides/tokens'; -import { - ILSPFeatureManager, - ILSPLogConsole, - ILSPVirtualEditorManager, - WidgetAdapterConstructor -} from '../tokens'; -import { CodeMirrorVirtualEditor } from '../virtual/codemirror_editor'; -import { BrowserConsole } from '../virtual/console'; -import { VirtualDocument } from '../virtual/document'; -import { IVirtualEditor, VirtualEditorManager } from '../virtual/editor'; - -import { - CodeMirrorIntegration, - CodeMirrorIntegrationConstructor -} from './codemirror'; -import { EditorAdapter } from './editor_adapter'; - -import createNotebookPanel = NBTestUtils.createNotebookPanel; -import IEditor = CodeEditor.IEditor; - -const DEFAULT_SERVER_ID = 'pylsp'; - -export interface ITestEnvironment { - document_options: VirtualDocument.IOptions; - - virtual_editor: CodeMirrorVirtualEditor; - - adapter: WidgetAdapter; - /** - * Has to be called after construction! - */ - init(): void; - - dispose(): void; -} - -export class MockLanguageServerManager extends LanguageServerManager { - async fetchSessions() { - this._sessions = new Map(); - this._sessions.set(DEFAULT_SERVER_ID, { - spec: { - languages: ['python'] - } - } as any); - this._sessionsChanged.emit(void 0); - } -} - -export class MockSettings implements IFeatureSettings { - changed: Signal, void>; - - constructor(private settings: T) { - this.changed = new Signal(this); - } - - get composite(): Required { - return this.settings as Required; - } - - set(setting: keyof T, value: any): void { - this.settings[setting] = value; - } -} - -export class MockExtension implements ILSPExtension { - app: JupyterFrontEnd; - connection_manager: DocumentConnectionManager; - language_server_manager: LanguageServerManager; - feature_manager: ILSPFeatureManager; - editor_type_manager: ILSPVirtualEditorManager; - foreign_code_extractors: IForeignCodeExtractorsRegistry; - code_overrides: ICodeOverridesRegistry; - console: ILSPLogConsole; - user_console: ILoggerRegistry; - translator: ITranslator; - - constructor() { - this.app = null as any; - this.feature_manager = new FeatureManager(); - this.editor_type_manager = new VirtualEditorManager(); - this.language_server_manager = new MockLanguageServerManager({ - console: new BrowserConsole() - }); - this.connection_manager = new DocumentConnectionManager({ - language_server_manager: this.language_server_manager, - console: new BrowserConsole() - }); - this.editor_type_manager.registerEditorType({ - implementation: CodeMirrorVirtualEditor, - name: 'CodeMirrorEditor', - supports: CodeMirrorEditor - }); - this.foreign_code_extractors = {}; - this.code_overrides = {}; - this.console = new BrowserConsole(); - this.user_console = null as any; - } -} - -export abstract class TestEnvironment implements ITestEnvironment { - virtual_editor: CodeMirrorVirtualEditor; - protected abstract get_adapter_type(): WidgetAdapterConstructor; - adapter: WidgetAdapter; - abstract widget: IDocumentWidget; - protected extension: ILSPExtension; - protected abstract get_defaults(): VirtualDocument.IOptions; - public document_options: VirtualDocument.IOptions; - - constructor(options?: Partial) { - this.document_options = { - ...this.get_defaults(), - ...(options || {}) - }; - this.extension = new MockExtension(); - this.init(); - } - - protected abstract create_widget(): IDocumentWidget; - - init() { - this.widget = this.create_widget(); - let adapter_type = this.get_adapter_type(); - this.adapter = new adapter_type(this.extension, this.widget); - this.virtual_editor = this.create_virtual_editor(); - // override the virtual editor with a mock/test one - this.adapter.virtual_editor = this.virtual_editor; - this.adapter.initialized - .then(() => { - // override it again after initialization - // TODO: rewrite tests to async to only override after initialization - this.adapter.virtual_editor = this.virtual_editor; - }) - .catch(console.error); - } - - create_virtual_editor(): CodeMirrorVirtualEditor { - return new CodeMirrorVirtualEditor({ - adapter: this.adapter, - virtual_document: new VirtualDocument(this.document_options) - }); - } - - dispose(): void { - this.adapter.dispose(); - } -} - -export interface IFeatureTestEnvironment extends ITestEnvironment { - init_integration( - options: IFeatureTestEnvironment.IInitOptions - ): T; - - dispose_feature(feature: CodeMirrorIntegration): void; -} - -export namespace IFeatureTestEnvironment { - export interface IInitOptions { - constructor: CodeMirrorIntegrationConstructor; - id: string; - register?: boolean; - document?: VirtualDocument; - settings?: IFeatureSettings; - } -} - -type TestEnvironmentConstructor = new (...args: any[]) => ITestEnvironment; - -function FeatureSupport(Base: TBase) { - return class FeatureTestEnvironment - extends Base - implements IFeatureTestEnvironment - { - _connections: Map; - - init() { - this._connections = new Map(); - super.init(); - } - - get status_message() { - return this.adapter.status_message; - } - - public init_integration( - options: IFeatureTestEnvironment.IInitOptions - ): T { - let connection = this.create_dummy_connection(); - let document = options.document - ? options.document - : this.virtual_editor.virtual_document; - - let editor_adapter = this.adapter.connect_adapter(document, connection, [ - { - id: options.id, - name: options.id, - editorIntegrationFactory: new Map([ - ['CodeMirrorEditor', options.constructor] - ]), - settings: options.settings - } - ]); - this.virtual_editor.virtual_document = document; - document.changed.connect(async () => { - await editor_adapter.updateAfterChange(); - }); - - let feature = editor_adapter.features.get(options.id); - this._connections.set(feature as CodeMirrorIntegration, connection); - return feature as T; - } - - public dispose_feature(feature: CodeMirrorIntegration) { - let connection = this._connections.get(feature)!; - connection.close(); - feature.is_registered = false; - } - - public create_dummy_connection() { - return new LSPConnection({ - languageId: this.document_options.language, - serverUri: 'ws://localhost:8080', - rootUri: 'file:///unit-test', - serverIdentifier: DEFAULT_SERVER_ID, - console: new BrowserConsole(), - capabilities: {} - }); - } - - public dispose() { - super.dispose(); - for (let connection of this._connections.values()) { - connection.close(); - } - } - }; -} - -export class FileEditorTestEnvironment extends TestEnvironment { - protected get_adapter_type() { - return FileEditorAdapter; - } - widget: IDocumentWidget; - - protected get_defaults(): VirtualDocument.IOptions { - return { - language: 'python', - path: 'dummy.py', - file_extension: 'py', - has_lsp_supported_file: true, - standalone: true, - foreign_code_extractors: {}, - overrides_registry: {}, - console: new BrowserConsole() - }; - } - - get ce_editor(): CodeMirrorEditor { - return this.widget.content.editor as CodeMirrorEditor; - } - - create_widget(): IDocumentWidget { - let factory = new FileEditorFactory({ - editorServices: { - factoryService: new CodeMirrorEditorFactory(), - mimeTypeService: new CodeMirrorMimeTypeService() - }, - factoryOptions: { - name: 'Editor', - fileTypes: ['*'] - } - }); - const context = new Context({ - manager: new Mock.ServiceManagerMock(), - factory: new TextModelFactory(), - path: this.document_options.path - }); - return factory.createNew(context); - } - - dispose(): void { - super.dispose(); - this.ce_editor.dispose(); - } -} - -export class NotebookTestEnvironment extends TestEnvironment { - public widget: NotebookPanel; - protected get_adapter_type() { - return NotebookAdapter; - } - - get notebook(): Notebook { - return this.widget.content; - } - - protected get_defaults(): VirtualDocument.IOptions { - return { - language: 'python', - path: 'notebook.ipynb', - file_extension: 'py', - overrides_registry: {}, - foreign_code_extractors: {}, - has_lsp_supported_file: false, - standalone: true, - console: new BrowserConsole() - }; - } - - create_widget(): IDocumentWidget { - let context = new Context({ - manager: new ServiceManager({ standby: 'never' }), - factory: new NotebookModelFactory({}), - path: this.document_options.path - }); - return createNotebookPanel(context); - } -} - -export class FileEditorFeatureTestEnvironment extends FeatureSupport( - FileEditorTestEnvironment -) {} -export class NotebookFeatureTestEnvironment extends FeatureSupport( - NotebookTestEnvironment -) {} - -export function code_cell( - source: string[] | string, - metadata: Partial = { trusted: false } -) { - return { - cell_type: 'code', - source: source, - metadata: metadata, - execution_count: null, - outputs: [] - } as nbformat.ICodeCell; -} - -export function set_notebook_content( - notebook: Notebook, - cells: nbformat.ICodeCell[], - metadata = python_notebook_metadata -) { - let test_notebook = { - cells: cells, - metadata: metadata - } as nbformat.INotebookContent; - - notebook.model = new NotebookModel(); - notebook.model.fromJSON(test_notebook); -} - -export const python_notebook_metadata = { - kernelspec: { - display_name: 'Python [default]', - language: 'python', - name: 'python3' - }, - language_info: { - codemirror_mode: { - name: 'ipython', - version: 3 - }, - file_extension: '.py', - mimetype: 'text/x-python', - name: 'python', - nbconvert_exporter: 'python', - pygments_lexer: 'ipython3', - version: '3.5.2' - }, - orig_nbformat: 4.1 -} as nbformat.INotebookMetadata; - -export function showAllCells(notebook: Notebook) { - notebook.show(); - // iterate over every cell to activate the editors - for (let i = 0; i < notebook.model!.cells.length; i++) { - notebook.activeCellIndex = i; - notebook.activeCell!.show(); - } -} - -export function getCellsJSON(notebook: Notebook): Array { - let cells: Array = []; - for (let i = 0; i < notebook.model!.cells.length; i++) { - cells.push(notebook.model!.cells.get(i)); - } - return cells.map(cell => cell.toJSON()); -} - -export async function synchronize_content( - environment: IFeatureTestEnvironment, - adapter: EditorAdapter> -) { - await environment.adapter.update_documents(); - try { - await adapter.updateAfterChange(); - } catch (e) { - console.warn(e); - } -} diff --git a/packages/jupyterlab-lsp/src/edits.spec.ts b/packages/jupyterlab-lsp/src/edits.spec.ts new file mode 100644 index 000000000..70a6f4b39 --- /dev/null +++ b/packages/jupyterlab-lsp/src/edits.spec.ts @@ -0,0 +1,342 @@ +import { PageConfig } from '@jupyterlab/coreutils'; +import { CodeExtractorsManager } from '@jupyterlab/lsp'; +import * as nbformat from '@jupyterlab/nbformat'; +import { NotebookModel } from '@jupyterlab/notebook'; +import * as lsProtocol from 'vscode-languageserver-protocol'; + +import { EditApplicator } from './edits'; +import { + codeCell, + getCellsJSON, + python_notebook_metadata, + showAllCells, + FileEditorTestEnvironment, + NotebookTestEnvironment, + MockNotebookAdapter +} from './testutils'; +import { foreignCodeExtractors } from './transclusions/ipython/extractors'; +import { overrides } from './transclusions/ipython/overrides'; + +const js_fib_code = `function fib(n) { + return n<2?n:fib(n-1)+fib(n-2); +} + +fib(5); + +window.location /;`; + +const js_fib2_code = `function fib2(n) { + return n<2?n:fib2(n-1)+fib2(n-2); +} + +fib2(5); + +window.location /;`; + +const js_partial_edits = [ + { + range: { + start: { + line: 0, + character: 9 + }, + end: { + line: 0, + character: 12 + } + }, + newText: 'fib2' + }, + { + range: { + start: { + line: 1, + character: 15 + }, + end: { + line: 1, + character: 18 + } + }, + newText: 'fib2' + }, + { + range: { + start: { + line: 1, + character: 24 + }, + end: { + line: 1, + character: 27 + } + }, + newText: 'fib2' + }, + { + range: { + start: { + line: 4, + character: 0 + }, + end: { + line: 4, + character: 3 + } + }, + newText: 'fib2' + } +]; + +describe('EditApplicator', () => { + PageConfig.setOption('rootUri', 'file://'); + + describe('applyEdit()', () => { + describe('editing in FileEditor', () => { + let applicator: EditApplicator; + let environment: FileEditorTestEnvironment; + + beforeEach(async () => { + environment = new FileEditorTestEnvironment(); + await environment.init(); + await environment.adapter.ready; + applicator = new EditApplicator( + environment.adapter.virtualDocument as any, + environment.adapter + ); + }); + + afterEach(() => { + environment.dispose(); + }); + + it('applies simple edit in FileEditor', async () => { + environment.activeEditor.model.sharedModel.setSource('foo bar'); + await environment.adapter.updateDocuments(); + + let outcome = await applicator.applyEdit({ + changes: { + ['file:///' + environment.documentOptions.path]: [ + { + range: { + start: { line: 0, character: 0 }, + end: { line: 1, character: 0 } + }, + newText: 'changed bar' + } as lsProtocol.TextEdit + ] + } + }); + expect(environment.activeEditor.model.sharedModel.source).toBe( + 'changed bar' + ); + let raw_value = environment.activeEditor.editor.state.doc.toString(); + expect(raw_value).toBe('changed bar'); + expect(outcome.wasGranular).toBe(false); + expect(outcome.modifiedCells).toBe(1); + expect(outcome.appliedChanges).toBe(1); + }); + + it('correctly summarizes empty edit', async () => { + environment.activeEditor.model.sharedModel.setSource('foo bar'); + await environment.adapter.updateDocuments(); + + let outcome = await applicator.applyEdit({ + changes: { + ['file:///' + environment.documentOptions.path]: [] + } + }); + let raw_value = environment.activeEditor.editor.state.doc.toString(); + expect(raw_value).toBe('foo bar'); + expect(environment.activeEditor.model.sharedModel.source).toBe( + 'foo bar' + ); + expect(outcome.wasGranular).toBe(false); + expect(outcome.appliedChanges).toBe(0); + expect(outcome.modifiedCells).toBe(0); + }); + + it('applies partial edits', async () => { + environment.activeEditor.model.sharedModel.setSource(js_fib_code); + await environment.adapter.updateDocuments(); + + let result = await applicator.applyEdit({ + changes: { + ['file:///' + environment.documentOptions.path]: js_partial_edits + } + }); + let raw_value = environment.activeEditor.editor.state.doc.toString(); + expect(raw_value).toBe(js_fib2_code); + expect(environment.activeEditor.model.sharedModel.source).toBe( + js_fib2_code + ); + + expect(result.appliedChanges).toBe(js_partial_edits.length); + expect(result.wasGranular).toBe(true); + expect(result.modifiedCells).toBe(1); + }); + }); + + describe('editing in Notebook', () => { + let applicator: EditApplicator; + let environment: NotebookTestEnvironment; + + beforeEach(async () => { + const manager = new CodeExtractorsManager(); + for (let language of Object.keys(foreignCodeExtractors)) { + for (let extractor of foreignCodeExtractors[language]) { + manager.register(extractor, language); + } + } + environment = new NotebookTestEnvironment({ + document: { + overridesRegistry: { + python: { + cell: overrides.filter(override => override.scope == 'cell'), + line: overrides.filter(override => override.scope == 'line') + } + }, + foreignCodeExtractors: manager + } + }); + await environment.init(); + applicator = new EditApplicator( + // TODO usptream, adatper should be parameterizable by virtual documentation class to allow overriding it more easily?? + environment.adapter.virtualDocument as any, + environment.adapter + ); + }); + + afterEach(() => { + environment.dispose(); + }); + + async function synchronizeContent() { + await environment.adapter.updateDocuments(); + } + + it('applies edit across cells', async () => { + let test_notebook = { + cells: [ + codeCell(['def a_function():', ' pass']), + codeCell(['x = a_function()']) + ], + metadata: python_notebook_metadata + } as nbformat.INotebookContent; + + let notebook = environment.notebook; + + notebook.model = new NotebookModel(); + notebook.model.fromJSON(test_notebook); + showAllCells(notebook); + + await synchronizeContent(); + let mainDocument = environment.adapter.virtualDocument!; + + let old_virtual_source = + 'def a_function():\n pass\n\n\nx = a_function()\n'; + let new_virtual_source = + 'def a_function_2():\n pass\n\n\nx = a_function_2()\n'; + expect(mainDocument.value).toBe(old_virtual_source); + + let outcome = await applicator.applyEdit({ + changes: { + [mainDocument.documentInfo.uri]: [ + { + range: { + start: { line: 0, character: 0 }, + end: { line: 5, character: 0 } + }, + newText: new_virtual_source + } as lsProtocol.TextEdit + ] + } + }); + + await synchronizeContent(); + + let value = mainDocument.value; + expect(value).toBe(new_virtual_source); + + let codeCells = getCellsJSON(notebook); + + expect(codeCells[0]).toHaveProperty( + 'source', + 'def a_function_2():\n pass' + ); + expect(codeCells[1]).toHaveProperty('source', 'x = a_function_2()'); + + expect(outcome.appliedChanges).toBe(1); + expect(outcome.wasGranular).toBe(false); + expect(outcome.modifiedCells).toBe(2); + }); + + it('handles IPython magics', async () => { + let test_notebook = { + cells: [ + codeCell(['x = %ls', 'print(x)']), + codeCell(['%%python', 'y = x', 'print(x)']) + ], + metadata: python_notebook_metadata + } as nbformat.INotebookContent; + + let notebook = environment.notebook; + + notebook.model = new NotebookModel(); + notebook.model.fromJSON(test_notebook); + showAllCells(notebook); + + await (environment.adapter as MockNotebookAdapter).foreingDocumentOpened + .promise; + + let mainDocument = environment.adapter.virtualDocument!; + + let old_virtual_source = `x = get_ipython().run_line_magic("ls", "") +print(x) + + +get_ipython().run_cell_magic("python", "", """y = x +print(x)""") +`; + + let new_virtual_source = `z = get_ipython().run_line_magic("ls", "") +print(z) + + +get_ipython().run_cell_magic("python", "", """y = x +print(x)""") +`; + + await synchronizeContent(); + expect(mainDocument.value).toBe(old_virtual_source); + + await applicator.applyEdit({ + changes: { + [mainDocument.documentInfo.uri]: [ + { + range: { + start: { line: 0, character: 0 }, + end: { line: 6, character: 10 } + }, + newText: new_virtual_source + } as lsProtocol.TextEdit + ] + } + }); + await (environment.adapter as MockNotebookAdapter).foreingDocumentOpened + .promise; + + await synchronizeContent(); + expect(mainDocument.value).toBe(new_virtual_source); + + let codeCells = getCellsJSON(notebook); + + expect(codeCells[0]).toHaveProperty('source', 'z = %ls\nprint(z)'); + //expect(codeCells[1]).not.toHaveProperty( + // 'source', + // '%%python\ny = x\nprint(x)' + //); + }); + }); + }); +}); diff --git a/packages/jupyterlab-lsp/src/edits.ts b/packages/jupyterlab-lsp/src/edits.ts new file mode 100644 index 000000000..f15b5704b --- /dev/null +++ b/packages/jupyterlab-lsp/src/edits.ts @@ -0,0 +1,315 @@ +import { + IVirtualPosition, + offsetAtPosition, + WidgetLSPAdapter, + Document, + IPosition +} from '@jupyterlab/lsp'; +import type * as lsProtocol from 'vscode-languageserver-protocol'; + +import { PositionConverter } from './converter'; +import { DefaultMap, uris_equal } from './utils'; +import { VirtualDocument } from './virtual/document'; + +export interface IEditOutcome { + appliedChanges: number | null; + modifiedCells: number; + wasGranular: boolean; + errors: string[]; +} + +function offsetFromLsp(position: lsProtocol.Position, lines: string[]) { + return offsetAtPosition(PositionConverter.lsp_to_ce(position), lines); +} + +function toDocumentChanges(changes: { + [uri: string]: lsProtocol.TextEdit[]; +}): lsProtocol.TextDocumentEdit[] { + let documentChanges = []; + for (let uri of Object.keys(changes)) { + documentChanges.push({ + textDocument: { uri }, + edits: changes[uri] + } as lsProtocol.TextDocumentEdit); + } + return documentChanges; +} + +export class EditApplicator { + constructor( + protected virtualDocument: VirtualDocument, + protected adapter: WidgetLSPAdapter + ) { + // no-op + } + + async applyEdit( + workspaceEdit: lsProtocol.WorkspaceEdit + ): Promise { + let current_uri = this.virtualDocument.documentInfo.uri; + + // Specs: documentChanges are preferred over changes + let changes = workspaceEdit.documentChanges + ? workspaceEdit.documentChanges.map( + change => change as lsProtocol.TextDocumentEdit + ) + : toDocumentChanges(workspaceEdit.changes!); + let applied_changes = 0; + let edited_cells: number = 0; + let _isWholeDocumentEdit: boolean = false; + let errors: string[] = []; + + for (let change of changes) { + let uri = change.textDocument.uri; + + if (!uris_equal(uri, current_uri)) { + errors.push( + `Workspace-wide edits not implemented: ${uri} != ${current_uri}` + ); + } else { + _isWholeDocumentEdit = + change.edits.length === 1 && + this._isWholeDocumentEdit(change.edits[0]); + + let edit: lsProtocol.TextEdit; + + if (!_isWholeDocumentEdit) { + applied_changes = 0; + let value = this.virtualDocument.value; + // TODO: make sure that it was not changed since the request was sent (using the returned document version) + let lines = value.split('\n'); + + let edits_by_offset = new Map(); + for (let e of change.edits) { + let offset = offsetFromLsp(e.range.start, lines); + if (edits_by_offset.has(offset)) { + console.warn( + 'Edits should not overlap, ignoring an overlapping edit' + ); + } else { + edits_by_offset.set(offset, e); + applied_changes += 1; + } + } + + // TODO make use of old_to_new_line for edits which add of remove lines: + // this is crucial to preserve cell boundaries in notebook in such cases + let old_to_new_line = new DefaultMap(() => []); + let new_text = ''; + let last_end = 0; + let current_old_line = 0; + let current_new_line = 0; + // going over the edits in descending order of start points: + let start_offsets = [...edits_by_offset.keys()].sort((a, b) => a - b); + for (let start of start_offsets) { + let edit = edits_by_offset.get(start)!; + let prefix = value.slice(last_end, start); + for (let i = 0; i < prefix.split('\n').length; i++) { + let new_lines = old_to_new_line.get_or_create(current_old_line); + new_lines.push(current_new_line); + current_old_line += 1; + current_new_line += 1; + } + new_text += prefix + edit.newText; + let end = offsetFromLsp(edit.range.end, lines); + let replaced_fragment = value.slice(start, end); + for (let i = 0; i < edit.newText.split('\n').length; i++) { + if (i < replaced_fragment.length) { + current_old_line += 1; + } + current_new_line += 1; + let new_lines = old_to_new_line.get_or_create(current_old_line); + new_lines.push(current_new_line); + } + last_end = end; + } + new_text += value.slice(last_end, value.length); + + edit = { + range: { + start: { line: 0, character: 0 }, + end: { + line: lines.length - 1, + character: lines[lines.length - 1].length + } + }, + newText: new_text + }; + console.assert(this._isWholeDocumentEdit(edit)); + } else { + edit = change.edits[0]; + applied_changes += 1; + } + edited_cells = this._applySingleEdit(edit); + } + } + const all_empty = changes.every(change => change.edits.length === 0); + return { + appliedChanges: applied_changes, + modifiedCells: edited_cells, + wasGranular: !_isWholeDocumentEdit && !all_empty, + errors: errors + }; + } + + /** + * Does the edit cover the entire document? + */ + private _isWholeDocumentEdit(edit: lsProtocol.TextEdit) { + let value = this.virtualDocument.value; + let lines = value.split('\n'); + let range = edit.range; + let lsp_to_ce = PositionConverter.lsp_to_ce; + return ( + offsetAtPosition(lsp_to_ce(range.start), lines) === 0 && + offsetAtPosition(lsp_to_ce(range.end), lines) === value.length + ); + } + + private _replaceFragment( + newText: string, + editorAccessor: Document.IEditor, + fragment_start: IPosition, + fragment_end: IPosition, + start: IPosition, + end: IPosition, + _isWholeDocumentEdit = false + ): number { + let document = this.virtualDocument; + let newFragmentText = newText + .split('\n') + .slice(fragment_start.line - start.line, fragment_end.line - start.line) + .join('\n'); + + if (newFragmentText.endsWith('\n')) { + newFragmentText = newFragmentText.slice(0, -1); + } + + const editor = editorAccessor.getEditor(); + if (!editor) { + throw Error('Editor is not accessible'); + } + // TODO: should accessor present the model even if editor is not created yet? + const model = editor.model; + + let rawValue = model.sharedModel.source; + // extract foreign documents and substitute magics, + // as it was done when the shadow virtual document was being created + let { lines } = document.prepareCodeBlock({ + value: rawValue, + ceEditor: editorAccessor, + type: 'code' + }); + let old_value = lines.join('\n'); + + if (_isWholeDocumentEdit) { + // partial edit + let cm_to_ce = PositionConverter.cm_to_ce; + let up_to_offset = offsetAtPosition(cm_to_ce(start), lines); + let from_offset = offsetAtPosition(cm_to_ce(end), lines); + newFragmentText = + old_value.slice(0, up_to_offset) + + newText + + old_value.slice(from_offset); + } + + if (old_value === newFragmentText) { + return 0; + } + + let newValue = document.decodeCodeBlock(newFragmentText); + + const cursor = editor.getCursorPosition(); + + model.sharedModel.updateSource( + editor.getOffsetAt({ line: 0, column: 0 }), + old_value.length, + newValue + ); + + try { + // try to restore the cursor to the position prior to the edit + // (this might not be the best UX, but definitely better than + // the cursor jumping to the very end of the cell/file). + editor.setSelection({ start: cursor, end: cursor }); + // note: this does not matter for actions invoke from context menu + // as those loose focus anyways (this might be addressed elsewhere) + } catch (e) { + console.log('Could not place the cursor back', e); + } + + return 1; + } + + private _applySingleEdit(edit: lsProtocol.TextEdit): number { + let document = this.virtualDocument; + let applied_changes = 0; + let start = PositionConverter.lsp_to_cm(edit.range.start); + let end = PositionConverter.lsp_to_cm(edit.range.end); + + let start_editor = document.getEditorAtVirtualLine( + start as IVirtualPosition + ); + let end_editor = document.getEditorAtVirtualLine(end as IVirtualPosition); + if (start_editor !== end_editor) { + let last_editor = start_editor; + let fragment_start = start; + let fragment_end = { ...start }; + + let line = start.line; + let recently_replaced = false; + while (line <= end.line) { + line++; + let editor = document.getEditorAtVirtualLine({ + line: line, + ch: 0 + } as IVirtualPosition); + + if (editor === last_editor) { + fragment_end.line = line; + fragment_end.ch = 0; + recently_replaced = false; + } else { + applied_changes += this._replaceFragment( + edit.newText, + last_editor, + fragment_start, + fragment_end, + start, + end + ); + recently_replaced = true; + fragment_start = { + line: line, + ch: 0 + }; + fragment_end = { + line: line, + ch: 0 + }; + last_editor = editor; + } + } + if (!recently_replaced) { + applied_changes += this._replaceFragment( + edit.newText, + last_editor, + fragment_start, + fragment_end, + start, + end + ); + } + } else { + applied_changes += this._replaceFragment( + edit.newText, + start_editor, + start, + end, + start, + end + ); + } + return applied_changes; + } +} diff --git a/packages/jupyterlab-lsp/src/extractors/manager.ts b/packages/jupyterlab-lsp/src/extractors/manager.ts deleted file mode 100644 index 3dd06abc4..000000000 --- a/packages/jupyterlab-lsp/src/extractors/manager.ts +++ /dev/null @@ -1,34 +0,0 @@ -import { JupyterFrontEndPlugin } from '@jupyterlab/application'; - -import { ILSPCodeExtractorsManager } from '../tokens'; - -import { IForeignCodeExtractor, IForeignCodeExtractorsRegistry } from './types'; - -export class CodeExtractorsManager implements ILSPCodeExtractorsManager { - registry: IForeignCodeExtractorsRegistry; - - constructor() { - this.registry = {}; - } - - /** - * Register an extractor to extract foreign code from host documents of specified language. - */ - register(extractor: IForeignCodeExtractor, host_language: string): void { - if (!this.registry.hasOwnProperty(host_language)) { - this.registry[host_language] = []; - } - this.registry[host_language].push(extractor); - } -} - -export const CODE_EXTRACTORS_MANAGER: JupyterFrontEndPlugin = - { - id: ILSPCodeExtractorsManager.name, - requires: [], - activate: app => { - return new CodeExtractorsManager(); - }, - provides: ILSPCodeExtractorsManager, - autoStart: true - }; diff --git a/packages/jupyterlab-lsp/src/extractors/regexp.spec.ts b/packages/jupyterlab-lsp/src/extractors/regexp.spec.ts index 1789bd094..ce275facd 100644 --- a/packages/jupyterlab-lsp/src/extractors/regexp.spec.ts +++ b/packages/jupyterlab-lsp/src/extractors/regexp.spec.ts @@ -1,5 +1,3 @@ -import { expect } from 'chai'; - import { RegExpForeignCodeExtractor, getIndexOfCaptureGroup } from './regexp'; let R_CELL_MAGIC_EXISTS = `%%R @@ -35,7 +33,7 @@ describe('getIndexOfCaptureGroup', () => { '%%python\nh', 'h' ); - expect(result).to.be.equal(9); + expect(result).toBe(9); }); }); @@ -43,79 +41,79 @@ describe('RegExpForeignCodeExtractor', () => { let r_cell_extractor = new RegExpForeignCodeExtractor({ language: 'R', pattern: '^%%R( .*?)?\n([^]*)', - foreign_capture_groups: [2], - keep_in_host: true, - is_standalone: false, - file_extension: 'R' + foreignCaptureGroups: [2], + keepInHost: true, + isStandalone: false, + fileExtension: 'R' }); let r_line_extractor = new RegExpForeignCodeExtractor({ language: 'R', pattern: '(^|\n)%R (.*)\n?', - foreign_capture_groups: [2], - keep_in_host: true, - is_standalone: false, - file_extension: 'R' + foreignCaptureGroups: [2], + keepInHost: true, + isStandalone: false, + fileExtension: 'R' }); let python_cell_extractor = new RegExpForeignCodeExtractor({ language: 'python', pattern: '^%%(python|python2|python3|pypy)( .*?)?\\n([^]*)', - foreign_capture_groups: [3], - keep_in_host: true, - is_standalone: true, - file_extension: 'py' + foreignCaptureGroups: [3], + keepInHost: true, + isStandalone: true, + fileExtension: 'py' }); - describe('#has_foreign_code()', () => { + describe('#hasForeignCode()', () => { it('detects cell magics', () => { - let result = r_cell_extractor.has_foreign_code(R_CELL_MAGIC_EXISTS); - expect(result).to.equal(true); + let result = r_cell_extractor.hasForeignCode(R_CELL_MAGIC_EXISTS); + expect(result).toBe(true); - result = r_cell_extractor.has_foreign_code(R_LINE_MAGICS); - expect(result).to.equal(false); + result = r_cell_extractor.hasForeignCode(R_LINE_MAGICS); + expect(result).toBe(false); - result = r_cell_extractor.has_foreign_code(NO_CELL_MAGIC); - expect(result).to.equal(false); + result = r_cell_extractor.hasForeignCode(NO_CELL_MAGIC); + expect(result).toBe(false); }); it('is not stateful', () => { // stateful implementation of regular expressions in JS can easily lead to // an error manifesting it two consecutive checks giving different results, // as the last index was moved in between: - let result = r_cell_extractor.has_foreign_code(R_CELL_MAGIC_EXISTS); - expect(result).to.equal(true); + let result = r_cell_extractor.hasForeignCode(R_CELL_MAGIC_EXISTS); + expect(result).toBe(true); - result = r_cell_extractor.has_foreign_code(R_CELL_MAGIC_EXISTS); - expect(result).to.equal(true); + result = r_cell_extractor.hasForeignCode(R_CELL_MAGIC_EXISTS); + expect(result).toBe(true); }); it('detects line magics', () => { - let result = r_line_extractor.has_foreign_code(R_LINE_MAGICS); - expect(result).to.equal(true); + let result = r_line_extractor.hasForeignCode(R_LINE_MAGICS); + expect(result).toBe(true); - result = r_line_extractor.has_foreign_code(R_CELL_MAGIC_EXISTS); - expect(result).to.equal(false); + result = r_line_extractor.hasForeignCode(R_CELL_MAGIC_EXISTS); + expect(result).toBe(false); }); }); - describe('#extract_foreign_code()', () => { + describe('#extractForeignCode()', () => { it('should correctly return the range', () => { - let results = python_cell_extractor.extract_foreign_code( + let results = python_cell_extractor.extractForeignCode( PYTHON_CELL_MAGIC_WITH_H ); - expect(results.length).to.equal(1); + expect(results.length).toBe(1); let result = results[0]; // test against https://github.com/jupyter-lsp/jupyterlab-lsp/issues/559 - expect(result.host_code).to.equal(PYTHON_CELL_MAGIC_WITH_H); - expect(result.foreign_code).to.equal('h'); + expect(result.hostCode).toBe(PYTHON_CELL_MAGIC_WITH_H); + expect(result.foreignCode).toBe('h'); - expect(result.range!.start.line).to.equal(1); - expect(result.range!.start.column).to.equal(0); - expect(result.range!.end.line).to.equal(1); - expect(result.range!.end.column).to.equal(1); + expect(result.range!.start.line).toBe(1); + expect(result.range!.start.column).toBe(0); + expect(result.range!.end.line).toBe(1); + expect(result.range!.end.column).toBe(1); }); it('should work with non-line magic and non-cell magic code snippets as well', () => { @@ -124,129 +122,129 @@ describe('RegExpForeignCodeExtractor', () => { let html_extractor = new RegExpForeignCodeExtractor({ language: 'HTML', pattern: '(<(.*?)( .*?)?>([^]*?))', - foreign_capture_groups: [1], - keep_in_host: false, - is_standalone: false, - file_extension: 'html' + foreignCaptureGroups: [1], + keepInHost: false, + isStandalone: false, + fileExtension: 'html' }); - let results = html_extractor.extract_foreign_code(HTML_IN_PYTHON); - expect(results.length).to.equal(2); + let results = html_extractor.extractForeignCode(HTML_IN_PYTHON); + expect(results.length).toBe(2); let result = results[0]; // TODO: is tolerating the new line added here ok? - expect(result.host_code).to.equal('\nx = """\n'); - expect(result.foreign_code).to.equal( + expect(result.hostCode).toBe('\nx = """\n'); + expect(result.foreignCode).toBe( '\nimportant link\n' ); - expect(result.range!.start.line).to.equal(1); - expect(result.range!.start.column).to.equal(7); - expect(result.range!.end.line).to.equal(3); - expect(result.range!.end.column).to.equal(4); + expect(result.range!.start.line).toBe(1); + expect(result.range!.start.column).toBe(7); + expect(result.range!.end.line).toBe(3); + expect(result.range!.end.column).toBe(4); let last_bit = results[1]; - expect(last_bit.host_code).to.equal('""";\nprint(x)'); + expect(last_bit.hostCode).toBe('""";\nprint(x)'); }); it('should extract cell magics and keep in host', () => { - let results = r_cell_extractor.extract_foreign_code(R_CELL_MAGIC_EXISTS); - expect(results.length).to.equal(1); + let results = r_cell_extractor.extractForeignCode(R_CELL_MAGIC_EXISTS); + expect(results.length).toBe(1); let result = results[0]; - expect(result.host_code).to.equal(R_CELL_MAGIC_EXISTS); - expect(result.foreign_code).to.equal('some text\n'); - expect(result.range!.start.line).to.equal(1); - expect(result.range!.start.column).to.equal(0); + expect(result.hostCode).toBe(R_CELL_MAGIC_EXISTS); + expect(result.foreignCode).toBe('some text\n'); + expect(result.range!.start.line).toBe(1); + expect(result.range!.start.column).toBe(0); }); it('should extract and remove from host', () => { let extractor = new RegExpForeignCodeExtractor({ language: 'R', pattern: '^%%R( .*?)?\n([^]*)', - foreign_capture_groups: [2], - keep_in_host: false, - is_standalone: false, - file_extension: 'R' + foreignCaptureGroups: [2], + keepInHost: false, + isStandalone: false, + fileExtension: 'R' }); - let results = extractor.extract_foreign_code(R_CELL_MAGIC_EXISTS); - expect(results.length).to.equal(1); + let results = extractor.extractForeignCode(R_CELL_MAGIC_EXISTS); + expect(results.length).toBe(1); let result = results[0]; - expect(result.foreign_code).to.equal('some text\n'); - expect(result.host_code).to.equal(''); + expect(result.foreignCode).toBe('some text\n'); + expect(result.hostCode).toBe(''); }); it('should extract multiple line magics deleting them from host', () => { let r_line_extractor = new RegExpForeignCodeExtractor({ language: 'R', pattern: '(^|\n)%R (.*)\n?', - foreign_capture_groups: [2], - keep_in_host: false, - is_standalone: false, - file_extension: 'R' + foreignCaptureGroups: [2], + keepInHost: false, + isStandalone: false, + fileExtension: 'R' }); - let results = r_line_extractor.extract_foreign_code(R_LINE_MAGICS); + let results = r_line_extractor.extractForeignCode(R_LINE_MAGICS); // 2 line magics to be extracted + the unprocessed host code - expect(results.length).to.eq(3); + expect(results.length).toBe(3); let first_magic = results[0]; - expect(first_magic.foreign_code).to.equal('df = data.frame()'); - expect(first_magic.host_code).to.equal(''); + expect(first_magic.foreignCode).toBe('df = data.frame()'); + expect(first_magic.hostCode).toBe(''); let second_magic = results[1]; - expect(second_magic.foreign_code).to.equal('ggplot(df)'); - expect(second_magic.host_code).to.equal('print("df created")\n'); + expect(second_magic.foreignCode).toBe('ggplot(df)'); + expect(second_magic.hostCode).toBe('print("df created")\n'); let final_bit = results[2]; - expect(final_bit.foreign_code).to.equal(null); - expect(final_bit.host_code).to.equal('print("plotted")\n'); + expect(final_bit.foreignCode).toBe(null); + expect(final_bit.hostCode).toBe('print("plotted")\n'); }); it('should extract multiple line magics preserving them in host', () => { - let results = r_line_extractor.extract_foreign_code(R_LINE_MAGICS); + let results = r_line_extractor.extractForeignCode(R_LINE_MAGICS); // 2 line magics to be extracted + the unprocessed host code - expect(results.length).to.eq(3); + expect(results.length).toBe(3); let first_magic = results[0]; - expect(first_magic.foreign_code).to.equal('df = data.frame()'); - expect(first_magic.host_code).to.equal('%R df = data.frame()\n'); - expect(first_magic.range!.end.line).to.equal(0); - expect(first_magic.range!.end.column).to.equal(20); + expect(first_magic.foreignCode).toBe('df = data.frame()'); + expect(first_magic.hostCode).toBe('%R df = data.frame()\n'); + expect(first_magic.range!.end.line).toBe(0); + expect(first_magic.range!.end.column).toBe(20); let second_magic = results[1]; - expect(second_magic.foreign_code).to.equal('ggplot(df)'); - expect(second_magic.host_code).to.equal( + expect(second_magic.foreignCode).toBe('ggplot(df)'); + expect(second_magic.hostCode).toBe( 'print("df created")\n%R ggplot(df)\n' ); let final_bit = results[2]; - expect(final_bit.foreign_code).to.equal(null); - expect(final_bit.host_code).to.equal('print("plotted")\n'); + expect(final_bit.foreignCode).toBe(null); + expect(final_bit.hostCode).toBe('print("plotted")\n'); }); it('should extract single line magic which does not end with a blank line', () => { - let results = r_line_extractor.extract_foreign_code('%R test'); + let results = r_line_extractor.extractForeignCode('%R test'); - expect(results.length).to.eq(1); + expect(results.length).toBe(1); let result = results[0]; - expect(result.foreign_code).to.equal('test'); + expect(result.foreignCode).toBe('test'); }); it('should not extract magic-like text from the middle of the cell', () => { - let results = r_cell_extractor.extract_foreign_code(NO_CELL_MAGIC); + let results = r_cell_extractor.extractForeignCode(NO_CELL_MAGIC); - expect(results.length).to.eq(1); + expect(results.length).toBe(1); let result = results[0]; - expect(result.foreign_code).to.equal(null); - expect(result.host_code).to.equal(NO_CELL_MAGIC); - expect(result.range).to.equal(null); + expect(result.foreignCode).toBe(null); + expect(result.hostCode).toBe(NO_CELL_MAGIC); + expect(result.range).toBe(null); }); }); }); diff --git a/packages/jupyterlab-lsp/src/extractors/regexp.ts b/packages/jupyterlab-lsp/src/extractors/regexp.ts index f98cb6100..5f702c3e2 100644 --- a/packages/jupyterlab-lsp/src/extractors/regexp.ts +++ b/packages/jupyterlab-lsp/src/extractors/regexp.ts @@ -1,181 +1,184 @@ import { CodeEditor } from '@jupyterlab/codeeditor'; +import { + positionAtOffset, + IExtractedCode, + IForeignCodeExtractor +} from '@jupyterlab/lsp'; import { replacer } from '../overrides/tokens'; -import { position_at_offset } from '../positioning'; - -import { IExtractedCode, IForeignCodeExtractor } from './types'; export function getIndexOfCaptureGroup( expression: RegExp, - matched_string: string, - value_of_captured_group: string + matchedString: string, + valueOfCapturedGroup: string ): number { // TODO: use https://github.com/tc39/proposal-regexp-match-indices once supported in >95% of browsers // (probably around 2025) // get index of the part that is being extracted to foreign document - let captured_groups = expression.exec(matched_string); + let capturedGroups = expression.exec(matchedString); - if (captured_groups == null) { + if (capturedGroups == null) { console.warn( - `No capture group found for ${expression} in ${matched_string}` + `No capture group found for ${expression} in ${matchedString}` ); return -1; } - let offset_in_match = 0; + let offsetInMatch = 0; // first element is a full match - let full_matched = captured_groups[0]; + let fullMatched = capturedGroups[0]; - for (let group of captured_groups.slice(1)) { + for (let group of capturedGroups.slice(1)) { if (typeof group === 'undefined') { continue; } - if (group === value_of_captured_group) { - offset_in_match += full_matched.indexOf(group); + if (group === valueOfCapturedGroup) { + offsetInMatch += fullMatched.indexOf(group); break; } - let group_end_offset = full_matched.indexOf(group) + group.length; + let groupEndOffset = fullMatched.indexOf(group) + group.length; - full_matched = full_matched.slice(group_end_offset); - offset_in_match += group_end_offset; + fullMatched = fullMatched.slice(groupEndOffset); + offsetInMatch += groupEndOffset; } - return offset_in_match; + return offsetInMatch; } export class RegExpForeignCodeExtractor implements IForeignCodeExtractor { options: RegExpForeignCodeExtractor.IOptions; language: string; - global_expression: RegExp; - test_expression: RegExp; + globalExpression: RegExp; + testExpression: RegExp; expression: RegExp; standalone: boolean; - file_extension: string; + fileExtension: string; + cellType: string[] = ['code']; constructor(options: RegExpForeignCodeExtractor.IOptions) { this.language = options.language; this.options = options; - this.global_expression = new RegExp(options.pattern, 'g'); - this.test_expression = new RegExp(options.pattern, 'g'); + this.globalExpression = new RegExp(options.pattern, 'g'); + this.testExpression = new RegExp(options.pattern, 'g'); this.expression = new RegExp(options.pattern); - this.standalone = this.options.is_standalone; - this.file_extension = this.options.file_extension; + this.standalone = this.options.isStandalone; + this.fileExtension = this.options.fileExtension; } - has_foreign_code(code: string): boolean { - let result = this.test_expression.test(code); - this.test_expression.lastIndex = 0; + hasForeignCode(code: string): boolean { + const result = this.testExpression.test(code); + this.testExpression.lastIndex = 0; return result; } - extract_foreign_code(code: string): IExtractedCode[] { - let lines = code.split('\n'); + extractForeignCode(code: string): IExtractedCode[] { + const lines = code.split('\n'); - let extracts = new Array(); + const extracts = new Array(); - let started_from = this.global_expression.lastIndex; - let match: RegExpExecArray | null = this.global_expression.exec(code); - let host_code_fragment: string; + let startedFrom = this.globalExpression.lastIndex; + let match: RegExpExecArray | null = this.globalExpression.exec(code); + let hostCodeFragment: string; - let chosen_replacer: string | replacer; - let is_new_api_replacer: boolean = false; + let chosenReplacer: string | replacer; + let isNewApiReplacer: boolean = false; - if (typeof this.options.foreign_replacer !== 'undefined') { - chosen_replacer = this.options.foreign_replacer; - is_new_api_replacer = true; - } else if (typeof this.options.foreign_capture_groups !== 'undefined') { - chosen_replacer = '$' + this.options.foreign_capture_groups.join('$'); - is_new_api_replacer = true; - } else if (this.options.extract_to_foreign) { - chosen_replacer = this.options.extract_to_foreign; + if (typeof this.options.foreignReplacer !== 'undefined') { + chosenReplacer = this.options.foreignReplacer; + isNewApiReplacer = true; + } else if (typeof this.options.foreignCaptureGroups !== 'undefined') { + chosenReplacer = '$' + this.options.foreignCaptureGroups.join('$'); + isNewApiReplacer = true; + } else if (this.options.extractToForeign) { + chosenReplacer = this.options.extractToForeign; } else { console.warn( - `Foreign replacer not defined for extractor: {this.expression} - this is deprecated; use 'foreign_replacer' to define it` + `Foreign replacer not defined for extractor: {this.expression} - this is deprecated; use 'foreignReplacer' to define it` ); return []; } while (match != null) { - let matched_string = match[0]; - let position_shift: CodeEditor.IPosition | null = null; + let matchedString = match[0]; + let positionShift: CodeEditor.IPosition | null = null; - let foreign_code_fragment = matched_string.replace( + let foreignCodeFragment = matchedString.replace( this.expression, // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore - chosen_replacer + chosenReplacer ); let prefix = ''; - if (typeof this.options.extract_arguments !== 'undefined') { - prefix = matched_string.replace( + if (typeof this.options.extractArguments !== 'undefined') { + prefix = matchedString.replace( this.expression, // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore - this.options.extract_arguments + this.options.extractArguments ); - position_shift = position_at_offset(prefix.length, prefix.split('\n')); + positionShift = positionAtOffset(prefix.length, prefix.split('\n')); } // NOTE: - // match.index + matched_string.length === this.sticky_expression.lastIndex + // match.index + matchedString.length === this.sticky_expression.lastIndex - let end_index = this.global_expression.lastIndex; + let endIndex = this.globalExpression.lastIndex; - if (this.options.keep_in_host || this.options.keep_in_host == null) { - host_code_fragment = code.substring(started_from, end_index); + if (this.options.keepInHost || this.options.keepInHost == null) { + hostCodeFragment = code.substring(startedFrom, endIndex); } else { - if (started_from === match.index) { - host_code_fragment = ''; + if (startedFrom === match.index) { + hostCodeFragment = ''; } else { - host_code_fragment = code.substring(started_from, match.index) + '\n'; + hostCodeFragment = code.substring(startedFrom, match.index) + '\n'; } } - let foreign_code_group_value = foreign_code_fragment; + let foreignCodeGroupValue = foreignCodeFragment; - if (is_new_api_replacer) { - foreign_code_group_value = matched_string.replace( + if (isNewApiReplacer) { + foreignCodeGroupValue = matchedString.replace( this.expression, - '$' + Math.min(...this.options.foreign_capture_groups!) + '$' + Math.min(...this.options.foreignCaptureGroups!) ); } - const foreign_group_index_in_match = getIndexOfCaptureGroup( + const foreignGroupIndexInMatch = getIndexOfCaptureGroup( this.expression, - matched_string, - foreign_code_group_value + matchedString, + foreignCodeGroupValue ); - let start_offset = match.index + foreign_group_index_in_match; + let startOffset = match.index + foreignGroupIndexInMatch; - let start = position_at_offset(start_offset, lines); - let end = position_at_offset( - start_offset + foreign_code_fragment.length, + let start = positionAtOffset(startOffset, lines); + let end = positionAtOffset( + startOffset + foreignCodeFragment.length, lines ); extracts.push({ - host_code: host_code_fragment, - foreign_code: prefix + foreign_code_fragment, + hostCode: hostCodeFragment, + foreignCode: prefix + foreignCodeFragment, range: { start, end }, - virtual_shift: position_shift + virtualShift: positionShift }); - started_from = this.global_expression.lastIndex; - match = this.global_expression.exec(code); + startedFrom = this.globalExpression.lastIndex; + match = this.globalExpression.exec(code); } - if (started_from !== code.length) { - let final_host_code_fragment = code.substring(started_from, code.length); + if (startedFrom !== code.length) { + let finalHostCodeFragment = code.substring(startedFrom, code.length); extracts.push({ - host_code: final_host_code_fragment, - foreign_code: null, + hostCode: finalHostCodeFragment, + foreignCode: null, range: null, - virtual_shift: null + virtualShift: null }); } @@ -203,30 +206,30 @@ namespace RegExpForeignCodeExtractor { * For the R example this should be `3`. Please not that these are 1-based, as the 0th index is the full match. * If multiple groups are given, those will be concatenated. * - * If additional code is needed in between the groups, use `foreign_replacer` in addition to - * `foreign_capture_groups` (but not instead!). + * If additional code is needed in between the groups, use `foreignReplacer` in addition to + * `foreignCaptureGroups` (but not instead!). * - * `foreign_capture_groups` is required for proper offset calculation and will no longer be optional in 4.0. + * `foreignCaptureGroups` is required for proper offset calculation and will no longer be optional in 4.0. */ - foreign_capture_groups?: number[]; + foreignCaptureGroups?: number[]; /** * Function to compose the foreign document code, in case if using a capture group alone is not sufficient; * If specified, `foreign_capture_group` should be specified as well, so that it points to the first occurrence - * of the foreign code. When both are specified, `foreign_replacer` takes precedence. + * of the foreign code. When both are specified, `foreignReplacer` takes precedence. * * See: * https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/replace#specifying_a_function_as_a_parameter */ - foreign_replacer?: replacer; + foreignReplacer?: replacer; /** - * @deprecated `extract_to_foreign` will be removed in 4.0; use `foreign_capture_group` or `foreign_replacer` instead + * @deprecated `extractToForeign` will be removed in 4.0; use `foreign_capture_group` or `foreignReplacer` instead */ - extract_to_foreign?: string | replacer; + extractToForeign?: string | replacer; /** * If arguments from the cell or line magic are to be extracted and prepended before the extracted code, - * set extract_arguments to a replacer function taking the code and returning the string to be prepended. + * set extractArguments to a replacer function taking the code and returning the string to be prepended. */ - extract_arguments?: replacer; + extractArguments?: replacer; /** * Boolean if everything (true, default) or nothing (false) should be kept in the host document. * @@ -238,14 +241,14 @@ namespace RegExpForeignCodeExtractor { * Setting to false is DEPRECATED as it breaks the edit feature (while it could be fixed, * it would make the code considerably more complex). * - * @deprecated `keep_in_host` will be removed in 4.0 + * @deprecated `keepInHost` will be removed in 4.0 */ - keep_in_host?: boolean; + keepInHost?: boolean; /** * Should the foreign code be appended (False) to the previously established virtual document of the same language, * or is it standalone snippet which requires separate connection? */ - is_standalone: boolean; - file_extension: string; + isStandalone: boolean; + fileExtension: string; } } diff --git a/packages/jupyterlab-lsp/src/extractors/testutils.ts b/packages/jupyterlab-lsp/src/extractors/testutils.ts index 4c6c63141..ee0740eb2 100644 --- a/packages/jupyterlab-lsp/src/extractors/testutils.ts +++ b/packages/jupyterlab-lsp/src/extractors/testutils.ts @@ -1,11 +1,27 @@ import { CodeEditor } from '@jupyterlab/codeeditor'; -import { expect } from 'chai'; - -import { IVirtualDocumentBlock, VirtualDocument } from '../virtual/document'; +import { + Document, + VirtualDocument, + CodeExtractorsManager +} from '@jupyterlab/lsp'; + +import { IForeignCodeExtractorsRegistry } from '../extractors/types'; + +export function mockExtractorsManager( + foreignCodeExtractors: IForeignCodeExtractorsRegistry +): CodeExtractorsManager { + const extractorManager = new CodeExtractorsManager(); + for (const [language, list] of Object.entries(foreignCodeExtractors)) { + for (const extractor of list) { + extractorManager.register(extractor, language); + } + } + return extractorManager; +} -export function extract_code(document: VirtualDocument, code: string) { - return document.extract_foreign_code( - { value: code, ce_editor: null as any }, +export function extractCode(document: VirtualDocument, code: string) { + return document.extractForeignCode( + { value: code, ceEditor: null as any, type: 'code' }, { line: 0, column: 0 @@ -15,27 +31,27 @@ export function extract_code(document: VirtualDocument, code: string) { interface IDocumentWithRange { range: CodeEditor.IRange; - virtual_document: VirtualDocument; + virtualDocument: VirtualDocument; } -export function get_the_only_pair( - foreign_document_map: Map +export function getTheOnlyPair( + foreignDocument_map: Map ): IDocumentWithRange { - expect(foreign_document_map.size).to.equal(1); + expect(foreignDocument_map.size).toBe(1); - let range = foreign_document_map.keys().next().value; - let { virtual_document } = foreign_document_map.get(range)!; + let range = foreignDocument_map.keys().next().value; + let { virtualDocument } = foreignDocument_map.get(range)!; - return { range, virtual_document }; + return { range, virtualDocument }; } -export function get_the_only_virtual( - foreign_document_map: Map +export function getTheOnlyVirtual( + foreignDocument_map: Map ) { - let { virtual_document } = get_the_only_pair(foreign_document_map); - return virtual_document; + let { virtualDocument } = getTheOnlyPair(foreignDocument_map); + return virtualDocument; } -export function wrap_in_python_lines(line: string) { +export function wrapInPythonLines(line: string) { return 'print("some code before")\n' + line + '\n' + 'print("and after")\n'; } diff --git a/packages/jupyterlab-lsp/src/extractors/types.ts b/packages/jupyterlab-lsp/src/extractors/types.ts index 710f65f75..579075d09 100644 --- a/packages/jupyterlab-lsp/src/extractors/types.ts +++ b/packages/jupyterlab-lsp/src/extractors/types.ts @@ -1,70 +1,4 @@ -import { CodeEditor } from '@jupyterlab/codeeditor'; - -import { LanguageIdentifier } from '../lsp'; - -export interface IExtractedCode { - /** - * Foreign code (may be empty, for example line of '%R') or null if none. - */ - foreign_code: string | null; - /** - * Range of the foreign code relative to the original source. - * `null` is used internally to represent a leftover host code after extraction. - */ - range: CodeEditor.IRange | null; - /** - * Shift due to any additional code inserted at the beginning of the virtual document - * (usually in order to mock the arguments passed to a magic, or to provide other context clues for the linters) - */ - virtual_shift: CodeEditor.IPosition | null; - /** - * Code to be retained in the virtual document of the host. - */ - host_code: string | null; -} - -/** - * Foreign code extractor makes it possible to analyze code of language X embedded in code (or notebook) of language Y. - * - * The typical examples are: - * - (X=CSS< Y=HTML), or - * - (X=JavaScript, Y=HTML), - * - * while in the data analysis realm, examples include: - * - (X=R, Y=IPython), - * - (X=LATEX Y=IPython), - * - (X=SQL, Y=IPython) - * - * This extension does not aim to provide comprehensive abilities for foreign code extraction, - * but it does intend to provide stable interface for other extensions to build on it. - * - * A simple, regular expression based, configurable foreign extractor is implemented - * to provide a good reference and a good initial experience for the users. - */ -export interface IForeignCodeExtractor { - /** - * The foreign language. - */ - language: LanguageIdentifier; - - /** - * Split the code into the host and foreign code (if any foreign code was detected) - */ - extract_foreign_code(code: string): IExtractedCode[]; - /** - * Does the extractor produce code which should be appended to the previously established virtual document (False) - * of the same language, or does it produce standalone snippets which require separate connections (True)? - */ - standalone: boolean; - /** - * Test if there is any foreign code in provided code snippet. - */ - has_foreign_code(code: string): boolean; - /** - * Extension of the virtual document (some servers check extensions of files), e.g. 'py' or 'R'. - */ - file_extension: string; -} +import { IForeignCodeExtractor } from '@jupyterlab/lsp'; export interface IForeignCodeExtractorsRegistry { [host_language: string]: IForeignCodeExtractor[]; diff --git a/packages/jupyterlab-lsp/src/feature.ts b/packages/jupyterlab-lsp/src/feature.ts index bb575f52a..19447ab7e 100644 --- a/packages/jupyterlab-lsp/src/feature.ts +++ b/packages/jupyterlab-lsp/src/feature.ts @@ -1,59 +1,8 @@ -import { CodeEditor } from '@jupyterlab/codeeditor'; -import { IDocumentWidget } from '@jupyterlab/docregistry'; +import { IFeature, ILSPDocumentConnectionManager } from '@jupyterlab/lsp'; import { ISettingRegistry } from '@jupyterlab/settingregistry'; -import { TranslationBundle } from '@jupyterlab/translation'; -import { LabIcon } from '@jupyterlab/ui-components'; import { PromiseDelegate } from '@lumino/coreutils'; import { Signal } from '@lumino/signaling'; - -import { StatusMessage, WidgetAdapter } from './adapters/adapter'; -import { CommandEntryPoint, ICommandContext } from './command_manager'; -import { LSPConnection } from './connection'; -import { ClientCapabilities } from './lsp'; -import { IRootPosition } from './positioning'; -import { VirtualDocument } from './virtual/document'; -import { IEditorChange, IVirtualEditor } from './virtual/editor'; - -import IEditor = CodeEditor.IEditor; - -export interface IFeatureCommand { - /** - * The command id; it will be prepended with 'lsp' prefix. - * To support multiple attachment points, multiple actual commands will be created, - * identified by an attachment-point-specific suffix. - */ - id: string; - /** - * Execute callback, will be called when users executes the command. - * @param context - */ - execute: (context: ICommandContext) => void; - /** - * A callback to check whether the command is available in given context. - * @param context - */ - is_enabled: (context: ICommandContext) => boolean; - /** - * The user-facing name of the command. - */ - label: string; - /** - * Default infinity (unassigned) if absolute, otherwise 0 (for relative ranks) - */ - rank?: number; - /** - * Does the rank represent relative position in the LSP commands group? (default: true) - */ - is_rank_relative?: boolean; - /** - * By default the command will be attached to context menus of each adapter. - */ - attach_to?: Set; - /** - * The icon to be displayed next to the label. - */ - icon?: LabIcon; -} +import * as lsProtocol from 'vscode-languageserver-protocol'; export interface IFeatureSettings { readonly composite: Required; @@ -63,6 +12,26 @@ export interface IFeatureSettings { set(setting: keyof T, value: any): void; } +export namespace Feature { + export interface IOptions { + connectionManager: ILSPDocumentConnectionManager; + } +} + +export abstract class Feature implements IFeature { + abstract readonly id: string; + abstract readonly capabilities?: lsProtocol.ClientCapabilities; + protected connectionManager: ILSPDocumentConnectionManager; + + constructor(options: Feature.IOptions) { + this.connectionManager = options.connectionManager; + } + + //getConnection(): ILSPConnection { + + //} +} + export class FeatureSettings implements IFeatureSettings { protected settings: ISettingRegistry.ISettings; public changed: Signal, void>; @@ -102,122 +71,3 @@ export class FeatureSettings implements IFeatureSettings { this.settings.set(setting as string, value).catch(console.warn); } } - -/** - * Names of the supported editors. - */ -export type IEditorName = string; - -export interface IFeature { - /** - * The feature identifier. It must be the same as the feature plugin id. - */ - id: string; - /** - * The user-readable name of the feature. - */ - name: string; - /** - * Each feature can be written in mind with support for one or more editors. - * Separate editor integration implementations should be provided for each supported editor. - * - * Currently only CodeMirrorEditor is supported. - */ - editorIntegrationFactory: Map< - IEditorName, - IFeatureEditorIntegrationConstructor> - >; - /** - * LSP capabilities implemented by the feature. - */ - capabilities?: ClientCapabilities; - /** - * Command specification, including context menu placement options. - */ - commands?: Array; - /** - * Objects implementing JupyterLab-specific integration, - * for example, adding new GUI elements such as hover tooltips or replacing completer. - * - * It can be accessed from the FeatureEditorIntegration object - * constructor using (options: IEditorIntegrationOptions).feature. - */ - labIntegration?: IFeatureLabIntegration; - /** - * Settings to be passed to the FeatureEditorIntegration. - * To use the same settings for lab integration bind the same FeatureSettings object to the labIntegration object. - */ - settings?: IFeatureSettings; -} - -export interface IFeatureEditorIntegration> { - /** - * Stores registration confirmation and should be set to true once register() - * is successfully called (and false beforehand) - */ - is_registered: boolean; - /** - * The reference to the Feature (it will be provided in the constructor options; - * the implementations should expose them as public so that the specific features - * can access their settings and metadata). - */ - feature: IFeature; - /** - * Connect event handlers to the editor, virtual document and connection(s). - */ - register(): void; - /** - * Remove the event handlers. - */ - remove(): void; - /** - * A callback which is executed after a change in the virtual document has been - * recorded and the document positions were recalculated; this is different from - * observing value changes in the underlying editor implementation itself (e.g. in - * the CodeMirror.Editor) as the direct listening to the events does not guarantee - * that the appropriate changes were reflected in the virtual document at the point - * the listeners were reached (thus not using afterChange() when needed may lead to - * position transformation errors). - */ - afterChange?(change: IEditorChange, root_position: IRootPosition): void; - - /** no-unused-vars rule is hard to disable selectively */ - __unused_editor_?: T; -} - -export interface IFeatureEditorIntegrationConstructor< - T extends IVirtualEditor -> { - new (options: IEditorIntegrationOptions): IFeatureEditorIntegration; -} - -export interface IEditorIntegrationOptions { - feature: IFeature; - /** - * Provides the editor-implementation-specific methods; - * is NOT aware of existence of cells or multiple editors - */ - virtual_editor: IVirtualEditor; - /** - * Provides an abstraction of continuous document, - * regardless of the actual underlying model or GUI display - * (even if it is a notebook, it can be viewed as a continuous document). - * Is aware of the document potentially having multiple editors (blocks), - * but is NOT aware of the actual editor-implementation (such as CodeMirror). - */ - virtual_document: VirtualDocument; - /** - * Interfaces with the relevant JupyterLab widget, such as Notebook or FileEditor. - * Is aware of existence of cells in notebook (exposed as multiple editors), - * but is NOT aware of editor-implementation details (such as existence of CodeMirror). - */ - adapter: WidgetAdapter; - connection: LSPConnection; - status_message: StatusMessage; - settings: IFeatureSettings; - trans: TranslationBundle; -} - -export interface IFeatureLabIntegration { - settings?: IFeatureSettings; -} diff --git a/packages/jupyterlab-lsp/src/features/completion/completion.ts b/packages/jupyterlab-lsp/src/features/completion/completion.ts deleted file mode 100644 index 81c351420..000000000 --- a/packages/jupyterlab-lsp/src/features/completion/completion.ts +++ /dev/null @@ -1,453 +0,0 @@ -import { ILSPCompletionThemeManager } from '@jupyter-lsp/completion-theme'; -import { JupyterFrontEnd } from '@jupyterlab/application'; -import { CodeEditor } from '@jupyterlab/codeeditor'; -import { - CompletionHandler, - ICompletionManager, - CompleterModel -} from '@jupyterlab/completer'; -import { IDocumentWidget } from '@jupyterlab/docregistry'; -import { NotebookPanel } from '@jupyterlab/notebook'; -import { IRenderMimeRegistry } from '@jupyterlab/rendermime'; -import type * as CodeMirror from 'codemirror'; - -import { CodeCompletion as LSPCompletionSettings } from '../../_completion'; -import { IEditorChangedData, WidgetAdapter } from '../../adapters/adapter'; -import { NotebookAdapter } from '../../adapters/notebook/notebook'; -import { IDocumentConnectionData } from '../../connection_manager'; -import { CodeMirrorIntegration } from '../../editor_integration/codemirror'; -import { FeatureSettings, IFeatureLabIntegration } from '../../feature'; -import { - AdditionalCompletionTriggerKinds, - CompletionTriggerKind, - ExtendedCompletionTriggerKind -} from '../../lsp'; -import { ILSPAdapterManager, ILSPLogConsole } from '../../tokens'; - -import { LSPConnector } from './completion_handler'; -import { LazyCompletionItem } from './item'; -import { LSPCompleterModel } from './model'; -import { ICompletionData, LSPCompletionRenderer } from './renderer'; - -const DOC_PANEL_SELECTOR = '.jp-Completer-docpanel'; -const DOC_PANEL_PLACEHOLDER_CLASS = 'lsp-completer-placeholder'; -const LSP_COMPLETER_CLASS = 'lsp-completer'; -const LSP_COMPLETER_ENABLED_CLASS = 'lsp-completer-enabled'; - -export class CompletionCM extends CodeMirrorIntegration { - private _completionCharacters: string[]; - - get settings() { - return super.settings as FeatureSettings; - } - - get completionCharacters() { - if ( - this._completionCharacters == null || - !this._completionCharacters.length - ) { - this._completionCharacters = - this.connection.getLanguageCompletionCharacters(); - } - return this._completionCharacters; - } - - // public handleCompletion(completions: lsProtocol.CompletionItem[]) { - // TODO: populate the (already displayed) completions list if the completions timed out initially? - // } - - afterChange(change: CodeMirror.EditorChange): void { - // TODO: maybe the completer could be kicked off in the handleChange() method directly; signature help still - // requires an up-to-date virtual document on the LSP side, so we need to wait for sync. - - // note: trigger character completion need to be have a higher priority than auto-invoked completion - // because the latter does not work for on-dot completion due to suppression of trivial suggestions - // see gh430 - let last_character = this.extract_last_character(change); - if (this.completionCharacters.indexOf(last_character) > -1) { - this.virtual_editor.console.log( - 'Will invoke completer after', - last_character - ); - (this.feature.labIntegration as CompletionLabIntegration) - .invoke_completer(CompletionTriggerKind.TriggerCharacter) - .catch(this.console.warn); - return; - } - - if ( - change.text && - change.text[0].length == 1 && - this.settings.composite.continuousHinting - ) { - (this.feature.labIntegration as CompletionLabIntegration) - .invoke_completer(AdditionalCompletionTriggerKinds.AutoInvoked) - .catch(this.console.warn); - } - } -} - -export class CompletionLabIntegration implements IFeatureLabIntegration { - // TODO: maybe instead of creating it each time, keep a hash map instead? - protected current_completion_connector: LSPConnector; - protected current_completion_handler: CompletionHandler; - protected current_adapter: WidgetAdapter | null = null; - protected renderer: LSPCompletionRenderer; - private _latestActiveItem: LazyCompletionItem | null = null; - private _signalConnected: boolean = false; - private _disabled: boolean; - - constructor( - private app: JupyterFrontEnd, - private completionManager: ICompletionManager, - public settings: FeatureSettings, - private adapterManager: ILSPAdapterManager, - private completionThemeManager: ILSPCompletionThemeManager, - private console: ILSPLogConsole, - private renderMimeRegistry: IRenderMimeRegistry - ) { - const markdown_renderer = - this.renderMimeRegistry.createRenderer('text/markdown'); - this.renderer = new LSPCompletionRenderer({ - integrator: this, - markdownRenderer: markdown_renderer, - latexTypesetter: this.renderMimeRegistry.latexTypesetter, - console: console.scope('renderer') - }); - this.renderer.activeChanged.connect(this.active_completion_changed, this); - this.renderer.itemShown.connect(this.resolve_and_update, this); - this._signalConnected = false; - this._disabled = false; - // TODO: figure out a better way to disable lab integration elements (postpone initialization?) - settings.ready - .then(() => { - this._disabled = settings.composite.disable; - if (!settings.composite.disable) { - adapterManager.adapterChanged.connect(this.swap_adapter, this); - this._signalConnected = true; - } - }) - .catch(console.warn); - - settings.changed.connect(() => { - this._disabled = settings.composite.disable; - if (!settings.composite.disable) { - document.body.dataset.lspCompleterLayout = - this.settings.composite.layout; - completionThemeManager.set_theme(this.settings.composite.theme); - completionThemeManager.set_icons_overrides( - this.settings.composite.typesMap - ); - if (!this._signalConnected) { - adapterManager.adapterChanged.connect(this.swap_adapter, this); - this._signalConnected = true; - } - } else { - completionThemeManager.set_theme(null); - delete document.body.dataset.lspCompleterLayout; - } - if ( - this.current_completion_handler && - this.model instanceof LSPCompleterModel - ) { - this.model.settings.caseSensitive = - this.settings.composite.caseSensitive; - this.model.settings.includePerfectMatches = - this.settings.composite.includePerfectMatches; - this.model.settings.preFilterMatches = - this.settings.composite.preFilterMatches; - } - }); - } - - protected fetchDocumentation(item: LazyCompletionItem): void { - if (!item) { - return; - } - item - .resolve() - .then(resolvedCompletionItem => { - if (item.self !== this._latestActiveItem!.self) { - return; - } - this.set_doc_panel_placeholder(false); - if (resolvedCompletionItem === null) { - return; - } - this.refresh_doc_panel(item); - }) - .catch(e => { - // disabling placeholder can remove currently displayed documentation, - // so only do that if this is really the active item! - if (item.self === this._latestActiveItem!.self) { - this.set_doc_panel_placeholder(false); - } - this.console.warn(e); - }); - } - - active_completion_changed( - renderer: LSPCompletionRenderer, - active_completion: ICompletionData - ) { - let { item } = active_completion; - this._latestActiveItem = item; - if (!item.supportsResolution()) { - if (item.isDocumentationMarkdown) { - // TODO: remove once https://github.com/jupyterlab/jupyterlab/pull/9663 is merged and released - this.refresh_doc_panel(item); - } - return; - } - - if (item.needsResolution()) { - this.set_doc_panel_placeholder(true); - this.fetchDocumentation(item); - } else if (item.isResolved()) { - this.refresh_doc_panel(item); - } else { - // resolution has already started, but the re-render update could have been invalidated - // by user action, so let's ensure the documentation will get shown this time. - this.fetchDocumentation(item); - } - - // also fetch completion for the previous and the next item to prevent jitter - const index = this.current_index; - const items = this.current_items; - - if (index - 1 >= 0) { - const previous = items[index - 1] as LazyCompletionItem; - this.resolve_and_update_from_item(previous?.self); - } - if (index + 1 < items.length) { - const next = items[index + 1] as LazyCompletionItem; - this.resolve_and_update_from_item(next?.self); - } - } - - private resolve_and_update_from_item(item: LazyCompletionItem) { - if (!item) { - return; - } - this.resolve_and_update(this.renderer, { - item: item, - element: item.element - }); - } - - private resolve_and_update( - renderer: LSPCompletionRenderer, - active_completion: ICompletionData - ) { - let { item, element } = active_completion; - if (!item.supportsResolution()) { - this.renderer.updateExtraInfo(item, element); - return; - } - - if (item.isResolved()) { - this.renderer.updateExtraInfo(item, element); - } else { - // supportsResolution as otherwise would short-circuit above - item - .resolve() - .then(resolvedCompletionItem => { - this.renderer.updateExtraInfo(item, element); - }) - .catch(e => { - this.console.warn(e); - }); - } - } - - private swap_adapter( - manager: ILSPAdapterManager, - adapter: WidgetAdapter - ) { - if (this.current_adapter) { - // disconnect signals from the old adapter - this.current_adapter.activeEditorChanged.disconnect( - this.set_connector, - this - ); - this.current_adapter.adapterConnected.disconnect( - this.connect_completion, - this - ); - } - this.current_adapter = adapter; - // connect the new adapter - if (this.current_adapter.isConnected) { - this.connect_completion(this.current_adapter); - // TODO: what to do if adapter.activeEditor was just deleted/there is none because focus shifted? - this.set_connector(adapter, { editor: adapter.activeEditor! }); - } - // connect signals to the new adapter - this.current_adapter.activeEditorChanged.connect(this.set_connector, this); - this.current_adapter.adapterConnected.connect( - this.connect_completion, - this - ); - } - - connect_completion( - adapter: WidgetAdapter, - data?: IDocumentConnectionData - ) { - let editor = adapter.activeEditor; - if (editor == null) { - return; - } - this.set_completion_connector(adapter, editor); - this.current_completion_handler = this.completionManager.register( - { - connector: this.current_completion_connector, - editor: editor, - parent: adapter.widget - }, - this.renderer - ) as CompletionHandler; - let completer = this.completer; - if (this._disabled) { - completer.removeClass(LSP_COMPLETER_CLASS); - completer.model = new CompleterModel(); - } else { - completer.addClass(LSP_COMPLETER_CLASS); - completer.model = new LSPCompleterModel({ - caseSensitive: this.settings.composite.caseSensitive, - includePerfectMatches: this.settings.composite.includePerfectMatches, - preFilterMatches: this.settings.composite.preFilterMatches - }); - } - } - - protected get completer() { - // TODO upstream: make completer public? - return this.current_completion_handler.completer; - } - - protected get model(): LSPCompleterModel | CompleterModel { - return this.completer.model as LSPCompleterModel | CompleterModel; - } - - invoke_completer(kind: ExtendedCompletionTriggerKind) { - // TODO: ideally this would not re-trigger if list of items not isIncomplete - let command: string; - this.current_completion_connector.trigger_kind = kind; - - if (this.adapterManager.currentAdapter instanceof NotebookAdapter) { - command = 'completer:invoke-notebook'; - } else { - command = 'completer:invoke-file'; - } - return this.app.commands.execute(command).catch(() => { - this.current_completion_connector.trigger_kind = - CompletionTriggerKind.Invoked; - }); - } - - set_connector( - adapter: WidgetAdapter, - editor_changed: IEditorChangedData - ) { - if (!this.current_completion_handler) { - // workaround for current_completion_handler not being there yet - this.connect_completion(adapter); - } - this.set_completion_connector(adapter, editor_changed.editor); - this.current_completion_handler.editor = editor_changed.editor; - // eslint-disable-next-line @typescript-eslint/ban-ts-comment - // @ts-ignore - this.current_completion_handler.connector = - this.current_completion_connector; - } - - private get current_items() { - // TODO upstream: allow to get completionItems() without markup - // (note: not trivial as _markup() does filtering too) - if (!(this.model instanceof LSPCompleterModel)) { - return []; - } - return this.model.completionItems(); - } - - private get current_index() { - let completer = this.current_completion_handler.completer; - - // TODO: use public activeIndex available since 3.1 - // eslint-disable-next-line @typescript-eslint/ban-ts-comment - // @ts-ignore - return completer._activeIndex; - } - - refresh_doc_panel(item: LazyCompletionItem) { - let completer = this.current_completion_handler.completer; - - const active: CompletionHandler.ICompletionItem = - this.current_items[this.current_index]; - - if (!item || !active || active.insertText != item.insertText) { - return; - } - - const docPanel = completer.node.querySelector(DOC_PANEL_SELECTOR); - if (!docPanel) { - this.console.warn('Could not find completer panel to refresh'); - return; - } - docPanel.classList.remove(DOC_PANEL_PLACEHOLDER_CLASS); - - if (item.documentation) { - // remove all children - docPanel.textContent = ''; - // TODO upstream: renderer should take care of the documentation rendering - // sent PR: https://github.com/jupyterlab/jupyterlab/pull/9663 - - const node = this.renderer.createDocumentationNode(item); - docPanel.appendChild(node); - - docPanel.setAttribute('style', ''); - } else { - docPanel.setAttribute('style', 'display: none'); - } - } - - set_doc_panel_placeholder(enable: boolean): void { - let completer = this.current_completion_handler.completer; - const docPanel = completer.node.querySelector(DOC_PANEL_SELECTOR); - if (!docPanel) { - this.console.warn('Could not find completer panel for placeholder'); - return; - } - if (enable) { - docPanel.setAttribute('style', ''); - docPanel.classList.add(DOC_PANEL_PLACEHOLDER_CLASS); - } else if (docPanel.classList.contains(DOC_PANEL_PLACEHOLDER_CLASS)) { - docPanel.setAttribute('style', 'display: none'); - docPanel.classList.remove(DOC_PANEL_PLACEHOLDER_CLASS); - } - } - - private set_completion_connector( - adapter: WidgetAdapter, - editor: CodeEditor.IEditor - ) { - this.current_completion_connector = new LSPConnector({ - editor: editor, - themeManager: this.completionThemeManager, - connections: this.current_adapter!.connection_manager.connections, - virtual_editor: this.current_adapter!.virtual_editor, - settings: this.settings, - labIntegration: this, - // it might or might not be a notebook panel (if it is not, the sessionContext and session will just be undefined) - session: (this.current_adapter!.widget as NotebookPanel)?.sessionContext - ?.session, - console: this.console - }); - if (this._disabled) { - editor.host.classList.remove(LSP_COMPLETER_ENABLED_CLASS); - } else { - editor.host.classList.add(LSP_COMPLETER_ENABLED_CLASS); - } - } -} diff --git a/packages/jupyterlab-lsp/src/features/completion/completion_handler.spec.ts b/packages/jupyterlab-lsp/src/features/completion/completion_handler.spec.ts deleted file mode 100644 index 537323494..000000000 --- a/packages/jupyterlab-lsp/src/features/completion/completion_handler.spec.ts +++ /dev/null @@ -1,87 +0,0 @@ -import { CodeEditor } from '@jupyterlab/codeeditor'; -import { expect } from 'chai'; -import type * as lsProtocol from 'vscode-languageserver-types'; - -import { BrowserConsole } from '../../virtual/console'; - -import { transformLSPCompletions } from './completion_handler'; - -describe('transformLSPCompletions', () => { - const browserConsole = new BrowserConsole(); - - const transform = ( - token: CodeEditor.IToken, - position: number, - completions: lsProtocol.CompletionItem[] - ) => { - return transformLSPCompletions( - token, - position, - completions, - (kind: string, match: lsProtocol.CompletionItem) => { - return { kind, match }; - }, - browserConsole - ); - }; - - it('Harmonizes `insertText` from `undefined` when adjusting path-like completions', () => { - // `import { } from '@lumino/'` - const result = transform( - { - offset: 16, - value: "'@lumino/'", - type: 'string' - }, - 8, - [ - { - label: 'algorithm', - kind: 19, - sortText: '1', - data: { - entryNames: ['algorithm'] - } - }, - { - label: 'application', - kind: 19, - sortText: '1', - data: { - entryNames: ['application'] - } - } - ] - ); - expect(result.items.length).to.equal(2); - // insert text should keep `'` as it was part of original token - expect(result.items[0].match.insertText).to.equal("'@lumino/algorithm"); - // label should not include `'` - expect(result.items[0].match.label).to.equal('@lumino/algorithm'); - expect(result.source.name).to.equal('LSP'); - }); - - it('Harmonizes `insertText` for paths', () => { - // `'./Hov` - const result = transform( - { - offset: 0, - value: "'./Hov", - type: 'string' - }, - 5, - [ - { - label: "Hover.ipynb'", - kind: 17, - sortText: "aHover.ipynb'", - insertText: "Hover.ipynb'" - } - ] - ); - // insert text should keep `'` as it was part of original token - expect(result.items[0].match.insertText).to.equal("'./Hover.ipynb'"); - // label should not include initial `'` - expect(result.items[0].match.label).to.equal("./Hover.ipynb'"); - }); -}); diff --git a/packages/jupyterlab-lsp/src/features/completion/completion_handler.ts b/packages/jupyterlab-lsp/src/features/completion/completion_handler.ts deleted file mode 100644 index a973e6e14..000000000 --- a/packages/jupyterlab-lsp/src/features/completion/completion_handler.ts +++ /dev/null @@ -1,729 +0,0 @@ -import { - ILSPCompletionThemeManager, - KernelKind -} from '@jupyter-lsp/completion-theme'; -import { CodeEditor } from '@jupyterlab/codeeditor'; -import { - CompletionConnector, - CompletionHandler, - ContextConnector, - KernelConnector -} from '@jupyterlab/completer'; -import { Session } from '@jupyterlab/services'; -import { LabIcon } from '@jupyterlab/ui-components'; -import { JSONArray, JSONObject } from '@lumino/coreutils'; -import type * as lsProtocol from 'vscode-languageserver-types'; - -import { CodeCompletion as LSPCompletionSettings } from '../../_completion'; -import { LSPConnection } from '../../connection'; -import { PositionConverter } from '../../converter'; -import { FeatureSettings } from '../../feature'; -import { - AdditionalCompletionTriggerKinds, - CompletionItemKind, - CompletionTriggerKind, - ExtendedCompletionTriggerKind -} from '../../lsp'; -import { - IEditorPosition, - IRootPosition, - IVirtualPosition -} from '../../positioning'; -import { ILSPLogConsole } from '../../tokens'; -import { VirtualDocument } from '../../virtual/document'; -import { IVirtualEditor } from '../../virtual/editor'; - -import { CompletionLabIntegration } from './completion'; -import { - ICompletionsSource, - IExtendedCompletionItem, - LazyCompletionItem -} from './item'; - -import ICompletionItemsResponseType = CompletionHandler.ICompletionItemsResponseType; - -/** - * Completion items reply from a specific source - */ -export interface ICompletionsReply - extends CompletionHandler.ICompletionItemsReply { - // TODO: it is not clear when the source is set here and when on IExtendedCompletionItem. - // it might be good to separate the two stages for both interfaces - source: ICompletionsSource | null; - items: IExtendedCompletionItem[]; -} - -export function transformLSPCompletions( - token: CodeEditor.IToken, - position_in_token: number, - lspCompletionItems: lsProtocol.CompletionItem[], - createCompletionItem: (kind: string, match: lsProtocol.CompletionItem) => T, - console: ILSPLogConsole -) { - let prefix = token.value.slice(0, position_in_token + 1); - let all_non_prefixed = true; - let items: T[] = []; - lspCompletionItems.forEach(match => { - let kind = match.kind ? CompletionItemKind[match.kind] : ''; - - // Update prefix values - let text = match.insertText ? match.insertText : match.label; - - // declare prefix presence if needed and update it - if (text.toLowerCase().startsWith(prefix.toLowerCase())) { - all_non_prefixed = false; - if (prefix !== token.value) { - if (text.toLowerCase().startsWith(token.value.toLowerCase())) { - // given a completion insert text "display_table" and two test cases: - // dispdata → display_tabledata - // display → display_table - // we have to adjust the prefix for the latter (otherwise we would get display_tablelay), - // as we are constrained NOT to replace after the prefix (which would be "disp" otherwise) - prefix = token.value; - } - } - } - // add prefix if needed - else if (token.type === 'string' && prefix.includes('/')) { - // special case for path completion in strings, ensuring that: - // '/Com → '/Completion.ipynb - // when the returned insert text is `Completion.ipynb` (the token here is `'/Com`) - // developed against pyls and pylsp server, may not work well in other cases - const parts = prefix.split('/'); - if ( - text.toLowerCase().startsWith(parts[parts.length - 1].toLowerCase()) - ) { - let pathPrefix = parts.slice(0, -1).join('/') + '/'; - match.insertText = pathPrefix + text; - // for label removing the prefix quote if present - if (pathPrefix.startsWith("'") || pathPrefix.startsWith('"')) { - pathPrefix = pathPrefix.substr(1); - } - match.label = pathPrefix + match.label; - all_non_prefixed = false; - } - } - - let completionItem = createCompletionItem(kind, match); - - items.push(completionItem); - }); - console.debug('Transformed'); - // required to make the repetitive trigger characters like :: or ::: work for R with R languageserver, - // see https://github.com/jupyter-lsp/jupyterlab-lsp/issues/436 - let prefix_offset = token.value.length; - // completion of dictionaries for Python with jedi-language-server was - // causing an issue for dic[''] case; to avoid this let's make - // sure that prefix.length >= prefix.offset - if (all_non_prefixed && prefix_offset > prefix.length) { - prefix_offset = prefix.length; - } - - let response = { - // note in the ContextCompleter it was: - // start: token.offset, - // end: token.offset + token.value.length, - // which does not work with "from statistics import " as the last token ends at "t" of "import", - // so the completer would append "mean" as "from statistics importmean" (without space!); - // (in such a case the typedCharacters is undefined as we are out of range) - // a different workaround would be to prepend the token.value prefix: - // text = token.value + text; - // but it did not work for "from statistics " and lead to "from statisticsimport" (no space) - start: token.offset + (all_non_prefixed ? prefix_offset : 0), - end: token.offset + prefix.length, - items: items, - source: { - name: 'LSP', - priority: 2 - } - }; - if (response.start > response.end) { - console.warn( - 'Response contains start beyond end; this should not happen!', - response - ); - } - return response; -} - -/** - * A LSP connector for completion handlers. - */ -export class LSPConnector - implements CompletionHandler.ICompletionItemsConnector -{ - isDisposed = false; - private _editor: CodeEditor.IEditor; - private _connections: Map; - private _context_connector: ContextConnector; - private _kernel_connector: KernelConnector; - private _kernel_and_context_connector: CompletionConnector; - private console: ILSPLogConsole; - - // signal that this is the new type connector (providing completion items) - responseType = ICompletionItemsResponseType; - - virtual_editor: IVirtualEditor; - trigger_kind: ExtendedCompletionTriggerKind; - lab_integration: CompletionLabIntegration; - items: CompletionHandler.ICompletionItems; - - get kernel_completions_first(): boolean { - return this.options.settings.composite.kernelCompletionsFirst; - } - - protected get use_lsp_completions(): boolean { - return ( - this.options.settings.composite.disableCompletionsFrom.indexOf('LSP') == - -1 - ); - } - - protected get use_kernel_completions(): boolean { - return ( - this.options.settings.composite.disableCompletionsFrom.indexOf( - 'Kernel' - ) == -1 - ); - } - - protected get suppress_continuous_hinting_in(): string[] { - return this.options.settings.composite.suppressContinuousHintingIn; - } - - protected get suppress_trigger_character_in(): string[] { - return this.options.settings.composite.suppressTriggerCharacterIn; - } - - get should_show_documentation(): boolean { - return this.options.settings.composite.showDocumentation; - } - - /** - * Create a new LSP connector for completion requests. - * - * @param options - The instantiation options for the LSP connector. - */ - constructor(protected options: LSPConnector.IOptions) { - this._editor = options.editor; - this._connections = options.connections; - this.virtual_editor = options.virtual_editor; - this._context_connector = new ContextConnector({ editor: options.editor }); - if (options.session) { - let kernel_options = { editor: options.editor, session: options.session }; - this._kernel_connector = new KernelConnector(kernel_options); - this._kernel_and_context_connector = new CompletionConnector( - kernel_options - ); - } - this.lab_integration = options.labIntegration; - this.console = options.console; - } - - dispose() { - if (this.isDisposed) { - return; - } - this._connections = null as any; - this.virtual_editor = null as any; - this._context_connector = null as any; - this._kernel_connector = null as any; - this._kernel_and_context_connector = null as any; - this.options = null as any; - this._editor = null as any; - this.isDisposed = true; - } - - protected get _has_kernel(): boolean { - return this.options.session?.kernel != null; - } - - protected get _is_kernel_idle(): boolean { - return this.options.session?.kernel?.status == 'idle'; - } - - protected get _should_wait_for_busy_kernel(): boolean { - return this.lab_integration.settings.composite.waitForBusyKernel; - } - - protected async _kernel_language(): Promise { - return (await this.options.session!.kernel!.info).language_info.name; - } - - protected get _kernel_timeout(): number { - return this.lab_integration.settings.composite.kernelResponseTimeout; - } - - get fallback_connector() { - return this._kernel_and_context_connector - ? this._kernel_and_context_connector - : this._context_connector; - } - - protected transform_from_editor_to_root( - position: CodeEditor.IPosition - ): IRootPosition { - let editor_position = PositionConverter.ce_to_cm( - position - ) as IEditorPosition; - return this.virtual_editor.transform_from_editor_to_root( - this._editor, - editor_position - )!; - } - - /** - * Fetch completion requests. - * - * @param request - The completion request text and details. - */ - async fetch( - request: CompletionHandler.IRequest - ): Promise { - let editor = this._editor; - - const cursor = editor.getCursorPosition(); - const token = editor.getTokenForPosition(cursor); - - if (this.trigger_kind == AdditionalCompletionTriggerKinds.AutoInvoked) { - if ( - token.type && - this.suppress_continuous_hinting_in.indexOf(token.type) !== -1 - ) { - this.console.debug('Suppressing completer auto-invoke in', token.type); - this.trigger_kind = CompletionTriggerKind.Invoked; - return; - } - } else if (this.trigger_kind == CompletionTriggerKind.TriggerCharacter) { - if ( - token.type && - this.suppress_trigger_character_in.indexOf(token.type) !== -1 - ) { - this.console.debug('Suppressing completer auto-invoke in', token.type); - this.trigger_kind = CompletionTriggerKind.Invoked; - return; - } - } - - const start = editor.getPositionAt(token.offset)!; - const end = editor.getPositionAt(token.offset + token.value.length)!; - - let position_in_token = cursor.column - start.column - 1; - const typed_character = token.value[cursor.column - start.column - 1]; - - let start_in_root = this.transform_from_editor_to_root(start); - let end_in_root = this.transform_from_editor_to_root(end); - let cursor_in_root = this.transform_from_editor_to_root(cursor); - - let virtual_editor = this.virtual_editor; - - // find document for position - let document = virtual_editor.document_at_root_position(start_in_root); - - let virtual_start = - virtual_editor.root_position_to_virtual_position(start_in_root); - let virtual_end = - virtual_editor.root_position_to_virtual_position(end_in_root); - let virtual_cursor = - virtual_editor.root_position_to_virtual_position(cursor_in_root); - const lsp_promise: Promise< - CompletionHandler.ICompletionItemsReply | undefined - > = this.use_lsp_completions - ? this.fetch_lsp( - token, - typed_character, - virtual_start, - virtual_end, - virtual_cursor, - document, - position_in_token - ) - : Promise.resolve(undefined); - - let promise: Promise< - CompletionHandler.ICompletionItemsReply | undefined - > | null = null; - - try { - const kernelTimeout = this._kernel_timeout; - - if ( - this.use_kernel_completions && - this._kernel_connector && - this._has_kernel && - (this._is_kernel_idle || this._should_wait_for_busy_kernel) && - kernelTimeout != 0 - ) { - // TODO: this would be awesome if we could connect to rpy2 for R suggestions in Python, - // but this is not the job of this extension; nevertheless its better to keep this in - // mind to avoid introducing design decisions which would make this impossible - // (for other extensions) - - // TODO: should it be cashed? - const kernelLanguage = await this._kernel_language(); - - if ( - document.language.toLocaleLowerCase() === kernelLanguage.toLowerCase() - ) { - let default_kernel_promise = this._kernel_connector.fetch(request); - let kernel_promise: Promise; - - if (kernelTimeout == -1) { - kernel_promise = default_kernel_promise; - } else { - // implement timeout for the kernel response using Promise.race: - // an empty completion result will resolve after the timeout - // if actual kernel response does not beat it to it - kernel_promise = Promise.race([ - default_kernel_promise, - new Promise(resolve => { - return setTimeout( - () => - resolve({ - start: 0, - end: 0, - matches: [], - metadata: {} - }), - kernelTimeout - ); - }) - ]); - } - - promise = Promise.all([ - kernel_promise.catch(p => p), - lsp_promise.catch(p => p) - ]).then(([kernel, lsp]) => { - let replies = []; - if (kernel != null) { - replies.push(this.transform_reply(kernel)); - } - if (lsp != null) { - replies.push(lsp); - } - return this.merge_replies(replies, this._editor); - }); - } - } - if (!promise) { - promise = lsp_promise.catch(e => { - this.console.warn('hint failed', e); - return this.fallback_connector - .fetch(request) - .then(this.transform_reply); - }); - } - } catch (e) { - this.console.warn('kernel completions failed', e); - promise = this.fallback_connector - .fetch(request) - .then(this.transform_reply); - } - - this.console.debug('All promises set up and ready.'); - return promise.then(reply => { - reply = this.suppress_if_needed(reply, token, cursor); - if (reply) { - this.items = reply.items; - } - this.trigger_kind = CompletionTriggerKind.Invoked; - return reply; - }); - } - - public get_connection(uri: string) { - return this._connections.get(uri); - } - - async fetch_lsp( - token: CodeEditor.IToken, - typed_character: string, - start: IVirtualPosition, - end: IVirtualPosition, - cursor: IVirtualPosition, - document: VirtualDocument, - position_in_token: number - ): Promise { - let connection = this.get_connection(document.uri)!; - - this.console.debug('Fetching'); - this.console.debug('Token:', token, start, end); - - const trigger_kind = - this.trigger_kind == AdditionalCompletionTriggerKinds.AutoInvoked - ? CompletionTriggerKind.Invoked - : this.trigger_kind; - - let lspCompletionItems = ((await connection.getCompletion( - cursor, - { - start, - end, - text: token.value - }, - document.document_info, - false, - typed_character, - trigger_kind - )) || []) as lsProtocol.CompletionItem[]; - - this.console.debug('Transforming'); - - return transformLSPCompletions( - token, - position_in_token, - lspCompletionItems, - (kind, match) => - new LazyCompletionItem( - kind, - this.icon_for(kind), - match, - this, - document.uri - ), - this.console - ); - } - - protected icon_for(type: string): LabIcon { - if (typeof type === 'undefined') { - type = KernelKind; - } - return (this.options.themeManager.get_icon(type) as LabIcon) || undefined; - } - - private transform_reply(reply: CompletionHandler.IReply): ICompletionsReply { - this.console.log('Transforming kernel reply:', reply); - let items: IExtendedCompletionItem[]; - const metadata = reply.metadata || {}; - const types = metadata._jupyter_types_experimental as JSONArray; - - if (types) { - items = types.map((item: JSONObject) => { - return { - label: item.text as string, - insertText: item.text as string, - type: item.type === '' ? undefined : (item.type as string), - icon: this.icon_for(item.type as string), - sortText: this.kernel_completions_first ? 'a' : 'z' - }; - }); - } else { - items = reply.matches.map(match => { - return { - label: match, - insertText: match, - sortText: this.kernel_completions_first ? 'a' : 'z' - }; - }); - } - return { - start: reply.start, - end: reply.end, - source: { - name: 'Kernel', - priority: 1, - fallbackIcon: this.icon_for('Kernel') - }, - items - }; - } - - protected merge_replies( - replies: ICompletionsReply[], - editor: CodeEditor.IEditor - ): ICompletionsReply { - this.console.debug('Merging completions:', replies); - - replies = replies.filter(reply => { - if (reply instanceof Error) { - this.console.warn( - `Caught ${reply.source!.name} completions error`, - reply - ); - return false; - } - // ignore if no matches - if (!reply.items.length) { - return false; - } - // otherwise keep - return true; - }); - - replies.sort((a, b) => b.source!.priority - a.source!.priority); - - this.console.debug('Sorted replies:', replies); - - const minEnd = Math.min(...replies.map(reply => reply.end)); - - // if any of the replies uses a wider range, we need to align them - // so that all responses use the same range - const minStart = Math.min(...replies.map(reply => reply.start)); - const maxStart = Math.max(...replies.map(reply => reply.start)); - - if (minStart != maxStart) { - const cursor = editor.getCursorPosition(); - const line = editor.getLine(cursor.line); - if (line == null) { - this.console.warn( - `Could not remove prefixes: line is undefined`, - cursor.line - ); - } else { - replies = replies.map(reply => { - // no prefix to strip, return as-is - if (reply.start == maxStart) { - return reply; - } - let prefix = line.substring(reply.start, maxStart); - this.console.debug(`Removing ${reply.source!.name} prefix: `, prefix); - return { - ...reply, - items: reply.items.map(item => { - item.insertText = item.insertText.startsWith(prefix) - ? item.insertText.substr(prefix.length) - : item.insertText; - return item; - }) - }; - }); - } - } - - const insertTextSet = new Set(); - const processedItems = new Array(); - - for (const reply of replies) { - reply.items.forEach(item => { - // trimming because: - // IPython returns 'import' and 'import '; while the latter is more useful, - // user should not see two suggestions with identical labels and nearly-identical - // behaviour as they could not distinguish the two either way - let text = item.insertText.trim(); - if (insertTextSet.has(text)) { - return; - } - insertTextSet.add(text); - // extra processing (adding icon/source name) is delayed until - // we are sure that the item will be kept (as otherwise it could - // lead to processing hundreds of suggestions - e.g. from numpy - // multiple times if multiple sources provide them). - let processedItem = item as IExtendedCompletionItem; - if (reply.source) { - processedItem.source = reply.source; - if (!processedItem.icon) { - processedItem.icon = reply.source.fallbackIcon; - } - } - processedItems.push(processedItem); - }); - } - - // Return reply with processed items. - this.console.debug('Merged: ', processedItems); - return { - start: maxStart, - end: minEnd, - source: null, - items: processedItems - }; - } - - list(query: string | undefined): Promise { - return Promise.resolve(undefined); - } - - remove(id: CompletionHandler.IRequest): Promise { - return Promise.resolve(undefined); - } - - save(id: CompletionHandler.IRequest, value: void): Promise { - return Promise.resolve(undefined); - } - - private suppress_if_needed( - reply: CompletionHandler.ICompletionItemsReply | undefined, - token: CodeEditor.IToken, - cursor_at_request: CodeEditor.IPosition - ) { - if (reply == null) { - return reply; - } - if (!this._editor.hasFocus()) { - this.console.debug( - 'Ignoring completion response: the corresponding editor lost focus' - ); - return { - start: reply.start, - end: reply.end, - items: [] - }; - } - - const cursor_now = this._editor.getCursorPosition(); - - // if the cursor advanced in the same line, the previously retrieved completions may still be useful - // if the line changed or cursor moved backwards then no reason to keep the suggestions - if ( - cursor_at_request.line != cursor_now.line || - cursor_now.column < cursor_at_request.column - ) { - this.console.debug( - 'Ignoring completion response: cursor has receded or changed line' - ); - return { - start: reply.start, - end: reply.end, - items: [] - }; - } - - if (this.trigger_kind == AdditionalCompletionTriggerKinds.AutoInvoked) { - if ( - // do not auto-invoke if no match found - reply.start == reply.end || - // do not auto-invoke if only one match found and this match is exactly the same as the current token - (reply.items.length === 1 && reply.items[0].insertText === token.value) - ) { - return { - start: reply.start, - end: reply.end, - items: [] - }; - } - } - return reply; - } -} - -/** - * A namespace for LSP connector statics. - */ -export namespace LSPConnector { - /** - * The instantiation options for cell completion handlers. - */ - export interface IOptions { - /** - * The editor used by the LSP connector. - */ - editor: CodeEditor.IEditor; - virtual_editor: IVirtualEditor; - /** - * The connections to be used by the LSP connector. - */ - connections: Map; - - settings: FeatureSettings; - - labIntegration: CompletionLabIntegration; - - themeManager: ILSPCompletionThemeManager; - - session?: Session.ISessionConnection | null; - - console: ILSPLogConsole; - } -} diff --git a/packages/jupyterlab-lsp/src/features/completion/index.ts b/packages/jupyterlab-lsp/src/features/completion/index.ts index 996a8247f..80ff47b6d 100644 --- a/packages/jupyterlab-lsp/src/features/completion/index.ts +++ b/packages/jupyterlab-lsp/src/features/completion/index.ts @@ -3,90 +3,133 @@ import { JupyterFrontEnd, JupyterFrontEndPlugin } from '@jupyterlab/application'; -import { ICompletionManager } from '@jupyterlab/completer'; +import { ICompletionProviderManager } from '@jupyterlab/completer'; +import { + ILSPFeatureManager, + ILSPDocumentConnectionManager +} from '@jupyterlab/lsp'; import { IRenderMimeRegistry } from '@jupyterlab/rendermime'; import { ISettingRegistry } from '@jupyterlab/settingregistry'; import { LabIcon } from '@jupyterlab/ui-components'; +import * as lsProtocol from 'vscode-languageserver-protocol'; import completionSvg from '../../../style/icons/completion.svg'; import { CodeCompletion as LSPCompletionSettings } from '../../_completion'; -import { FeatureSettings } from '../../feature'; +import { FeatureSettings, Feature } from '../../feature'; import { CompletionItemTag } from '../../lsp'; -import { - ILSPAdapterManager, - ILSPFeatureManager, - ILSPLogConsole, - PLUGIN_ID -} from '../../tokens'; +import { PLUGIN_ID } from '../../tokens'; -import { CompletionCM, CompletionLabIntegration } from './completion'; +import { + EnhancedContextCompleterProvider, + EnhancedKernelCompleterProvider +} from './overrides'; +import { CompletionProvider } from './provider'; export const completionIcon = new LabIcon({ name: 'lsp:completion', svgstr: completionSvg }); -const FEATURE_ID = PLUGIN_ID + ':completion'; +export class CompletionFeature extends Feature { + readonly id = CompletionFeature.id; + readonly capabilities: lsProtocol.ClientCapabilities = { + textDocument: { + completion: { + dynamicRegistration: true, + completionItem: { + snippetSupport: false, + commitCharactersSupport: true, + documentationFormat: ['markdown', 'plaintext'], + deprecatedSupport: true, + preselectSupport: false, + tagSupport: { + valueSet: [CompletionItemTag.Deprecated] + } + }, + contextSupport: true + } + } + }; + + constructor(protected options: CompletionFeature.IOptions) { + super(options); + this._configure(); + + options.settings.changed.connect(() => { + this._configure(); + }); + + const provider = new CompletionProvider({ ...options }); + options.completionProviderManager.registerProvider(provider); + options.completionProviderManager.registerProvider( + new EnhancedContextCompleterProvider(options) + ); + options.completionProviderManager.registerProvider( + new EnhancedKernelCompleterProvider(options) + ); + } + + private _configure() { + const settings = this.options.settings; + const completionThemeManager = this.options.iconsThemeManager; + + if (!settings.composite.disable) { + document.body.dataset.lspCompleterLayout = settings.composite.layout; + completionThemeManager.set_theme(settings.composite.theme); + completionThemeManager.set_icons_overrides(settings.composite.typesMap); + } else { + completionThemeManager.set_theme(null); + delete document.body.dataset.lspCompleterLayout; + } + } +} + +export namespace CompletionFeature { + export interface IOptions extends Feature.IOptions { + settings: FeatureSettings; + renderMimeRegistry: IRenderMimeRegistry; + completionProviderManager: ICompletionProviderManager; + iconsThemeManager: ILSPCompletionThemeManager; + } + export const id = PLUGIN_ID + ':completion'; +} export const COMPLETION_PLUGIN: JupyterFrontEndPlugin = { - id: FEATURE_ID, + id: CompletionFeature.id, requires: [ ILSPFeatureManager, ISettingRegistry, - ICompletionManager, - ILSPAdapterManager, + ICompletionProviderManager, ILSPCompletionThemeManager, - ILSPLogConsole, - IRenderMimeRegistry + IRenderMimeRegistry, + ILSPDocumentConnectionManager ], autoStart: true, - activate: ( + activate: async ( app: JupyterFrontEnd, featureManager: ILSPFeatureManager, settingRegistry: ISettingRegistry, - completionManager: ICompletionManager, - adapterManager: ILSPAdapterManager, + completionProviderManager: ICompletionProviderManager, iconsThemeManager: ILSPCompletionThemeManager, - logConsole: ILSPLogConsole, - renderMimeRegistry: IRenderMimeRegistry + renderMimeRegistry: IRenderMimeRegistry, + connectionManager: ILSPDocumentConnectionManager ) => { - const settings = new FeatureSettings(settingRegistry, FEATURE_ID); - const labIntegration = new CompletionLabIntegration( - app, - completionManager, - settings as FeatureSettings, - adapterManager, - iconsThemeManager, - logConsole.scope('CompletionLab'), - renderMimeRegistry + const settings = new FeatureSettings( + settingRegistry, + CompletionFeature.id ); - - featureManager.register({ - feature: { - editorIntegrationFactory: new Map([['CodeMirrorEditor', CompletionCM]]), - id: FEATURE_ID, - name: 'LSP Completion', - labIntegration: labIntegration, - settings: settings, - capabilities: { - textDocument: { - completion: { - dynamicRegistration: true, - completionItem: { - snippetSupport: false, - commitCharactersSupport: true, - documentationFormat: ['markdown', 'plaintext'], - deprecatedSupport: true, - preselectSupport: false, - tagSupport: { - valueSet: [CompletionItemTag.Deprecated] - } - }, - contextSupport: false - } - } - } - } + await settings.ready; + if (settings.composite.disable) { + return; + } + const feature = new CompletionFeature({ + settings, + connectionManager, + renderMimeRegistry, + iconsThemeManager, + completionProviderManager }); + + featureManager.register(feature); } }; diff --git a/packages/jupyterlab-lsp/src/features/completion/item.ts b/packages/jupyterlab-lsp/src/features/completion/item.ts index c3a3c1bcc..0b3ec7cdc 100644 --- a/packages/jupyterlab-lsp/src/features/completion/item.ts +++ b/packages/jupyterlab-lsp/src/features/completion/item.ts @@ -1,29 +1,8 @@ import { CompletionHandler } from '@jupyterlab/completer'; +import { ILSPConnection } from '@jupyterlab/lsp'; import { LabIcon } from '@jupyterlab/ui-components'; import * as lsProtocol from 'vscode-languageserver-types'; -import { until_ready } from '../../utils'; - -import { LSPConnector } from './completion_handler'; - -/** - * To be upstreamed - */ -export interface ICompletionsSource { - /** - * The name displayed in the GUI - */ - name: string; - /** - * The higher the number the higher the priority - */ - priority: number; - /** - * The icon to be displayed if no type icon is present - */ - fallbackIcon?: LabIcon; -} - /** * To be upstreamed */ @@ -31,22 +10,38 @@ export interface IExtendedCompletionItem extends CompletionHandler.ICompletionItem { insertText: string; sortText: string; - source?: ICompletionsSource; + source: string; +} + +namespace CompletionItem { + export interface IOptions { + /** + * Type of this completion item. + */ + type: string; + /** + * LabIcon object for icon to be rendered with completion type. + */ + icon: LabIcon | null; + match: lsProtocol.CompletionItem; + connection: ILSPConnection; + source: string; + } } -export class LazyCompletionItem implements IExtendedCompletionItem { +export class CompletionItem implements IExtendedCompletionItem { private _detail: string | undefined; private _documentation: string | undefined; private _is_documentation_markdown: boolean; - private _requested_resolution: boolean; private _resolved: boolean; /** * Self-reference to make sure that the instance for will remain accessible * after any copy operation (whether via spread syntax or Object.assign) * performed by the JupyterLab completer internals. */ - public self: LazyCompletionItem; + public self: CompletionItem; public element: HTMLLIElement; + public source: string; private _currentInsertText: string; get isDocumentationMarkdown(): boolean { @@ -59,27 +54,23 @@ export class LazyCompletionItem implements IExtendedCompletionItem { */ public label: string; - public source: ICompletionsSource; + icon: LabIcon | undefined; + private match: lsProtocol.CompletionItem; - constructor( - /** - * Type of this completion item. - */ - public type: string, - /** - * LabIcon object for icon to be rendered with completion type. - */ - public icon: LabIcon, - private match: lsProtocol.CompletionItem, - private connector: LSPConnector, - private uri: string - ) { + constructor(protected options: CompletionItem.IOptions) { + const match = options.match; this.label = match.label; this._setDocumentation(match.documentation); - this._requested_resolution = false; this._resolved = false; this._detail = match.detail; + this.match = match; this.self = this; + this.source = options.source; + this.icon = options.icon ? options.icon : undefined; + } + + get type() { + return this.options.type; } private _setDocumentation( @@ -113,10 +104,11 @@ export class LazyCompletionItem implements IExtendedCompletionItem { return this.match.filterText; } - public supportsResolution() { - const connection = this.connector.get_connection(this.uri); - - return connection != null && connection.isCompletionResolveProvider(); + private _supportsResolution(): boolean { + const connection = this.options.connection; + return ( + connection.serverCapabilities.completionProvider?.resolveProvider ?? false + ); } get detail(): string | undefined { @@ -132,11 +124,7 @@ export class LazyCompletionItem implements IExtendedCompletionItem { return false; } - if (this._requested_resolution) { - return false; - } - - return this.supportsResolution(); + return this._supportsResolution(); } public isResolved() { @@ -146,34 +134,29 @@ export class LazyCompletionItem implements IExtendedCompletionItem { /** * Resolve (fetch) details such as documentation. */ - public resolve(): Promise { + public async resolve(): Promise { if (this._resolved) { - return Promise.resolve(this); - } - if (!this.supportsResolution()) { - return Promise.resolve(this); + return this; } - if (this._requested_resolution) { - return until_ready(() => this._resolved, 100, 50).then(() => this); + if (!this._supportsResolution()) { + return this; } - const connection = this.connector.get_connection(this.uri)!; + const connection = this.options.connection; - this._requested_resolution = true; + const resolvedCompletionItem = await connection.clientRequests[ + 'completionItem/resolve' + ].request(this.match); - return connection - .getCompletionResolve(this.match) - .then(resolvedCompletionItem => { - if (resolvedCompletionItem === null) { - return resolvedCompletionItem; - } - this._setDocumentation(resolvedCompletionItem?.documentation); - this._detail = resolvedCompletionItem?.detail; - // TODO: implement in pyls and enable with proper LSP communication - // this.label = resolvedCompletionItem.label; - this._resolved = true; - return this; - }); + if (resolvedCompletionItem === null) { + return this; + } + this._setDocumentation(resolvedCompletionItem?.documentation); + this._detail = resolvedCompletionItem?.detail; + // TODO: implement in pylsp and enable with proper LSP communication + // this.label = resolvedCompletionItem.label; + this._resolved = true; + return this; } /** @@ -181,9 +164,6 @@ export class LazyCompletionItem implements IExtendedCompletionItem { * about this item, like type or symbol information. */ get documentation(): string | undefined { - if (!this.connector.should_show_documentation) { - return undefined; - } if (this._documentation) { return this._documentation; } diff --git a/packages/jupyterlab-lsp/src/features/completion/model.spec.ts b/packages/jupyterlab-lsp/src/features/completion/model.spec.ts index 066b5a92d..65ee6643b 100644 --- a/packages/jupyterlab-lsp/src/features/completion/model.spec.ts +++ b/packages/jupyterlab-lsp/src/features/completion/model.spec.ts @@ -1,7 +1,6 @@ -import { expect } from 'chai'; import * as lsProtocol from 'vscode-languageserver-types'; -import { LazyCompletionItem } from './item'; +import { CompletionItem } from './item'; import { LSPCompleterModel } from './model'; describe('LSPCompleterModel', () => { @@ -11,13 +10,13 @@ describe('LSPCompleterModel', () => { match: lsProtocol.CompletionItem, type: string = 'dummy' ) { - return new LazyCompletionItem( + return new CompletionItem({ type, - null as any, + icon: null as any, match, - null as any, - 'file://test.ipynb' - ); + connection: null as any, + source: 'lsp' + }); } const jupyter_icon_completion = create_dummy_item({ @@ -54,7 +53,7 @@ describe('LSPCompleterModel', () => { model.query = ''; let markedItems = model.completionItems(); - expect(markedItems[0].label).to.be.equal( + expect(markedItems[0].label).toBe( '<i class="jp-icon-jupyter"></i> Jupyter' ); }); @@ -64,7 +63,7 @@ describe('LSPCompleterModel', () => { model.query = 'Jup'; let markedItems = model.completionItems(); - expect(markedItems[0].label).to.be.equal( + expect(markedItems[0].label).toBe( '<i class="jp-icon-jupyter"></i> Jupyter' ); }); @@ -77,11 +76,7 @@ describe('LSPCompleterModel', () => { ]); model.query = 'test'; let sortedItems = model.completionItems(); - expect(sortedItems.map(item => item.sortText)).to.deep.equal([ - 'a', - 'b', - 'c' - ]); + expect(sortedItems.map(item => item.sortText)).toEqual(['a', 'b', 'c']); }); it('ignores perfect matches when asked', () => { @@ -93,8 +88,8 @@ describe('LSPCompleterModel', () => { model.query = 'test'; let items = model.completionItems(); // should not include the perfect match 'test' - expect(items.length).to.equal(1); - expect(items.map(item => item.sortText)).to.deep.equal(['test_test']); + expect(items.length).toBe(1); + expect(items.map(item => item.sortText)).toEqual(['test_test']); }); it('case-sensitivity can be changed', () => { @@ -104,11 +99,11 @@ describe('LSPCompleterModel', () => { model.settings.caseSensitive = true; let items = model.completionItems(); - expect(items.length).to.equal(0); + expect(items.length).toBe(0); model.settings.caseSensitive = false; items = model.completionItems(); - expect(items.length).to.equal(1); + expect(items.length).toBe(1); }); it('filters use filterText', () => { @@ -117,12 +112,12 @@ describe('LSPCompleterModel', () => { model.query = 'font'; let filteredItems = model.completionItems(); - expect(filteredItems.length).to.equal(1); + expect(filteredItems.length).toBe(1); // class is in label but not in filterText model.query = 'class'; filteredItems = model.completionItems(); - expect(filteredItems.length).to.equal(0); + expect(filteredItems.length).toBe(0); }); it('marks appropriate part of label when filterText matches', () => { @@ -132,14 +127,14 @@ describe('LSPCompleterModel', () => { // nothing should get highlighted let markedItems = model.completionItems(); - expect(markedItems[0].label).to.be.equal( + expect(markedItems[0].label).toBe( '<i class="jp-icon-jupyter"></i> Jupyter' ); // i is in both label and filterText model.query = 'i'; markedItems = model.completionItems(); - expect(markedItems[0].label).to.be.equal( + expect(markedItems[0].label).toBe( '<i class="jp-icon-jupyter"></i> Jupyter' ); }); diff --git a/packages/jupyterlab-lsp/src/features/completion/model.ts b/packages/jupyterlab-lsp/src/features/completion/model.ts index 0ce6e8664..90b485359 100644 --- a/packages/jupyterlab-lsp/src/features/completion/model.ts +++ b/packages/jupyterlab-lsp/src/features/completion/model.ts @@ -4,7 +4,7 @@ import { CompleterModel, CompletionHandler } from '@jupyterlab/completer'; import { StringExt } from '@lumino/algorithm'; -import { LazyCompletionItem } from './item'; +import { CompletionItem } from './item'; interface ICompletionMatch { /** @@ -23,7 +23,7 @@ function escapeHTML(text: string) { } /** - * This will be contributed upstream + * A lot of this was contributed upstream */ export class GenericCompleterModel< T extends CompletionHandler.ICompletionItem @@ -38,8 +38,14 @@ export class GenericCompleterModel< completionItems(): T[] { let query = this.query; + // TODO: make use of `processedItemsCache` when made available upstream, + // see https://github.com/jupyterlab/jupyterlab/pull/15025 + // (setting query is bad because it resets the cache; ideally we would + // modify the sorting and filtering algorithm upstream). this.query = ''; - let unfilteredItems = super.completionItems!() as T[]; + let unfilteredItems = ( + super.completionItems() as CompletionHandler.ICompletionItem[] + ).map(this.harmoniseItem); this.query = query; // always want to sort @@ -47,8 +53,12 @@ export class GenericCompleterModel< return this._sortAndFilter(query, unfilteredItems); } + protected harmoniseItem(item: CompletionHandler.ICompletionItem): T { + return item as T; + } + setCompletionItems(newValue: T[]) { - super.setCompletionItems!(newValue); + super.setCompletionItems(newValue); if (this.settings.preFilterMatches && this.current && this.cursor) { // set initial query to pre-filter items; in future we should use: @@ -207,17 +217,27 @@ export namespace GenericCompleterModel { }; } -export class LSPCompleterModel extends GenericCompleterModel { - protected getFilterText(item: LazyCompletionItem): string { +type MaybeCompletionItem = Partial & + CompletionHandler.ICompletionItem; + +export class LSPCompleterModel extends GenericCompleterModel { + protected getFilterText(item: MaybeCompletionItem): string { if (item.filterText) { return item.filterText; } return super.getFilterText(item); } + protected harmoniseItem(item: CompletionHandler.ICompletionItem) { + if ((item as any).self) { + return (item as any).self; + } + return super.harmoniseItem(item); + } + protected compareMatches( - a: ICompletionMatch, - b: ICompletionMatch + a: ICompletionMatch, + b: ICompletionMatch ): number { const delta = a.score - b.score; if (delta !== 0) { @@ -226,6 +246,6 @@ export class LSPCompleterModel extends GenericCompleterModel // solve ties using sortText // note: locale compare is case-insensitive - return a.item.sortText.localeCompare(b.item.sortText); + return (a.item.sortText ?? 'z').localeCompare(b.item.sortText ?? 'z'); } } diff --git a/packages/jupyterlab-lsp/src/features/completion/overrides.ts b/packages/jupyterlab-lsp/src/features/completion/overrides.ts new file mode 100644 index 000000000..8ec1796f3 --- /dev/null +++ b/packages/jupyterlab-lsp/src/features/completion/overrides.ts @@ -0,0 +1,86 @@ +import { + ILSPCompletionThemeManager, + KernelKind +} from '@jupyter-lsp/completion-theme'; +import { + ContextCompleterProvider, + KernelCompleterProvider, + CompletionHandler, + ICompletionContext +} from '@jupyterlab/completer'; +import { LabIcon } from '@jupyterlab/ui-components'; + +import { CodeCompletion as LSPCompletionSettings } from '../../_completion'; +import { FeatureSettings } from '../../feature'; + +interface IOptions { + settings: FeatureSettings; + iconsThemeManager: ILSPCompletionThemeManager; +} + +export class EnhancedContextCompleterProvider extends ContextCompleterProvider { + readonly label = 'context'; + + constructor(protected options: IOptions) { + super(); + } + + private get _kernelCompletionsFirst(): boolean { + return this.options.settings.composite.kernelCompletionsFirst; + } + + async fetch( + request: CompletionHandler.IRequest, + context: ICompletionContext + ): Promise { + const result = await super.fetch(request, context); + result.items = result.items.map(i => { + return { + ...i, + icon: this.iconFor(i.type ?? 'Text') ?? this.iconFor('Text'), + type: i.type === '' ? undefined : (i.type as string), + sortText: this._kernelCompletionsFirst ? 'a' : 'z', + source: this.label + }; + }); + return result; + } + + protected iconFor(type: string): LabIcon | undefined { + const icon = this.options.iconsThemeManager.get_icon( + type + ) as LabIcon | null; + return icon ? icon : undefined; + } +} + +export class EnhancedKernelCompleterProvider extends KernelCompleterProvider { + readonly label = 'kernel'; + + constructor(protected options: IOptions) { + super(); + } + + async fetch( + request: CompletionHandler.IRequest, + context: ICompletionContext + ): Promise { + const result = await super.fetch(request, context); + result.items = result.items.map(i => { + return { + ...i, + icon: this.iconFor(i.type ?? KernelKind) ?? this.iconFor(KernelKind), + sortText: 'z', + source: this.label + }; + }); + return result; + } + + protected iconFor(type: string): LabIcon | undefined { + const icon = this.options.iconsThemeManager.get_icon( + type + ) as LabIcon | null; + return icon ? icon : undefined; + } +} diff --git a/packages/jupyterlab-lsp/src/features/completion/provider.ts b/packages/jupyterlab-lsp/src/features/completion/provider.ts new file mode 100644 index 000000000..fb53410bb --- /dev/null +++ b/packages/jupyterlab-lsp/src/features/completion/provider.ts @@ -0,0 +1,401 @@ +import { ILSPCompletionThemeManager } from '@jupyter-lsp/completion-theme'; +import { SourceChange } from '@jupyter/ydoc'; +import { CodeEditor } from '@jupyterlab/codeeditor'; +import { + ICompletionProvider, + CompletionHandler, + ICompletionContext, + Completer +} from '@jupyterlab/completer'; +import { IDocumentWidget } from '@jupyterlab/docregistry'; +import { + ILSPDocumentConnectionManager, + IEditorPosition +} from '@jupyterlab/lsp'; +import { IRenderMimeRegistry } from '@jupyterlab/rendermime'; +import { LabIcon } from '@jupyterlab/ui-components'; +import type * as lsProtocol from 'vscode-languageserver-protocol'; + +import { CodeCompletion as LSPCompletionSettings } from '../../_completion'; +import { + editorPositionToRootPosition, + PositionConverter, + documentAtRootPosition, + rootPositionToVirtualPosition +} from '../../converter'; +import { FeatureSettings } from '../../feature'; +import { CompletionTriggerKind, CompletionItemKind } from '../../lsp'; +import { ILSPLogConsole } from '../../tokens'; +import { BrowserConsole } from '../../virtual/console'; + +import { CompletionItem } from './item'; +import { LSPCompleterModel } from './model'; +import { LSPCompletionRenderer } from './renderer'; + +interface IOptions { + settings: FeatureSettings; + renderMimeRegistry: IRenderMimeRegistry; + iconsThemeManager: ILSPCompletionThemeManager; + connectionManager: ILSPDocumentConnectionManager; +} + +export class CompletionProvider implements ICompletionProvider { + readonly identifier = 'lsp'; + readonly label = 'LSP'; + protected console = new BrowserConsole().scope('Completion provider'); + + constructor(protected options: IOptions) { + const markdownRenderer = + options.renderMimeRegistry.createRenderer('text/markdown'); + + this.renderer = new LSPCompletionRenderer({ + settings: options.settings, + markdownRenderer, + latexTypesetter: options.renderMimeRegistry.latexTypesetter, + console: this.console + }); + } + + renderer: LSPCompletionRenderer; + + modelFactory = async ( + context: ICompletionContext + ): Promise => { + const composite = this.options.settings.composite; + const model = new LSPCompleterModel({ + caseSensitive: composite.caseSensitive, + preFilterMatches: composite.preFilterMatches, + includePerfectMatches: composite.includePerfectMatches + }); + this.options.settings.changed.connect(() => { + const composite = this.options.settings.composite; + model.settings.caseSensitive = composite.caseSensitive; + model.settings.preFilterMatches = composite.preFilterMatches; + model.settings.includePerfectMatches = composite.includePerfectMatches; + }); + return model; + }; + + /** + * Resolve (fetch) details such as documentation. + */ + async resolve(completionItem: CompletionItem): Promise { + await completionItem.resolve(); + // expand getters + return { + label: completionItem.label, + documentation: completionItem.documentation, + deprecated: completionItem.deprecated, + detail: completionItem.detail, + filterText: completionItem.filterText, + sortText: completionItem.sortText, + insertText: completionItem.insertText, + source: completionItem.source, + type: completionItem.type, + isDocumentationMarkdown: completionItem.isDocumentationMarkdown, + icon: completionItem.icon + }; + } + + shouldShowContinuousHint( + completerIsVisible: boolean, + changed: SourceChange, + context?: ICompletionContext + ): boolean { + if (!context) { + // waiting for https://github.com/jupyterlab/jupyterlab/pull/15015 due to + // https://github.com/jupyterlab/jupyterlab/issues/15014 + return false; + // throw Error('Completion context was expected'); + } + + const manager = this.options.connectionManager; + const widget = context?.widget as IDocumentWidget; + const adapter = manager.adapters.get(widget.context.path); + if (!context.editor) { + // TODO: why is editor optional in the first place? + throw Error('No editor'); + } + if (!adapter) { + throw Error('No adapter'); + } + const editor = context.editor; + const editorPosition = PositionConverter.ce_to_cm( + editor.getCursorPosition() + ) as IEditorPosition; + + const block = adapter.editors.find( + value => value.ceEditor.getEditor() == editor + ); + + if (!block) { + throw Error('Could not get block with editor'); + } + const rootPosition = editorPositionToRootPosition( + adapter, + block.ceEditor, + editorPosition + ); + + if (!rootPosition) { + throw Error('Could not get root position'); + } + + const virtualDocument = documentAtRootPosition(adapter, rootPosition); + const connection = manager.connections.get(virtualDocument.uri); + + if (!connection) { + throw Error('Could not find connection for virtual document'); + } + + const triggerCharacters = + connection.serverCapabilities?.completionProvider?.triggerCharacters || + []; + + const sourceChange = changed.sourceChange; + + if (sourceChange == null) { + return false; + } + + if (sourceChange.some(delta => delta.delete != null)) { + return false; + } + const token = editor.getTokenAtCursor(); + + if (this.options.settings.composite.continuousHinting) { + // if token type is known and not ignored token type is ignored - show completer + if ( + token.type && + !this.options.settings.composite.suppressContinuousHintingIn.includes( + token.type + ) + ) { + return true; + } + // otherwise show it may still be shown due to trigger character + } + if ( + !token.type || + this.options.settings.composite.suppressTriggerCharacterIn.includes( + token.type + ) + ) { + return false; + } + + return sourceChange.some( + delta => + delta.insert != null && + (triggerCharacters.includes(delta.insert) || + (!completerIsVisible && delta.insert.trim().length > 0)) + ); + } + + async fetch( + request: CompletionHandler.IRequest, + context: ICompletionContext, + trigger?: CompletionTriggerKind + ): Promise> { + const manager = this.options.connectionManager; + const widget = context.widget as IDocumentWidget; + const adapter = manager.adapters.get(widget.context.path); + + if (!context.editor) { + // TODO: why is editor optional in the first place? + throw Error('No editor'); + } + if (!adapter) { + throw Error('No adapter'); + } + const editor = context.editor; + const editorPosition = PositionConverter.ce_to_cm( + editor.getPositionAt(request.offset)! + ) as IEditorPosition; + const token = editor.getTokenAt(request.offset); + const positionInToken = token.offset - request.offset; + // TODO: (typedCharacter can serve as a proxy for triggerCharacter) + const typedCharacter = token.value[positionInToken + 1]; + + // TODO: direct mapping + // because we need editorAccessor, not the editor itself we perform this rather sad dance: + const block = adapter.editors.find( + value => value.ceEditor.getEditor() == editor + ); + if (!block) { + throw Error('Could not get block with editor'); + } + + const rootPosition = editorPositionToRootPosition( + adapter, + block.ceEditor, + editorPosition + ); + + if (!rootPosition) { + throw Error('Could not get root position'); + } + + const virtualDocument = documentAtRootPosition(adapter, rootPosition); + const virtualPosition = rootPositionToVirtualPosition( + adapter, + rootPosition + ); + + const connection = manager.connections.get(virtualDocument.uri); + + if (!connection) { + throw Error('Could not find connection for virtual document'); + } + + const lspCompletionReply = await connection.clientRequests[ + 'textDocument/completion' + ].request({ + textDocument: { + uri: virtualDocument.documentInfo.uri + }, + position: { + line: virtualPosition.line, + character: virtualPosition.ch + }, + context: { + triggerKind: trigger || CompletionTriggerKind.Invoked, + triggerCharacter: + trigger === CompletionTriggerKind.TriggerCharacter + ? typedCharacter + : undefined + } + }); + + const completionList = + !lspCompletionReply || Array.isArray(lspCompletionReply) + ? ({ + isIncomplete: false, + items: lspCompletionReply || [] + } as lsProtocol.CompletionList) + : lspCompletionReply; + + return transformLSPCompletions( + token, + positionInToken, + completionList.items, + (kind, match) => { + return new CompletionItem({ + match, + connection, + type: kind, + icon: this.options.iconsThemeManager.get_icon(kind) as LabIcon | null, + source: this.label + }); + }, + this.console + ); + } + + async isApplicable(context: ICompletionContext): Promise { + if (this.options.settings.composite.disable) { + return false; + } + /* + // Disabled due to the result being effectively cached until user changes + // cells which can lead to bad UX; upstream issue: + // https://github.com/jupyterlab/jupyterlab/issues/15016 + const manager = this.options.connectionManager; + const widget = context.widget as IDocumentWidget; + const adapter = manager.adapters.get(widget.context.path); + if (!adapter) { + return false; + } + */ + return true; + } +} +export function transformLSPCompletions( + token: CodeEditor.IToken, + positionInToken: number, + lspCompletionItems: lsProtocol.CompletionItem[], + createCompletionItem: (kind: string, match: lsProtocol.CompletionItem) => T, + console: ILSPLogConsole +) { + let prefix = token.value.slice(0, positionInToken + 1); + let all_non_prefixed = true; + let items: T[] = []; + lspCompletionItems.forEach(match => { + let kind = match.kind ? CompletionItemKind[match.kind] : ''; + + // Update prefix values + let text = match.insertText ? match.insertText : match.label; + + // declare prefix presence if needed and update it + if (text.toLowerCase().startsWith(prefix.toLowerCase())) { + all_non_prefixed = false; + if (prefix !== token.value) { + if (text.toLowerCase().startsWith(token.value.toLowerCase())) { + // given a completion insert text "display_table" and two test cases: + // dispdata → display_tabledata + // display → display_table + // we have to adjust the prefix for the latter (otherwise we would get display_tablelay), + // as we are constrained NOT to replace after the prefix (which would be "disp" otherwise) + prefix = token.value; + } + } + } + // add prefix if needed + else if (token.type === 'string' && prefix.includes('/')) { + // special case for path completion in strings, ensuring that: + // '/Com → '/Completion.ipynb + // when the returned insert text is `Completion.ipynb` (the token here is `'/Com`) + // developed against pyls and pylsp server, may not work well in other cases + const parts = prefix.split('/'); + if ( + text.toLowerCase().startsWith(parts[parts.length - 1].toLowerCase()) + ) { + let pathPrefix = parts.slice(0, -1).join('/') + '/'; + match.insertText = pathPrefix + text; + // for label removing the prefix quote if present + if (pathPrefix.startsWith("'") || pathPrefix.startsWith('"')) { + pathPrefix = pathPrefix.substr(1); + } + match.label = pathPrefix + match.label; + all_non_prefixed = false; + } + } + + let completionItem = createCompletionItem(kind, match); + + items.push(completionItem); + }); + console.debug('Transformed'); + // required to make the repetitive trigger characters like :: or ::: work for R with R languageserver, + // see https://github.com/jupyter-lsp/jupyterlab-lsp/issues/436 + let prefix_offset = token.value.length; + // completion of dictionaries for Python with jedi-language-server was + // causing an issue for dic[''] case; to avoid this let's make + // sure that prefix.length >= prefix.offset + if (all_non_prefixed && prefix_offset > prefix.length) { + prefix_offset = prefix.length; + } + + let response = { + // note in the ContextCompleter it was: + // start: token.offset, + // end: token.offset + token.value.length, + // which does not work with "from statistics import " as the last token ends at "t" of "import", + // so the completer would append "mean" as "from statistics importmean" (without space!); + // (in such a case the typedCharacters is undefined as we are out of range) + // a different workaround would be to prepend the token.value prefix: + // text = token.value + text; + // but it did not work for "from statistics " and lead to "from statisticsimport" (no space) + start: token.offset + (all_non_prefixed ? prefix_offset : 0), + end: token.offset + prefix.length, + items: items, + source: 'LSP' + }; + if (response.start > response.end) { + console.warn( + 'Response contains start beyond end; this should not happen!', + response + ); + } + return response; +} diff --git a/packages/jupyterlab-lsp/src/features/completion/renderer.ts b/packages/jupyterlab-lsp/src/features/completion/renderer.ts index 11e50aaa4..3b1962998 100644 --- a/packages/jupyterlab-lsp/src/features/completion/renderer.ts +++ b/packages/jupyterlab-lsp/src/features/completion/renderer.ts @@ -5,13 +5,14 @@ import { Completer } from '@jupyterlab/completer'; import { IRenderMime } from '@jupyterlab/rendermime'; import { Signal } from '@lumino/signaling'; +import { CodeCompletion as LSPCompletionSettings } from '../../_completion'; +import { FeatureSettings } from '../../feature'; import { ILSPLogConsole } from '../../tokens'; -import { CompletionLabIntegration } from './completion'; -import { LazyCompletionItem, IExtendedCompletionItem } from './item'; +import { CompletionItem, IExtendedCompletionItem } from './item'; export interface ICompletionData { - item: LazyCompletionItem; + item: CompletionItem; element: HTMLLIElement; } @@ -26,7 +27,7 @@ export class LSPCompletionRenderer private visibilityObserver: IntersectionObserver; private activityObserver: MutationObserver; // element data maps (with weak references for better GC) - private elementToItem: WeakMap; + private elementToItem: WeakMap; private wasActivated: WeakMap; protected ITEM_PLACEHOLDER_CLASS = 'lsp-detail-placeholder'; @@ -85,20 +86,20 @@ export class LSPCompletionRenderer }); } - protected getExtraInfo(item: LazyCompletionItem): string { - const labelExtra = this.options.integrator.settings.composite.labelExtra; + protected getExtraInfo(item: CompletionItem): string { + const labelExtra = this.options.settings.composite.labelExtra; switch (labelExtra) { case 'detail': return item?.detail || ''; case 'type': return item?.type?.toLowerCase?.(); case 'source': - return item?.source?.name; + return item?.source; case 'auto': return [ item?.detail || '', item?.type?.toLowerCase?.(), - item?.source?.name + item?.source ].filter(x => !!x)[0]; default: this.options.console.warn( @@ -109,7 +110,7 @@ export class LSPCompletionRenderer } } - public updateExtraInfo(item: LazyCompletionItem, li: HTMLLIElement) { + public updateExtraInfo(item: CompletionItem, li: HTMLLIElement) { const extraText = this.getExtraInfo(item); if (extraText) { const extraElement = li.getElementsByClassName(this.EXTRA_INFO_CLASS)[0]; @@ -119,7 +120,7 @@ export class LSPCompletionRenderer } createCompletionItemNode( - item: LazyCompletionItem, + item: CompletionItem, orderedTypes: string[] ): HTMLLIElement { const li = super.createCompletionItemNode(item, orderedTypes); @@ -182,7 +183,7 @@ export class LSPCompletionRenderer } } - createDocumentationNode(item: LazyCompletionItem): HTMLElement { + createDocumentationNode(item: CompletionItem): HTMLElement { // note: not worth trying to `fetchDocumentation()` as this is not // invoked if documentation is empty (as of jlab 3.2) if (item.isDocumentationMarkdown && this.options.markdownRenderer) { @@ -220,11 +221,22 @@ export class LSPCompletionRenderer return node; } } + + itemWidthHeuristic(item: CompletionItem): number { + const labelSize = item.label.replace(/<\?mark>/g, '').length; + const extraTextSize = this.getExtraInfo(item).length; + if (this.options.settings.composite.layout === 'side-by-side') { + // in 'side-by-side' take the sum + return labelSize + extraTextSize; + } + // 'detail-below' mode take whichever is longer + return Math.max(labelSize, extraTextSize); + } } export namespace LSPCompletionRenderer { export interface IOptions { - integrator: CompletionLabIntegration; + settings: FeatureSettings; markdownRenderer: IRenderMime.IRenderer | null; latexTypesetter?: IRenderMime.ILatexTypesetter | null; console: ILSPLogConsole; diff --git a/packages/jupyterlab-lsp/src/features/diagnostics/diagnostics.spec.ts b/packages/jupyterlab-lsp/src/features/diagnostics/diagnostics.spec.ts index f38d58cd7..5faf2fe41 100644 --- a/packages/jupyterlab-lsp/src/features/diagnostics/diagnostics.spec.ts +++ b/packages/jupyterlab-lsp/src/features/diagnostics/diagnostics.spec.ts @@ -1,23 +1,33 @@ +import { + diagnosticCount, + forceLinting, + forEachDiagnostic, + Diagnostic +} from '@codemirror/lint'; +import { EditorState } from '@codemirror/state'; import { CodeMirrorEditor } from '@jupyterlab/codemirror'; -import { expect } from 'chai'; -import type { MarkerRange, TextMarker, TextMarkerOptions } from 'codemirror'; +import { CodeExtractorsManager, isEqual } from '@jupyterlab/lsp'; +import { framePromise } from '@jupyterlab/testing'; +import { nullTranslator } from '@jupyterlab/translation'; +import { Signal } from '@lumino/signaling'; import type * as lsProtocol from 'vscode-languageserver-protocol'; import { CodeDiagnostics as LSPDiagnosticsSettings } from '../../_diagnostics'; +import { IFeatureSettings } from '../../feature'; +import { DiagnosticSeverity } from '../../lsp'; import { - FileEditorFeatureTestEnvironment, + FileEditorTestEnvironment, MockSettings, - NotebookFeatureTestEnvironment, - code_cell, - set_notebook_content, + NotebookTestEnvironment, + codeCell, + setNotebookContent, showAllCells -} from '../../editor_integration/testutils'; -import { DiagnosticSeverity } from '../../lsp'; -import { is_equal } from '../../positioning'; -import { foreign_code_extractors } from '../../transclusions/ipython/extractors'; +} from '../../testutils'; +import { foreignCodeExtractors } from '../../transclusions/ipython/extractors'; -import { DiagnosticsCM, diagnostics_panel } from './diagnostics'; -import { message_without_code } from './listing'; +import { diagnosticsPanel } from './diagnostics'; +import { DiagnosticsFeature } from './feature'; +import { messageWithoutCode } from './listing'; const SETTING_DEFAULTS: LSPDiagnosticsSettings = { ignoreCodes: [], @@ -26,33 +36,45 @@ const SETTING_DEFAULTS: LSPDiagnosticsSettings = { defaultSeverity: 'Warning' }; +class ShellMock { + currentChanged = new Signal(this); +} + +class ConfigurableDiagnosticsFeature extends DiagnosticsFeature { + public settings: IFeatureSettings; +} + +function getDiagnostics(state: EditorState): Diagnostic[] { + const markers: Diagnostic[] = []; + forEachDiagnostic(state, d => markers.push(d)); + return markers; +} + describe('Diagnostics', () => { - let feature: DiagnosticsCM; + let feature: ConfigurableDiagnosticsFeature; let defaultSettings = new MockSettings({ ...SETTING_DEFAULTS }); describe('FileEditor integration', () => { - let env: FileEditorFeatureTestEnvironment; - - beforeEach(() => { - env = new FileEditorFeatureTestEnvironment(); - feature = env.init_integration({ - constructor: DiagnosticsCM, - id: 'Diagnostics', - settings: defaultSettings + let env: FileEditorTestEnvironment; + + beforeEach(async () => { + env = new FileEditorTestEnvironment(); + feature = new ConfigurableDiagnosticsFeature({ + trans: nullTranslator.load(''), + settings: defaultSettings, + connectionManager: env.connectionManager, + shell: new ShellMock() as any, + editorExtensionRegistry: env.editorExtensionRegistry, + themeManager: null }); + await env.init(); }); afterEach(() => { - env.dispose_feature(feature); env.dispose(); }); - it('calls parent register()', () => { - feature.register(); - expect(feature.is_registered).to.equal(true); - }); - const diagnostics: lsProtocol.Diagnostic[] = [ { range: { @@ -77,230 +99,249 @@ describe('Diagnostics', () => { const text = 'res = aa + 1\nres '; it('renders inspections', async () => { - env.ce_editor.model.value.text = text; - await env.adapter.update_documents(); + env.activeEditor.model.sharedModel.setSource(text); + await env.adapter.updateDocuments(); - let markers: TextMarker[]; + let markers: number; - markers = env.ce_editor.editor.getDoc().getAllMarks(); - expect(markers.length).to.equal(0); + markers = diagnosticCount(env.activeEditor.editor.state); + expect(markers).toBe(0); - feature.handleDiagnostic(null as any, { - uri: env.document_options.path, - diagnostics: diagnostics - }); + forceLinting(env.activeEditor.editor); + await feature.handleDiagnostic( + { + uri: env.documentOptions.path, + diagnostics: diagnostics + }, + env.adapter.virtualDocument!, + env.adapter + ); + await framePromise(); - let marks = env.ce_editor.editor.getDoc().getAllMarks(); - expect(marks.length).to.equal(2); + markers = diagnosticCount(env.activeEditor.editor.state); + expect(markers).toBe(2); }); it('filters out inspections by code', async () => { - feature = env.init_integration({ - constructor: DiagnosticsCM, - id: 'Diagnostics', - settings: new MockSettings({ - ...SETTING_DEFAULTS, - ignoreCodes: ['W001'] - }) + feature.settings = new MockSettings({ + ...SETTING_DEFAULTS, + ignoreCodes: ['W001'] }); - env.ce_editor.model.value.text = text; - await env.adapter.update_documents(); - feature.handleDiagnostic(null as any, { - uri: env.document_options.path, - diagnostics: diagnostics - }); + env.activeEditor.model.sharedModel.setSource(text); + await env.adapter.updateDocuments(); - let markers = env.ce_editor.editor.getDoc().getAllMarks(); - expect(markers.length).to.equal(1); - expect((markers[0] as TextMarkerOptions).title).to.equal( - 'Undefined symbol "aa"' + forceLinting(env.activeEditor.editor); + await feature.handleDiagnostic( + { + uri: env.documentOptions.path, + diagnostics: diagnostics + }, + env.adapter.virtualDocument!, + env.adapter ); + await framePromise(); + + const markers = getDiagnostics(env.activeEditor.editor.state); + expect(markers.length).toBe(1); + expect(markers[0].message).toBe('Undefined symbol "aa"'); }); it('filters out inspections by severity', async () => { - feature = env.init_integration({ - constructor: DiagnosticsCM, - id: 'Diagnostics', - settings: new MockSettings({ - ...SETTING_DEFAULTS, - ignoreSeverities: ['Warning'] - }) + feature.settings = new MockSettings({ + ...SETTING_DEFAULTS, + ignoreSeverities: ['Warning'] }); - env.ce_editor.model.value.text = text; - await env.adapter.update_documents(); - feature.handleDiagnostic(null as any, { - uri: env.document_options.path, - diagnostics: diagnostics - }); + env.activeEditor.model.sharedModel.setSource(text); + await env.adapter.updateDocuments(); - let markers = env.ce_editor.editor.getDoc().getAllMarks(); - expect(markers.length).to.equal(1); - expect((markers[0] as TextMarkerOptions).title).to.equal( - 'Undefined symbol "aa"' + forceLinting(env.activeEditor.editor); + await feature.handleDiagnostic( + { + uri: env.documentOptions.path, + diagnostics: diagnostics + }, + env.adapter.virtualDocument!, + env.adapter ); + await framePromise(); + + const markers = getDiagnostics(env.activeEditor.editor.state); + expect(markers.length).toBe(1); + expect(markers[0].message).toBe('Undefined symbol "aa"'); }); it('filters out inspections by message text', async () => { - feature = env.init_integration({ - constructor: DiagnosticsCM, - id: 'Diagnostics', - settings: new MockSettings({ - ...SETTING_DEFAULTS, - ignoreMessagesPatterns: ['Undefined symbol "\\w+"'] - }) + feature.settings = new MockSettings({ + ...SETTING_DEFAULTS, + ignoreMessagesPatterns: ['Undefined symbol "\\w+"'] }); - env.ce_editor.model.value.text = text; - await env.adapter.update_documents(); - feature.handleDiagnostic(null as any, { - uri: env.document_options.path, - diagnostics: diagnostics - }); + env.activeEditor.model.sharedModel.setSource(text); + await env.adapter.updateDocuments(); - let markers = env.ce_editor.editor.getDoc().getAllMarks(); - expect(markers.length).to.equal(1); - expect((markers[0] as TextMarkerOptions).title).to.equal( - 'Trimming whitespace' + forceLinting(env.activeEditor.editor); + await feature.handleDiagnostic( + { + uri: env.documentOptions.path, + diagnostics: diagnostics + }, + env.adapter.virtualDocument!, + env.adapter ); + await framePromise(); + + const markers = getDiagnostics(env.activeEditor.editor.state); + expect(markers.length).toBe(1); + expect(markers[0].message).toBe('Trimming whitespace'); }); }); describe('Notebook integration', () => { - let env: NotebookFeatureTestEnvironment; - - beforeEach(() => { - env = new NotebookFeatureTestEnvironment({ - overrides_registry: {}, - foreign_code_extractors + let env: NotebookTestEnvironment; + + beforeEach(async () => { + const manager = new CodeExtractorsManager(); + for (let language of Object.keys(foreignCodeExtractors)) { + for (let extractor of foreignCodeExtractors[language]) { + manager.register(extractor, language); + } + } + env = new NotebookTestEnvironment({ + document: { + foreignCodeExtractors: manager + } }); - feature = env.init_integration({ - constructor: DiagnosticsCM, - id: 'Diagnostics', - settings: defaultSettings + feature = new ConfigurableDiagnosticsFeature({ + trans: nullTranslator.load(''), + settings: defaultSettings, + connectionManager: env.connectionManager, + shell: new ShellMock() as any, + editorExtensionRegistry: env.editorExtensionRegistry, + themeManager: null }); + await env.init(); }); afterEach(() => { env.dispose(); - env.dispose_feature(feature); }); it('renders inspections across cells', async () => { - set_notebook_content(env.notebook, [ - code_cell(['x =1\n', 'test']), - code_cell([' ']) + setNotebookContent(env.notebook, [ + codeCell(['x =1', 'test']), + codeCell([' ']) ]); showAllCells(env.notebook); - await env.adapter.update_documents(); + await env.adapter.updateDocuments(); - let document = env.virtual_editor.virtual_document; - let uri = env.virtual_editor.virtual_document.uri; + let document = env.adapter.virtualDocument!; + let uri = document.uri; - feature.handleDiagnostic(null as any, { - uri: uri, - diagnostics: [ - { - source: 'pyflakes', - range: { - start: { line: 1, character: 0 }, - end: { line: 1, character: 5 } - }, - message: "undefined name 'test'", - severity: 1 - }, - { - source: 'pycodestyle', - range: { - start: { line: 0, character: 3 }, - end: { line: 0, character: 5 } + env.adapter.editors.map(editor => + forceLinting((editor.ceEditor.getEditor()! as CodeMirrorEditor).editor) + ); + await framePromise(); + await feature.handleDiagnostic( + { + uri: uri, + diagnostics: [ + { + source: 'pyflakes', + range: { + start: { line: 1, character: 0 }, + end: { line: 1, character: 5 } + }, + message: "undefined name 'test'", + severity: 1 }, - message: 'E225 missing whitespace around operator', - code: 'E225', - severity: 2 - }, - { - source: 'pycodestyle', - range: { - start: { line: 4, character: 0 }, - end: { line: 4, character: 5 } + { + source: 'pycodestyle', + range: { + start: { line: 0, character: 3 }, + end: { line: 0, character: 5 } + }, + message: 'E225 missing whitespace around operator', + code: 'E225', + severity: 2 }, - message: 'W391 blank line at end of file', - code: 'W391', - severity: 2 - }, - { - source: 'pycodestyle', - range: { - start: { line: 4, character: 0 }, - end: { line: 4, character: 5 } + { + source: 'pycodestyle', + range: { + start: { line: 4, character: 0 }, + end: { line: 4, character: 5 } + }, + message: 'W391 blank line at end of file', + code: 'W391', + severity: 2 }, - message: 'W293 blank line contains whitespace', - code: 'W293', - severity: 2 - }, - { - source: 'mypy', - range: { - start: { line: 1, character: 0 }, - end: { line: 1, character: 4 } + { + source: 'pycodestyle', + range: { + start: { line: 4, character: 0 }, + end: { line: 4, character: 5 } + }, + message: 'W293 blank line contains whitespace', + code: 'W293', + severity: 2 }, - message: "Name 'test' is not defined", - severity: 1 - } - ] - }); + { + source: 'mypy', + range: { + start: { line: 1, character: 0 }, + end: { line: 1, character: 4 } + }, + message: "Name 'test' is not defined", + severity: 1 + } + ] + }, + env.adapter.virtualDocument!, + env.adapter + ); + await framePromise(); let cm_editors = env.adapter.editors.map( - editor => (editor as CodeMirrorEditor).editor + editor => (editor.ceEditor.getEditor()! as CodeMirrorEditor).editor ); - let marks_cell_1 = cm_editors[0].getDoc().getAllMarks(); + const marks_cell_1 = getDiagnostics(cm_editors[0].state); // test from mypy, test from pyflakes, whitespace around operator from pycodestyle - expect(marks_cell_1.length).to.equal(3); + expect(marks_cell_1.length).toBe(3); - // W391 and W293 should get merged into a single diagnostic (same range) - let marks_cell_2 = cm_editors[1].getDoc().getAllMarks(); - expect(marks_cell_2.length).to.equal(1); + const marks_cell_2 = getDiagnostics(cm_editors[1].state); + expect(marks_cell_2.length).toBe(2); - let mark_cell_2 = marks_cell_2[0]; - let merged_mark_title = (mark_cell_2 as any).title; - expect(merged_mark_title).to.contain('W391'); - expect(merged_mark_title).to.contain('W293'); - // should be separated by new line - expect(merged_mark_title).to.contain('\n'); + expect(marks_cell_2[1].message).toContain('W391'); + expect(marks_cell_2[0].message).toContain('W293'); - expect(feature.diagnostics_db.size).to.equal(1); - expect(feature.diagnostics_db.get(document)!.length).to.equal(5); + expect(feature.getDiagnosticsDB(env.adapter).size).toBe(1); + expect(feature.getDiagnosticsDB(env.adapter).get(document)!.length).toBe( + 5 + ); - feature.switchDiagnosticsPanelSource(); - diagnostics_panel.widget.content.update(); + feature.switchDiagnosticsPanelSource(env.adapter); + diagnosticsPanel.widget.content.update(); // the panel should contain all 5 diagnostics - let db = diagnostics_panel.content.model.diagnostics!; - expect(db.size).to.equal(1); - expect(db.get(document)!.length).to.equal(5); + let db = diagnosticsPanel.content.model.diagnostics!; + expect(db.size).toBe(1); + expect(db.get(document)!.length).toBe(5); }); - it('Works in foreign documents', async () => { - set_notebook_content(env.notebook, [ - code_cell(['valid = 0\n', 'code = 1', '# here']), - code_cell(['%%python\n', 'y = 1\n', 'x']) + it.skip('Works in foreign documents', async () => { + setNotebookContent(env.notebook, [ + codeCell(['valid = 0', 'code = 1', '# here']), + codeCell(['%%python', 'y = 1', 'x']) ]); showAllCells(env.notebook); - await env.adapter.update_documents(); + await env.adapter.updateDocuments(); - let document = env.virtual_editor.virtual_document; - expect(document.foreign_documents.size).to.be.equal(1); - let foreign_document = document.foreign_documents.values().next().value; - - let foreign_feature: DiagnosticsCM = env.init_integration({ - constructor: DiagnosticsCM, - id: 'Diagnostics', - document: foreign_document, - settings: defaultSettings - }); + let document = env.adapter.virtualDocument!; + console.log(document.foreignDocuments); + expect(document.foreignDocuments.size).toBe(1); + let foreignDocument = document.foreignDocuments.values().next().value; let response = { - uri: foreign_document.uri, + uri: foreignDocument.uri, diagnostics: [ { source: 'pyflakes', @@ -315,58 +356,72 @@ describe('Diagnostics', () => { } as lsProtocol.PublishDiagnosticsParams; // test guards against wrongly propagated responses: - feature.handleDiagnostic(null as any, response); + await feature.handleDiagnostic(response, foreignDocument, env.adapter); + let cm_editors = env.adapter.editors.map( - ce_editor => (ce_editor as CodeMirrorEditor).editor + editor => editor.ceEditor.getEditor()! as CodeMirrorEditor ); - let marks_cell_1 = cm_editors[0].getDoc().getAllMarks(); - let marks_cell_2 = cm_editors[1].getDoc().getAllMarks(); + let marks_cell_1 = getDiagnostics(cm_editors[0].state); + let marks_cell_2 = getDiagnostics(cm_editors[1].state); - expect(marks_cell_1.length).to.equal(0); - expect(marks_cell_2.length).to.equal(0); + expect(marks_cell_1.length).toBe(0); + expect(marks_cell_2.length).toBe(0); // correct propagation - foreign_feature.handleDiagnostic(null as any, response); + await feature.handleDiagnostic( + response, + env.adapter.virtualDocument!, + env.adapter + ); - marks_cell_1 = cm_editors[0].getDoc().getAllMarks(); - marks_cell_2 = cm_editors[1].getDoc().getAllMarks(); + marks_cell_1 = getDiagnostics(cm_editors[0].state); + marks_cell_2 = getDiagnostics(cm_editors[1].state); - expect(marks_cell_1.length).to.equal(0); - expect(marks_cell_2.length).to.equal(1); + expect(marks_cell_1.length).toBe(0); + expect(marks_cell_2.length).toBe(1); - let mark = marks_cell_2[0] as TextMarker; + let mark = marks_cell_2[0]; - let mark_position = mark.find()!; + const from = cm_editors[1].getPositionAt(mark.from); + const to = cm_editors[1].getPositionAt(mark.to); // second line (0th and 1st virtual lines) + 1 line for '%%python\n' => line: 2 - expect(is_equal(mark_position.from, { line: 2, ch: 0 })).to.be.true; - expect(is_equal(mark_position.to, { line: 2, ch: 1 })).to.be.true; + expect( + isEqual({ line: from.line, ch: from.column }, { line: 2, ch: 0 }) + ).toBe(true); + expect( + isEqual({ line: to.line, ch: to.column }, { line: 2, ch: 1 }) + ).toBe(true); // the silenced diagnostic for the %%python magic should be ignored - feature.handleDiagnostic(null as any, { - uri: document.uri, - diagnostics: [ - { - source: 'pyflakes', - range: { - start: { line: 5, character: 0 }, - end: { line: 5, character: 52 } - }, - message: "undefined name 'get_ipython'", - severity: 1 - } - ] - }); + await feature.handleDiagnostic( + { + uri: document.uri, + diagnostics: [ + { + source: 'pyflakes', + range: { + start: { line: 5, character: 0 }, + end: { line: 5, character: 52 } + }, + message: "undefined name 'get_ipython'", + severity: 1 + } + ] + }, + document!, + env.adapter + ); - expect(marks_cell_1.length).to.equal(0); + expect(marks_cell_1.length).toBe(0); }); }); }); describe('message_without_code', () => { it('Removes redundant code', () => { - let message = message_without_code({ + let message = messageWithoutCode({ source: 'pycodestyle', range: { start: { line: 4, character: 0 }, @@ -376,11 +431,11 @@ describe('message_without_code', () => { code: 'W293', severity: 2 }); - expect(message).to.be.equal('blank line contains whitespace'); + expect(message).toBe('blank line contains whitespace'); }); it('Keeps messages without code intact', () => { - let message = message_without_code({ + let message = messageWithoutCode({ source: 'pyflakes', range: { start: { line: 1, character: 0 }, @@ -392,6 +447,6 @@ describe('message_without_code', () => { message: "undefined name 'x'", severity: 1 }); - expect(message).to.be.equal("undefined name 'x'"); + expect(message).toBe("undefined name 'x'"); }); }); diff --git a/packages/jupyterlab-lsp/src/features/diagnostics/diagnostics.ts b/packages/jupyterlab-lsp/src/features/diagnostics/diagnostics.ts index e57a60242..4ae989fb3 100644 --- a/packages/jupyterlab-lsp/src/features/diagnostics/diagnostics.ts +++ b/packages/jupyterlab-lsp/src/features/diagnostics/diagnostics.ts @@ -1,30 +1,18 @@ import { JupyterFrontEnd } from '@jupyterlab/application'; -import { MainAreaWidget } from '@jupyterlab/apputils'; +import { MainAreaWidget, Notification } from '@jupyterlab/apputils'; import { nullTranslator, TranslationBundle } from '@jupyterlab/translation'; import { LabIcon, copyIcon } from '@jupyterlab/ui-components'; import { Menu } from '@lumino/widgets'; -import type * as CodeMirror from 'codemirror'; -import type * as lsProtocol from 'vscode-languageserver-protocol'; import diagnosticsSvg from '../../../style/icons/diagnostics.svg'; -import { CodeDiagnostics as LSPDiagnosticsSettings } from '../../_diagnostics'; -import { LSPConnection } from '../../connection'; -import { PositionConverter } from '../../converter'; -import { CodeMirrorIntegration } from '../../editor_integration/codemirror'; -import { FeatureSettings } from '../../feature'; -import { DiagnosticSeverity, DiagnosticTag } from '../../lsp'; -import { IEditorPosition, IVirtualPosition } from '../../positioning'; -import { DefaultMap, uris_equal } from '../../utils'; -import { CodeMirrorVirtualEditor } from '../../virtual/codemirror_editor'; -import { VirtualDocument } from '../../virtual/document'; import { jumpToIcon } from '../jump_to'; +import { DiagnosticsFeature } from './feature'; import { DIAGNOSTICS_LISTING_CLASS, DiagnosticsDatabase, DiagnosticsListing, - IDiagnosticsRow, - IEditorDiagnostic + IDiagnosticsRow } from './listing'; export const diagnosticsIcon = new LabIcon({ @@ -52,7 +40,7 @@ function escapeRegExp(string: string) { class DiagnosticsPanel { private _content: DiagnosticsListing | null = null; private _widget: MainAreaWidget | null = null; - feature: DiagnosticsCM; + feature: DiagnosticsFeature; is_registered = false; trans: TranslationBundle; @@ -260,7 +248,7 @@ class DiagnosticsPanel { navigator.clipboard .writeText(message) .then(() => { - this.content.model.status_message.set( + Notification.info( this.trans.__('Successfully copied "%1" to clipboard', message) ); }) @@ -298,526 +286,6 @@ class DiagnosticsPanel { } } -export const diagnostics_panel = new DiagnosticsPanel( +export const diagnosticsPanel = new DiagnosticsPanel( nullTranslator.load('jupyterlab_lsp') ); -export const diagnostics_databases = new WeakMap< - CodeMirrorVirtualEditor, - DiagnosticsDatabase ->(); - -interface IMarkerDefinition { - options: CodeMirror.TextMarkerOptions; - start: IEditorPosition; - end: IEditorPosition; - hash: string; -} - -interface IMarkedDiagnostic { - editor: CodeMirror.Editor; - marker: CodeMirror.TextMarker; -} - -export class DiagnosticsCM extends CodeMirrorIntegration { - private last_response: lsProtocol.PublishDiagnosticsParams; - - get settings() { - return super.settings as FeatureSettings; - } - - register(): void { - // this.connection_handlers.set('diagnostic', this.handleDiagnostic); - // TODO: unregister - this.connection.serverNotifications[ - 'textDocument/publishDiagnostics' - ].connect(this.handleDiagnostic); - - this.wrapper_handlers.set('focusin', this.switchDiagnosticsPanelSource); - this.unique_editor_ids = new DefaultMap(() => this.unique_editor_ids.size); - this.settings.changed.connect(this.refreshDiagnostics, this); - this.adapter.adapterConnected.connect(() => - this.switchDiagnosticsPanelSource() - ); - this.virtual_document.foreign_document_closed.connect( - (document, context) => { - this.clearDocumentDiagnostics(context.foreign_document); - } - ); - super.register(); - } - - clearDocumentDiagnostics(document: VirtualDocument) { - this.diagnostics_db.set(document, []); - } - - private unique_editor_ids: DefaultMap; - private marked_diagnostics: Map = new Map(); - /** - * Allows access to the most recent diagnostics in context of the editor. - * - * One can use VirtualEditorForNotebook.find_cell_by_editor() to find - * the corresponding cell in notebook. - * Can be used to implement a Panel showing diagnostics list. - * - * Maps virtual_document.uri to IEditorDiagnostic[]. - */ - public get diagnostics_db(): DiagnosticsDatabase { - // Note that virtual_editor can change at runtime (kernel restart) - if (!diagnostics_databases.has(this.virtual_editor)) { - diagnostics_databases.set(this.virtual_editor, new DiagnosticsDatabase()); - } - return diagnostics_databases.get(this.virtual_editor)!; - } - - switchDiagnosticsPanelSource = () => { - diagnostics_panel.trans = this.adapter.trans; - if ( - diagnostics_panel.content.model.virtual_editor === this.virtual_editor && - diagnostics_panel.content.model.diagnostics == this.diagnostics_db - ) { - return; - } - diagnostics_panel.content.model.diagnostics = this.diagnostics_db; - diagnostics_panel.content.model.virtual_editor = this.virtual_editor; - diagnostics_panel.content.model.adapter = this.adapter; - diagnostics_panel.content.model.settings = this.settings; - diagnostics_panel.content.model.status_message = this.status_message; - diagnostics_panel.feature = this; - diagnostics_panel.update(); - }; - - protected collapseOverlappingDiagnostics( - diagnostics: lsProtocol.Diagnostic[] - ): Map { - // because Range is not a primitive type, the equality of the objects having - // the same parameters won't be compared (thus considered equal) in Map. - - // instead, a intermediate step of mapping through a stringified representation of Range is needed: - // an alternative would be using nested [start line][start character][end line][end character] structure, - // which would increase the code complexity, but reduce memory use and may be slightly faster. - type RangeID = string; - const range_id_to_range = new Map(); - const range_id_to_diagnostics = new Map(); - - function get_range_id(range: lsProtocol.Range): RangeID { - return ( - range.start.line + - ',' + - range.start.character + - ',' + - range.end.line + - ',' + - range.end.character - ); - } - - diagnostics.forEach((diagnostic: lsProtocol.Diagnostic) => { - let range = diagnostic.range; - let range_id = get_range_id(range); - range_id_to_range.set(range_id, range); - if (range_id_to_diagnostics.has(range_id)) { - let ranges_list = range_id_to_diagnostics.get(range_id)!; - ranges_list.push(diagnostic); - } else { - range_id_to_diagnostics.set(range_id, [diagnostic]); - } - }); - - let map = new Map(); - - range_id_to_diagnostics.forEach( - (range_diagnostics: lsProtocol.Diagnostic[], range_id: RangeID) => { - let range = range_id_to_range.get(range_id)!; - map.set(range, range_diagnostics); - } - ); - - return map; - } - - get defaultSeverity(): lsProtocol.DiagnosticSeverity { - return DiagnosticSeverity[this.settings.composite.defaultSeverity]; - } - - private filterDiagnostics( - diagnostics: lsProtocol.Diagnostic[] - ): lsProtocol.Diagnostic[] { - const ignoredDiagnosticsCodes = new Set( - this.settings.composite.ignoreCodes - ); - const ignoredSeverities = new Set( - this.settings.composite.ignoreSeverities.map( - severityName => DiagnosticSeverity[severityName] - ) - ); - const ignoredMessagesRegExp = - this.settings.composite.ignoreMessagesPatterns.map( - pattern => new RegExp(pattern) - ); - - return diagnostics.filter(diagnostic => { - let code = diagnostic.code; - if ( - typeof code !== 'undefined' && - // pygls servers return code null if value is missing (rather than undefined) - // which is a departure from the LSP specs: https://microsoft.github.io/language-server-protocol/specification#diagnostic - // there is an open issue: https://github.com/openlawlibrary/pygls/issues/124 - // and PR: https://github.com/openlawlibrary/pygls/pull/132 - // this also affects hover tooltips. - code !== null && - ignoredDiagnosticsCodes.has(code.toString()) - ) { - return false; - } - let severity = diagnostic.severity; - if (severity && ignoredSeverities.has(severity)) { - return false; - } - let message = diagnostic.message; - if ( - message && - ignoredMessagesRegExp.some(pattern => pattern.test(message)) - ) { - return false; - } - return true; - }); - } - - setDiagnostics(response: lsProtocol.PublishDiagnosticsParams) { - let diagnostics_list: IEditorDiagnostic[] = []; - - // Note: no deep equal for Sets or Maps in JS - const markers_to_retain: Set = new Set(); - - // add new markers, keep track of the added ones - - // TODO: test case for severity class always being set, even if diagnostic has no severity - - let diagnostics_by_range = this.collapseOverlappingDiagnostics( - this.filterDiagnostics(response.diagnostics) - ); - - const markerOptionsByEditor = new Map< - CodeMirror.Editor, - IMarkerDefinition[] - >(); - - diagnostics_by_range.forEach( - (diagnostics: lsProtocol.Diagnostic[], range: lsProtocol.Range) => { - const start = PositionConverter.lsp_to_cm( - range.start - ) as IVirtualPosition; - const end = PositionConverter.lsp_to_cm(range.end) as IVirtualPosition; - const last_line_number = - this.virtual_document.last_virtual_line - - this.virtual_document.blank_lines_between_cells; - if (start.line > last_line_number) { - this.console.log( - `Out of range diagnostic (${start.line} line > ${last_line_number}) was skipped `, - diagnostics - ); - return; - } else { - let last_line = this.virtual_document.last_line; - if (start.line == last_line_number && start.ch > last_line.length) { - this.console.log( - `Out of range diagnostic (${start.ch} character > ${last_line.length} at line ${last_line_number}) was skipped `, - diagnostics - ); - return; - } - } - - let document: VirtualDocument; - try { - // assuming that we got a response for this document - let start_in_root = - this.transform_virtual_position_to_root_position(start); - document = - this.virtual_editor.document_at_root_position(start_in_root); - } catch (e) { - this.console.warn( - `Could not place inspections from ${response.uri}`, - ` inspections: `, - diagnostics, - 'error: ', - e - ); - return; - } - - // This may happen if the response came delayed - // and the user already changed the document so - // that now this regions is in another virtual document! - if (this.virtual_document !== document) { - this.console.log( - `Ignoring inspections from ${response.uri}`, - ` (this region is covered by a another virtual document: ${document.uri})`, - ` inspections: `, - diagnostics - ); - return; - } - - if ( - document.virtual_lines - .get(start.line)! - .skip_inspect.indexOf(document.id_path) !== -1 - ) { - this.console.log( - 'Ignoring inspections silenced for this document:', - diagnostics - ); - return; - } - - let ce_editor = document.get_editor_at_virtual_line(start); - let cm_editor = - this.virtual_editor.ce_editor_to_cm_editor.get(ce_editor)!; - - let start_in_editor = document.transform_virtual_to_editor(start); - let end_in_editor: IEditorPosition | null; - - if (start_in_editor === null) { - this.console.warn( - 'Start in editor could not be be determined for', - diagnostics - ); - return; - } - - // some servers return strange positions for ends - try { - end_in_editor = document.transform_virtual_to_editor(end); - } catch (err) { - this.console.warn('Malformed range for diagnostic', end); - end_in_editor = { ...start_in_editor, ch: start_in_editor.ch + 1 }; - } - - if (end_in_editor === null) { - this.console.warn( - 'End in editor could not be be determined for', - diagnostics - ); - return; - } - - let range_in_editor = { - start: start_in_editor, - end: end_in_editor - }; - // what a pity there is no hash in the standard library... - // we could use this: https://stackoverflow.com/a/7616484 though it may not be worth it: - // the stringified diagnostic objects are only about 100-200 JS characters anyway, - // depending on the message length; this could be reduced using some structure-aware - // stringifier; such a stringifier could also prevent the possibility of having a false - // negative due to a different ordering of keys - // obviously, the hash would prevent recovery of info from the key. - let diagnostic_hash = JSON.stringify({ - // diagnostics without ranges - diagnostics: diagnostics.map(diagnostic => [ - diagnostic.severity, - diagnostic.message, - diagnostic.code, - diagnostic.source, - diagnostic.relatedInformation - ]), - // the apparent marker position will change in the notebook with every line change for each marker - // after the (inserted/removed) line - but such markers should not be invalidated, - // i.e. the invalidation should be performed in the cell space, not in the notebook coordinate space, - // thus we transform the coordinates and keep the cell id in the hash - range: range_in_editor, - editor: this.unique_editor_ids.get(cm_editor) - }); - for (let diagnostic of diagnostics) { - diagnostics_list.push({ - diagnostic, - editor: cm_editor, - range: range_in_editor - }); - } - - markers_to_retain.add(diagnostic_hash); - - if (!this.marked_diagnostics.has(diagnostic_hash)) { - const highestSeverityCode = diagnostics - .map(diagnostic => diagnostic.severity || this.defaultSeverity) - .sort()[0]; - - const severity = DiagnosticSeverity[highestSeverityCode]; - - const classNames = [ - 'cm-lsp-diagnostic', - 'cm-lsp-diagnostic-' + severity - ]; - - const tags: lsProtocol.DiagnosticTag[] = []; - for (let diagnostic of diagnostics) { - if (diagnostic.tags) { - tags.push(...diagnostic.tags); - } - } - for (const tag of new Set(tags)) { - classNames.push('cm-lsp-diagnostic-tag-' + DiagnosticTag[tag]); - } - let options: CodeMirror.TextMarkerOptions = { - title: diagnostics - .map(d => d.message + (d.source ? ' (' + d.source + ')' : '')) - .join('\n'), - className: classNames.join(' ') - }; - - let optionsList = markerOptionsByEditor.get(cm_editor); - if (!optionsList) { - optionsList = []; - markerOptionsByEditor.set(cm_editor, optionsList); - } - optionsList.push({ - options, - start: start_in_editor, - end: end_in_editor, - hash: diagnostic_hash - }); - } - } - ); - - for (const [ - cmEditor, - markerDefinitions - ] of markerOptionsByEditor.entries()) { - // note: could possibly be wrapped in `requestAnimationFrame()` - // at a risk of sometimes having an inconsistent state in database. - // note: using `operation()` significantly improves performance. - // test cases: - // - one cell with 1000 `math.pi` and `import math`; comment out import, - // wait for 1000 diagnostics, then uncomment import, wait for removal: - // - before: - // - diagnostics show up in: 13.6s (blocking!) - // - diagnostics removal in: 13.2s (blocking!) - // - after: - // - diagnostics show up in: 254ms - // - diagnostics removal in: 160.4ms - // - first open of a notebook with 10 cells, each with 88 diagnostics: - // - before: 2.75s (each time) - // - after 208.75ms (order of magnitude faster!) - // - first open of a notebook with 100 cells, each with 1 diagnostic - // this scenario is expected to have no gain (measures overhead) - // - before 280.34ms, 377ms, 399ms - // - after 385.29ms, 301.97ms, 309.4ms - cmEditor.operation(() => { - const doc = cmEditor.getDoc(); - for (const definition of markerDefinitions) { - let marker; - try { - marker = doc.markText( - definition.start, - definition.end, - definition.options - ); - } catch (e) { - this.console.warn( - 'Marking inspection (diagnostic text) failed:', - definition, - e - ); - return; - } - this.marked_diagnostics.set(definition.hash, { - marker, - editor: cmEditor - }); - } - }); - } - - // remove the markers which were not included in the new message - this.removeUnusedDiagnosticMarkers(markers_to_retain); - - this.diagnostics_db.set(this.virtual_document, diagnostics_list); - } - - public handleDiagnostic = ( - connection: LSPConnection, - response: lsProtocol.PublishDiagnosticsParams - ) => { - // use optional chaining operator because the diagnostics message may come late (after the document was disposed) - if (!uris_equal(response.uri, this.virtual_document?.document_info?.uri)) { - return; - } - - if (this.virtual_document.last_virtual_line === 0) { - return; - } - - /* TODO: gutters */ - try { - this.last_response = response; - this.setDiagnostics(response); - diagnostics_panel.update(); - } catch (e) { - this.console.warn(e); - } - }; - - public refreshDiagnostics() { - if (this.last_response) { - this.setDiagnostics(this.last_response); - } - diagnostics_panel.update(); - } - - protected removeUnusedDiagnosticMarkers(to_retain: Set) { - const toRemoveByEditor = new Map< - CodeMirror.Editor, - { marker: CodeMirror.TextMarker; hash: string }[] - >(); - - for (const [ - diagnosticHash, - markedDiagnostic - ] of this.marked_diagnostics.entries()) { - if (!to_retain.has(diagnosticHash)) { - let diagnosticsList = toRemoveByEditor.get(markedDiagnostic.editor); - if (!diagnosticsList) { - diagnosticsList = []; - toRemoveByEditor.set(markedDiagnostic.editor, diagnosticsList); - } - diagnosticsList.push({ - marker: markedDiagnostic.marker, - hash: diagnosticHash - }); - } - } - - for (const [cmEditor, markers] of toRemoveByEditor.entries()) { - cmEditor.operation(() => { - for (const markerData of markers) { - markerData.marker.clear(); - this.marked_diagnostics.delete(markerData.hash); - } - }); - } - } - - remove(): void { - this.settings.changed.disconnect(this.refreshDiagnostics, this); - // remove all markers - this.removeUnusedDiagnosticMarkers(new Set()); - this.diagnostics_db.clear(); - diagnostics_databases.delete(this.virtual_editor); - this.unique_editor_ids.clear(); - - if ( - diagnostics_panel.content.model.virtual_editor === this.virtual_editor - ) { - diagnostics_panel.content.model.virtual_editor = null; - diagnostics_panel.content.model.diagnostics = null; - diagnostics_panel.content.model.adapter = null; - } - - diagnostics_panel.update(); - super.remove(); - } -} diff --git a/packages/jupyterlab-lsp/src/features/diagnostics/feature.ts b/packages/jupyterlab-lsp/src/features/diagnostics/feature.ts new file mode 100644 index 000000000..34c514cb9 --- /dev/null +++ b/packages/jupyterlab-lsp/src/features/diagnostics/feature.ts @@ -0,0 +1,593 @@ +import { linter, Diagnostic, lintGutter } from '@codemirror/lint'; +import { StateField, StateEffect, StateEffectType } from '@codemirror/state'; +import { EditorView } from '@codemirror/view'; +import { INotebookShell } from '@jupyter-notebook/application'; +import { ILabShell } from '@jupyterlab/application'; +import { IThemeManager } from '@jupyterlab/apputils'; +import { + CodeMirrorEditor, + IEditorExtensionRegistry, + EditorExtensionRegistry +} from '@jupyterlab/codemirror'; +import { + WidgetLSPAdapter, + IEditorPosition, + IVirtualPosition, + ILSPConnection, + VirtualDocument +} from '@jupyterlab/lsp'; +import { TranslationBundle } from '@jupyterlab/translation'; +import { PromiseDelegate } from '@lumino/coreutils'; +import * as lsProtocol from 'vscode-languageserver-protocol'; + +import { CodeDiagnostics as LSPDiagnosticsSettings } from '../../_diagnostics'; +import { PositionConverter } from '../../converter'; +import { IFeatureSettings, Feature } from '../../feature'; +import { DiagnosticSeverity, DiagnosticTag } from '../../lsp'; +import { PLUGIN_ID } from '../../tokens'; +import { uris_equal } from '../../utils'; +import { BrowserConsole } from '../../virtual/console'; + +import { diagnosticsPanel } from './diagnostics'; +import { DiagnosticsDatabase } from './listing'; +import { IDiagnosticsFeature, IEditorDiagnostic } from './tokens'; +import { underline } from './underline'; + +const SeverityMap: Record< + 1 | 2 | 3 | 4, + 'error' | 'warning' | 'info' | 'hint' +> = { + 1: 'error', + 2: 'warning', + 3: 'info', + 4: 'hint' +}; + +export class DiagnosticsFeature extends Feature implements IDiagnosticsFeature { + readonly id = DiagnosticsFeature.id; + readonly capabilities: lsProtocol.ClientCapabilities = { + textDocument: { + publishDiagnostics: { + tagSupport: { + valueSet: [DiagnosticTag.Deprecated, DiagnosticTag.Unnecessary] + } + } + } + }; + protected settings: IFeatureSettings; + protected console = new BrowserConsole().scope('Diagnostics'); + private _responseReceived: PromiseDelegate = new PromiseDelegate(); + private _diagnosticsDatabases = new WeakMap< + WidgetLSPAdapter, + DiagnosticsDatabase + >(); + + constructor(options: DiagnosticsFeature.IOptions) { + super(options); + this.settings = options.settings; + + options.connectionManager.connected.connect((manager, connectionData) => { + const { connection, virtualDocument } = connectionData; + const adapter = manager.adapters.get(virtualDocument.root.path)!; + // TODO: unregister + connection.serverNotifications['textDocument/publishDiagnostics'].connect( + async (connection: ILSPConnection, diagnostics) => { + await this.handleDiagnostic(diagnostics, virtualDocument, adapter); + } + ); + virtualDocument.foreignDocumentClosed.connect((document, context) => { + // TODO: check if we need to cast + this.clearDocumentDiagnostics(adapter, context.foreignDocument); + }); + }); + + //this.unique_editor_ids = new DefaultMap(() => this.unique_editor_ids.size); + this.settings.changed.connect(this.refreshDiagnostics, this); + this._trans = options.trans; + this._invalidate = StateEffect.define(); + this._invalidationCounter = StateField.define({ + create: () => 0, + update: (value, tr) => { + for (const e of tr.effects) { + if (e.is(this._invalidate)) { + value += 1; + } + } + return value; + } + }); + const connectionManager = options.connectionManager; + // https://github.com/jupyterlab/jupyterlab/issues/14783 + options.shell.currentChanged.connect(shell => { + const adapter = [...connectionManager.adapters.values()].find( + adapter => adapter.widget == shell.currentWidget + ); + + if (!adapter) { + this.console.debug('No adapter'); + } else { + this.switchDiagnosticsPanelSource(adapter); + } + }); + + const settings = options.settings; + const themeManager = options.themeManager; + + this._reconfigureTheme(); + document.head.appendChild(this._styleElement); + + if (themeManager) { + themeManager.themeChanged.connect(() => { + this._reconfigureTheme(); + }); + } + + options.editorExtensionRegistry.addExtension({ + name: 'lsp:diagnostics', + factory: options => { + const source = async (view: EditorView) => { + let diagnostics: Diagnostic[] = []; + + const adapter = [...connectionManager.adapters.values()].find( + adapter => adapter.widget.node.contains(view.contentDOM) // this is going to be problematic with the windowed notebook. Another solution is needed. + ); + + if (!adapter) { + this.console.debug( + 'No adapter found for editor by model. Maybe not registered yet?' + ); + return []; + } + // NHT: `response.version` could be checked against document versions + // and if non matches we could yield (raise an error or hang for a + // few seconds to trigger timeout). Because `response.version` is + // optional it would require further testing. + + await adapter.updateFinished; + await this._responseReceived.promise; + + const database = this.getDiagnosticsDB(adapter); + + for (const [_, editorDiagnostics] of database.entries()) { + for (const editorDiagnostic of editorDiagnostics) { + if (editorDiagnostic.editor.editor !== view) { + continue; + } + const diagnostic = editorDiagnostic.diagnostic; + const severity = SeverityMap[diagnostic.severity!]; + + const lines = view.state.doc.lines; + const lastLineLength = view.state.doc.line(lines).length; + const start = PositionConverter.cm_to_ce( + editorDiagnostic.range.start + ); + const end = PositionConverter.cm_to_ce( + editorDiagnostic.range.end + ); + + const from = editorDiagnostic.editor.getOffsetAt( + start.line >= lines + ? { + line: Math.min(start.line, lines), + column: Math.min(start.column, lastLineLength) + } + : start + ); + // TODO: this is wrong; there is however an issue if this is not applied + const to = editorDiagnostic.editor.getOffsetAt( + end.line >= lines + ? { + line: Math.min(end.line, lines), + column: Math.min(end.column, lastLineLength) + } + : end + ); + + const classNames = []; + for (const tag of new Set(diagnostic.tags)) { + classNames.push('cm-lsp-diagnostic-tag-' + DiagnosticTag[tag]); + } + + diagnostics.push({ + from: Math.min(from, view.state.doc.length), + to: Math.min(to, view.state.doc.length), + severity: severity, + message: diagnostic.message, + source: diagnostic.source, + markClass: classNames.join(' ') + // TODO: actions + }); + } + } + return diagnostics; + }; + + // never run linter on typing - we will trigger it manually when update is needed + const lspLinter = linter(source, { + delay: settings.composite.debounceDelay || 250, + needsRefresh: update => { + const previous = update.startState.field(this._invalidationCounter); + const current = update.state.field(this._invalidationCounter); + return previous !== current; + } + }); + + const extensions = [lspLinter, this._invalidationCounter]; + if (settings.composite.gutter) { + extensions.push(lintGutter()); + } + + return EditorExtensionRegistry.createImmutableExtension(extensions); + } + }); + } + + private _reconfigureTheme() { + const style = getComputedStyle(document.body); + const baseTheme = EditorView.baseTheme({ + '.cm-lintRange-error': { + backgroundImage: underline( + style.getPropertyValue( + '--jp-editor-mirror-lsp-diagnostic-error-decoration-color' + ) + ) + }, + '.cm-lintRange-warning': { + backgroundImage: underline( + style.getPropertyValue( + '--jp-editor-mirror-lsp-diagnostic-warning-decoration-color' + ) + ) + }, + '.cm-lintRange-info': { + backgroundImage: underline( + style.getPropertyValue( + '--jp-editor-mirror-lsp-diagnostic-information-decoration-color' + ) + ) + }, + '.cm-lintRange-hint': { + backgroundImage: underline( + style.getPropertyValue( + '--jp-editor-mirror-lsp-diagnostic-hint-decoration-color' + ) + ) + } + }); + const tempEditor = new EditorView({ extensions: baseTheme }); + const styleModules = tempEditor.state.facet(EditorView.styleModule); + const ourRules = styleModules.find(styleModule => { + const rules = styleModule.getRules().split('\n'); + return rules.every(rule => rule.includes('cm-lintRange')); + })!; + this._styleElement.innerHTML = ourRules.getRules(); + } + + clearDocumentDiagnostics( + adapter: WidgetLSPAdapter, + document: VirtualDocument + ) { + this.getDiagnosticsDB(adapter).set(document, []); + } + + /** + * Allows access to the most recent diagnostics in context of the editor. + * + * One can use VirtualEditorForNotebook.find_cell_by_editor() to find + * the corresponding cell in notebook. + * Can be used to implement a Panel showing diagnostics list. + * + * Maps virtualDocument.uri to IEditorDiagnostic[]. + */ + public getDiagnosticsDB(adapter: WidgetLSPAdapter): DiagnosticsDatabase { + // Note that virtual_editor can change at runtime (kernel restart) + if (!this._diagnosticsDatabases.has(adapter)) { + this._diagnosticsDatabases.set(adapter, new DiagnosticsDatabase()); + } + return this._diagnosticsDatabases.get(adapter)!; + } + + switchDiagnosticsPanelSource = (adapter: WidgetLSPAdapter) => { + diagnosticsPanel.trans = this._trans; + const diagnostics = this.getDiagnosticsDB(adapter); + if (diagnosticsPanel.content.model.diagnostics == diagnostics) { + return; + } + diagnosticsPanel.content.model.diagnostics = diagnostics; + diagnosticsPanel.content.model.adapter = adapter; + diagnosticsPanel.content.model.settings = this.settings; + diagnosticsPanel.feature = this; + diagnosticsPanel.update(); + }; + + protected diagnosticsByRange( + diagnostics: lsProtocol.Diagnostic[] + ): Map { + // because Range is not a primitive type, the equality of the objects having + // the same parameters won't be compared (thus considered equal) in Map. + + // instead, a intermediate step of mapping through a stringified representation of Range is needed: + // an alternative would be using nested [start line][start character][end line][end character] structure, + // which would increase the code complexity, but reduce memory use and may be slightly faster. + type RangeID = string; + const range_id_to_range = new Map(); + const range_id_to_diagnostics = new Map(); + + function get_range_id(range: lsProtocol.Range): RangeID { + return ( + range.start.line + + ',' + + range.start.character + + ',' + + range.end.line + + ',' + + range.end.character + ); + } + + diagnostics.forEach((diagnostic: lsProtocol.Diagnostic) => { + let range = diagnostic.range; + let range_id = get_range_id(range); + range_id_to_range.set(range_id, range); + if (range_id_to_diagnostics.has(range_id)) { + let ranges_list = range_id_to_diagnostics.get(range_id)!; + ranges_list.push(diagnostic); + } else { + range_id_to_diagnostics.set(range_id, [diagnostic]); + } + }); + + let map = new Map(); + + range_id_to_diagnostics.forEach( + (range_diagnostics: lsProtocol.Diagnostic[], range_id: RangeID) => { + let range = range_id_to_range.get(range_id)!; + map.set(range, range_diagnostics); + } + ); + + return map; + } + + get defaultSeverity(): lsProtocol.DiagnosticSeverity { + return DiagnosticSeverity[this.settings.composite.defaultSeverity]; + } + + private filterDiagnostics( + diagnostics: lsProtocol.Diagnostic[] + ): lsProtocol.Diagnostic[] { + const ignoredDiagnosticsCodes = new Set( + this.settings.composite.ignoreCodes + ); + const ignoredSeverities = new Set( + this.settings.composite.ignoreSeverities.map( + severityName => DiagnosticSeverity[severityName] + ) + ); + const ignoredMessagesRegExp = + this.settings.composite.ignoreMessagesPatterns.map( + pattern => new RegExp(pattern) + ); + + return diagnostics.filter(diagnostic => { + let code = diagnostic.code; + if ( + typeof code !== 'undefined' && + // pygls servers return code null if value is missing (rather than undefined) + // which is a departure from the LSP specs: https://microsoft.github.io/language-server-protocol/specification#diagnostic + // there is an open issue: https://github.com/openlawlibrary/pygls/issues/124 + // and PR: https://github.com/openlawlibrary/pygls/pull/132 + // this also affects hover tooltips. + code !== null && + ignoredDiagnosticsCodes.has(code.toString()) + ) { + return false; + } + let severity = diagnostic.severity; + if (severity && ignoredSeverities.has(severity)) { + return false; + } + let message = diagnostic.message; + if ( + message && + ignoredMessagesRegExp.some(pattern => pattern.test(message)) + ) { + return false; + } + return true; + }); + } + + setDiagnostics( + response: lsProtocol.PublishDiagnosticsParams, + document: VirtualDocument, + adapter: WidgetLSPAdapter + ) { + let diagnosticsList: IEditorDiagnostic[] = []; + // TODO: test case for severity class always being set, even if diagnostic has no severity + + let diagnosticsByRange = this.diagnosticsByRange( + this.filterDiagnostics(response.diagnostics) + ); + + diagnosticsByRange.forEach( + (diagnostics: lsProtocol.Diagnostic[], range: lsProtocol.Range) => { + const start = PositionConverter.lsp_to_cm( + range.start + ) as IVirtualPosition; + const end = PositionConverter.lsp_to_cm(range.end) as IVirtualPosition; + const last_line_number = + document.lastVirtualLine - document.blankLinesBetweenCells; + if (start.line > last_line_number) { + this.console.log( + `Out of range diagnostic (${start.line} line > ${last_line_number}) was skipped `, + diagnostics + ); + return; + } else { + let last_line = document.lastLine; + if (start.line == last_line_number && start.ch > last_line.length) { + this.console.log( + `Out of range diagnostic (${start.ch} character > ${last_line.length} at line ${last_line_number}) was skipped `, + diagnostics + ); + return; + } + } + + if ( + // eslint-disable-next-line @typescript-eslint/ban-ts-comment + // @ts-ignore TODO + document.virtualLines + .get(start.line)! + .skipInspect.indexOf(document.idPath) !== -1 + ) { + this.console.log( + 'Ignoring inspections silenced for this document:', + diagnostics, + document.idPath, + start.line + ); + return; + } + + const editorAccessor = document.getEditorAtVirtualLine(start); + const editor = editorAccessor.getEditor()!; + + const startInEditor = document.transformVirtualToEditor(start); + let endInEditor: IEditorPosition | null; + + if (startInEditor === null) { + this.console.warn( + 'Start in editor could not be be determined for', + diagnostics + ); + return; + } + + // some servers return strange positions for ends + try { + endInEditor = document.transformVirtualToEditor(end); + } catch (err) { + this.console.warn('Malformed range for diagnostic', end); + endInEditor = { ...startInEditor, ch: startInEditor.ch + 1 }; + } + + if (endInEditor === null) { + this.console.warn( + 'End in editor could not be be determined for', + diagnostics + ); + return; + } + + for (let diagnostic of diagnostics) { + diagnosticsList.push({ + diagnostic, + editor: editor as CodeMirrorEditor, + range: { + start: startInEditor, + end: endInEditor + } + }); + } + } + ); + + const diagnosticsDB = this.getDiagnosticsDB(adapter); + + const previousList = diagnosticsDB.get(document); + const editorsWhichHadDiagnostics = new Set( + previousList?.map(d => d.editor) + ); + + const editorsWithDiagnostics = new Set(diagnosticsList?.map(d => d.editor)); + diagnosticsDB.set(document, diagnosticsList); + + // Refresh editors with diagnostics; this is needed because linter's + // `source()` method will only refresh the cell with changes, but a change + // in one cell can influence validity of code in all other cells (e.g. due + // to removal of variable definition or usage). + for (const block of adapter.editors) { + const editor = block.ceEditor.getEditor() as CodeMirrorEditor | undefined; + if (!editor) { + continue; + } + if ( + !( + editorsWithDiagnostics.has(editor) || + editorsWhichHadDiagnostics.has(editor) + ) + ) { + continue; + } + + editor.editor.dispatch({ + effects: this._invalidate.of() + }); + } + } + + public handleDiagnostic = async ( + response: lsProtocol.PublishDiagnosticsParams, + document: VirtualDocument, + adapter: WidgetLSPAdapter + ) => { + // use optional chaining operator because the diagnostics message may come late (after the document was disposed) + if (!uris_equal(response.uri, document?.documentInfo?.uri)) { + return; + } + + if (document.lastVirtualLine === 0) { + return; + } + + try { + this._lastResponse = response; + this._lastDocument = document; + this._lastAdapter = adapter; + this.setDiagnostics(response, document, adapter); + const done = new Promise(resolve => { + setTimeout(() => { + this._responseReceived.resolve(); + this._responseReceived = new PromiseDelegate(); + resolve(); + }, 0); + }); + diagnosticsPanel.update(); + return done; + } catch (e) { + this.console.warn(e); + } + }; + + public refreshDiagnostics() { + if (this._lastResponse) { + this.setDiagnostics( + this._lastResponse, + this._lastDocument, + this._lastAdapter + ); + } + diagnosticsPanel.update(); + } + + private _lastResponse: lsProtocol.PublishDiagnosticsParams; + private _lastDocument: VirtualDocument; + private _lastAdapter: WidgetLSPAdapter; + private _trans: TranslationBundle; + private _invalidate: StateEffectType; + private _invalidationCounter: StateField; + private _styleElement: HTMLStyleElement = document.createElement('style'); +} + +export namespace DiagnosticsFeature { + export interface IOptions extends Feature.IOptions { + settings: IFeatureSettings; + shell: ILabShell | INotebookShell; + trans: TranslationBundle; + editorExtensionRegistry: IEditorExtensionRegistry; + themeManager: IThemeManager | null; + } + export const id = PLUGIN_ID + ':diagnostics'; +} diff --git a/packages/jupyterlab-lsp/src/features/diagnostics/index.ts b/packages/jupyterlab-lsp/src/features/diagnostics/index.ts index 17b6218b6..aae9e0780 100644 --- a/packages/jupyterlab-lsp/src/features/diagnostics/index.ts +++ b/packages/jupyterlab-lsp/src/features/diagnostics/index.ts @@ -1,84 +1,123 @@ +import { INotebookShell } from '@jupyter-notebook/application'; import { JupyterFrontEnd, - JupyterFrontEndPlugin + JupyterFrontEndPlugin, + ILabShell } from '@jupyterlab/application'; -import { ISettingRegistry } from '@jupyterlab/settingregistry'; -import { ITranslator, TranslationBundle } from '@jupyterlab/translation'; - -import { FeatureSettings, IFeatureCommand } from '../../feature'; -import { DiagnosticTag } from '../../lsp'; -import { ILSPFeatureManager, PLUGIN_ID } from '../../tokens'; - +import { ICommandPalette, IThemeManager } from '@jupyterlab/apputils'; +import { IEditorExtensionRegistry } from '@jupyterlab/codemirror'; import { - DiagnosticsCM, - diagnosticsIcon, - diagnostics_panel -} from './diagnostics'; - -export const FEATURE_ID = PLUGIN_ID + ':diagnostics'; + ILSPFeatureManager, + ILSPDocumentConnectionManager +} from '@jupyterlab/lsp'; +import { ISettingRegistry } from '@jupyterlab/settingregistry'; +import { ITranslator, nullTranslator } from '@jupyterlab/translation'; -const COMMANDS = (trans: TranslationBundle): IFeatureCommand[] => [ - { - id: 'show-diagnostics-panel', - execute: ({ app, features, adapter }) => { - let diagnostics_feature = features.get(FEATURE_ID) as DiagnosticsCM; - diagnostics_feature.switchDiagnosticsPanelSource(); +import { CodeDiagnostics as LSPDiagnosticsSettings } from '../../_diagnostics'; +import { ContextAssembler } from '../../context'; +import { FeatureSettings } from '../../feature'; - if (!diagnostics_panel.is_registered) { - diagnostics_panel.trans = trans; - diagnostics_panel.register(app); - } +import { diagnosticsIcon, diagnosticsPanel } from './diagnostics'; +import { DiagnosticsFeature } from './feature'; +import { IDiagnosticsFeature } from './tokens'; - const panel_widget = diagnostics_panel.widget; - if (!panel_widget.isAttached) { - app.shell.add(panel_widget, 'main', { - ref: adapter.widget_id, - mode: 'split-bottom' - }); - } - app.shell.activateById(panel_widget.id); - }, - is_enabled: context => { - return context.app.name != 'JupyterLab Classic'; - }, - label: trans.__('Show diagnostics panel'), - rank: 3, - icon: diagnosticsIcon - } -]; +export namespace CommandIDs { + export const showPanel = 'lsp:show-diagnostics-panel'; +} -export const DIAGNOSTICS_PLUGIN: JupyterFrontEndPlugin = { - id: FEATURE_ID, - requires: [ILSPFeatureManager, ISettingRegistry, ITranslator], +export const DIAGNOSTICS_PLUGIN: JupyterFrontEndPlugin = { + id: DiagnosticsFeature.id, + requires: [ + ILSPFeatureManager, + ISettingRegistry, + ILSPDocumentConnectionManager, + IEditorExtensionRegistry + ], + optional: [IThemeManager, ICommandPalette, ITranslator], autoStart: true, - activate: ( + activate: async ( app: JupyterFrontEnd, featureManager: ILSPFeatureManager, settingRegistry: ISettingRegistry, - translator: ITranslator + connectionManager: ILSPDocumentConnectionManager, + editorExtensionRegistry: IEditorExtensionRegistry, + themeManager: IThemeManager | null, + palette: ICommandPalette | null, + translator: ITranslator | null ) => { - const settings = new FeatureSettings(settingRegistry, FEATURE_ID); - const trans = translator.load('jupyterlab_lsp'); + const trans = (translator || nullTranslator).load('jupyterlab_lsp'); + const settings = new FeatureSettings( + settingRegistry, + DiagnosticsFeature.id + ); + await settings.ready; + const feature = new DiagnosticsFeature({ + settings, + connectionManager, + shell: app.shell as ILabShell | INotebookShell, + editorExtensionRegistry, + themeManager, + trans + }); + if (!settings.composite.disable) { + featureManager.register(feature); - featureManager.register({ - feature: { - editorIntegrationFactory: new Map([ - ['CodeMirrorEditor', DiagnosticsCM] - ]), - id: FEATURE_ID, - capabilities: { - textDocument: { - publishDiagnostics: { - tagSupport: { - valueSet: [DiagnosticTag.Deprecated, DiagnosticTag.Unnecessary] - } - } + const assembler = new ContextAssembler({ + app, + connectionManager + }); + + app.commands.addCommand(CommandIDs.showPanel, { + execute: async () => { + const context = assembler.getContext(); + if (!context) { + console.warn('Could not get context'); + return; + } + feature.switchDiagnosticsPanelSource(context.adapter); + + if (!diagnosticsPanel.is_registered) { + diagnosticsPanel.trans = trans; + diagnosticsPanel.register(app); + } + + const panel_widget = diagnosticsPanel.widget; + if (!panel_widget.isAttached) { + app.shell.add(panel_widget, 'main', { + ref: context.adapter.widgetId, + mode: 'split-bottom' + }); } + app.shell.activateById(panel_widget.id); }, - name: 'LSP Diagnostics', - settings: settings, - commands: COMMANDS(trans) + label: trans.__('Show diagnostics panel'), + icon: diagnosticsIcon, + isEnabled: () => { + // TODO notebook + return app.name != 'JupyterLab Classic'; + } + }); + + // add to menus + app.contextMenu.addItem({ + selector: '.jp-Notebook .jp-CodeCell .jp-Editor', + command: CommandIDs.showPanel, + rank: 10 + }); + + app.contextMenu.addItem({ + selector: '.jp-FileEditor', + command: CommandIDs.showPanel, + rank: 0 + }); + + if (palette) { + palette.addItem({ + command: CommandIDs.showPanel, + category: trans.__('Language Server Protocol') + }); } - }); + } + return feature; } }; diff --git a/packages/jupyterlab-lsp/src/features/diagnostics/listing.tsx b/packages/jupyterlab-lsp/src/features/diagnostics/listing.tsx index 1a3583ef7..92e782f44 100644 --- a/packages/jupyterlab-lsp/src/features/diagnostics/listing.tsx +++ b/packages/jupyterlab-lsp/src/features/diagnostics/listing.tsx @@ -1,36 +1,20 @@ import { VDomModel, VDomRenderer } from '@jupyterlab/apputils'; -import { CodeEditor } from '@jupyterlab/codeeditor'; import { IDocumentWidget } from '@jupyterlab/docregistry'; +import { VirtualDocument, WidgetLSPAdapter } from '@jupyterlab/lsp'; import { TranslationBundle } from '@jupyterlab/translation'; import { caretDownIcon, caretUpIcon } from '@jupyterlab/ui-components'; -import type * as CodeMirror from 'codemirror'; import React, { ReactElement } from 'react'; import * as lsProtocol from 'vscode-languageserver-protocol'; import { CodeDiagnostics as LSPDiagnosticsSettings } from '../../_diagnostics'; -import { StatusMessage, WidgetAdapter } from '../../adapters/adapter'; -import { DocumentLocator, focus_on } from '../../components/utils'; -import { FeatureSettings } from '../../feature'; +import { DocumentLocator } from '../../components/utils'; +import { PositionConverter } from '../../converter'; +import { IFeatureSettings } from '../../feature'; import { DiagnosticSeverity } from '../../lsp'; -import { IEditorPosition } from '../../positioning'; -import { CodeMirrorVirtualEditor } from '../../virtual/codemirror_editor'; -import { VirtualDocument } from '../../virtual/document'; -import { IVirtualEditor } from '../../virtual/editor'; -import '../../../style/diagnostics_listing.css'; +import { IEditorDiagnostic } from './tokens'; -/** - * Diagnostic which is localized at a specific editor (cell) within a notebook - * (if used in the context of a FileEditor, then there is just a single editor) - */ -export interface IEditorDiagnostic { - diagnostic: lsProtocol.Diagnostic; - editor: CodeMirror.Editor; - range: { - start: IEditorPosition; - end: IEditorPosition; - }; -} +import '../../../style/diagnostics_listing.css'; export const DIAGNOSTICS_LISTING_CLASS = 'lsp-diagnostics-listing'; const DIAGNOSTICS_PLACEHOLDER_CLASS = 'lsp-diagnostics-placeholder'; @@ -39,7 +23,7 @@ export class DiagnosticsDatabase extends Map< VirtualDocument, IEditorDiagnostic[] > { - get all(): Array { + get all(): IEditorDiagnostic[] { return [].concat.apply([], this.values() as any); } } @@ -56,8 +40,7 @@ export interface IDiagnosticsRow { interface IListingContext { db: DiagnosticsDatabase; - editor: IVirtualEditor; - adapter: WidgetAdapter; + adapter: WidgetLSPAdapter; } interface IColumnOptions { @@ -131,7 +114,7 @@ function SortableTH(props: { ); } -export function message_without_code(diagnostic: lsProtocol.Diagnostic) { +export function messageWithoutCode(diagnostic: lsProtocol.Diagnostic) { let message = diagnostic.message; let code_str = '' + diagnostic.code; if ( @@ -179,14 +162,14 @@ export class DiagnosticsListing extends VDomRenderer { /> ), - sort: (a, b) => a.document.id_path.localeCompare(b.document.id_path), + sort: (a, b) => a.document.idPath.localeCompare(b.document.idPath), is_available: context => context.db.size > 1 }), new Column({ id: 'Message', label: this.trans.__('Message'), render_cell: row => { - let message = message_without_code(row.data.diagnostic); + let message = messageWithoutCode(row.data.diagnostic); return {message}; }, sort: (a, b) => @@ -249,7 +232,7 @@ export class DiagnosticsListing extends VDomRenderer { a.cell_number! - b.cell_number! || a.data.range.start.line - b.data.range.start.line || a.data.range.start.ch - b.data.range.start.ch, - is_available: context => context.adapter.has_multiple_editors + is_available: context => context.adapter.hasMultipleEditors }), new Column({ id: 'Line:Ch', @@ -278,9 +261,8 @@ export class DiagnosticsListing extends VDomRenderer { render() { let diagnostics_db = this.model.diagnostics; - const editor = this.model.virtual_editor; const adapter = this.model.adapter; - if (diagnostics_db == null || editor == null || !adapter) { + if (diagnostics_db == null || !adapter) { return (
    {this.trans.__('Diagnostics are not available')} @@ -296,22 +278,23 @@ export class DiagnosticsListing extends VDomRenderer { } let by_document = Array.from(diagnostics_db).map( - ([virtual_document, diagnostics]) => { - if (virtual_document.isDisposed) { + ([virtualDocument, diagnostics]) => { + if (virtualDocument.isDisposed) { return []; } return diagnostics.map((diagnostic_data, i) => { let cell_number: number | null = null; - if (adapter.has_multiple_editors) { - let { index: cell_id } = editor.find_editor(diagnostic_data.editor); - cell_number = cell_id + 1; + if (adapter.hasMultipleEditors) { + const cellIndex = adapter.editors.findIndex( + value => value.ceEditor.getEditor() == diagnostic_data.editor + ); + cell_number = cellIndex + 1; } return { data: diagnostic_data, - key: virtual_document.uri + ',' + i, - document: virtual_document, - cell_number: cell_number, - editor: editor + key: virtualDocument.uri + ',' + i, + document: virtualDocument, + cell_number: cell_number } as IDiagnosticsRow; }); } @@ -330,7 +313,6 @@ export class DiagnosticsListing extends VDomRenderer { let context: IListingContext = { db: diagnostics_db, - editor: editor, adapter: adapter }; @@ -380,8 +362,9 @@ export class DiagnosticsListing extends VDomRenderer { jump_to(row: IDiagnosticsRow) { const cm_editor = row.data.editor; - focus_on(cm_editor.getWrapperElement()); - cm_editor.getDoc().setCursor(row.data.range.start); + cm_editor.setCursorPosition( + PositionConverter.cm_to_ce(row.data.range.start) + ); cm_editor.focus(); } } @@ -392,10 +375,8 @@ export namespace DiagnosticsListing { */ export class Model extends VDomModel { diagnostics: DiagnosticsDatabase | null; - virtual_editor: CodeMirrorVirtualEditor | null; - adapter: WidgetAdapter | null; - settings: FeatureSettings; - status_message: StatusMessage; + adapter: WidgetLSPAdapter | null; + settings: IFeatureSettings; trans: TranslationBundle; constructor(translator_bundle: TranslationBundle) { diff --git a/packages/jupyterlab-lsp/src/features/diagnostics/tokens.ts b/packages/jupyterlab-lsp/src/features/diagnostics/tokens.ts new file mode 100644 index 000000000..9aa5ecb05 --- /dev/null +++ b/packages/jupyterlab-lsp/src/features/diagnostics/tokens.ts @@ -0,0 +1,39 @@ +import { CodeMirrorEditor } from '@jupyterlab/codemirror'; +import { IEditorPosition, WidgetLSPAdapter } from '@jupyterlab/lsp'; +import { Token } from '@lumino/coreutils'; +import * as lsProtocol from 'vscode-languageserver-protocol'; + +import { PLUGIN_ID } from '../../tokens'; + +/** + * Diagnostic which is localized at a specific editor (cell) within a notebook + * (if used in the context of a FileEditor, then there is just a single editor) + */ +export interface IEditorDiagnostic { + diagnostic: lsProtocol.Diagnostic; + editor: CodeMirrorEditor; + range: { + start: IEditorPosition; + end: IEditorPosition; + }; +} + +export interface IReadonlyDiagnosticsDatabase { + /** + * @alpha + */ + get all(): IEditorDiagnostic[]; +} + +export interface IDiagnosticsFeature { + /** + * @alpha + */ + getDiagnosticsDB( + adapter: WidgetLSPAdapter + ): IReadonlyDiagnosticsDatabase; +} + +export const IDiagnosticsFeature = new Token( + PLUGIN_ID + ':IDiagnosticsFeature' +); diff --git a/packages/jupyterlab-lsp/src/features/diagnostics/underline.ts b/packages/jupyterlab-lsp/src/features/diagnostics/underline.ts new file mode 100644 index 000000000..efc3cb40a --- /dev/null +++ b/packages/jupyterlab-lsp/src/features/diagnostics/underline.ts @@ -0,0 +1,15 @@ +// MIT License +// Copyright (C) 2018-2021 by Marijn Haverbeke and others + +function svg(content: string, attrs = `viewBox="0 0 40 40"`) { + return `url('data:image/svg+xml,${encodeURIComponent( + content + )}')`; +} + +export function underline(color: string) { + return svg( + ``, + `width="6" height="3"` + ); +} diff --git a/packages/jupyterlab-lsp/src/features/highlights.ts b/packages/jupyterlab-lsp/src/features/highlights.ts index 396b8ee54..d66738d62 100644 --- a/packages/jupyterlab-lsp/src/features/highlights.ts +++ b/packages/jupyterlab-lsp/src/features/highlights.ts @@ -1,219 +1,301 @@ +import { EditorView } from '@codemirror/view'; import { JupyterFrontEnd, JupyterFrontEndPlugin } from '@jupyterlab/application'; import { CodeEditor } from '@jupyterlab/codeeditor'; +import { + CodeMirrorEditor, + IEditorExtensionRegistry, + EditorExtensionRegistry +} from '@jupyterlab/codemirror'; +import { + IVirtualPosition, + ILSPFeatureManager, + IEditorPosition, + ILSPDocumentConnectionManager, + WidgetLSPAdapter, + VirtualDocument +} from '@jupyterlab/lsp'; import { ISettingRegistry } from '@jupyterlab/settingregistry'; import { LabIcon } from '@jupyterlab/ui-components'; import { Debouncer } from '@lumino/polling'; -import type * as CodeMirror from 'codemirror'; import type * as lsProtocol from 'vscode-languageserver-protocol'; import highlightSvg from '../../style/icons/highlight.svg'; import { CodeHighlights as LSPHighlightsSettings } from '../_highlights'; -import { CodeMirrorIntegration } from '../editor_integration/codemirror'; -import { FeatureSettings } from '../feature'; -import { DocumentHighlightKind } from '../lsp'; +import { ContextAssembler } from '../context'; import { - IEditorPosition, - IRootPosition, - IVirtualPosition -} from '../positioning'; -import { ILSPFeatureManager, PLUGIN_ID } from '../tokens'; -import { VirtualDocument } from '../virtual/document'; + PositionConverter, + rootPositionToVirtualPosition, + editorPositionToRootPosition, + documentAtRootPosition, + rangeToEditorRange +} from '../converter'; +import { FeatureSettings, Feature } from '../feature'; +import { DocumentHighlightKind } from '../lsp'; +import { createMarkManager, ISimpleMarkManager } from '../marks'; +import { PLUGIN_ID } from '../tokens'; +import { BrowserConsole } from '../virtual/console'; export const highlightIcon = new LabIcon({ name: 'lsp:highlight', svgstr: highlightSvg }); -interface IHighlightDefinition { - options: CodeMirror.TextMarkerOptions; - start: IEditorPosition; - end: IEditorPosition; +interface IEditorHighlight { + kind: DocumentHighlightKind; + from: number; + to: number; } -export class HighlightsCM extends CodeMirrorIntegration { - protected highlightMarkers: Map = - new Map(); - /* - * @deprecated - */ - protected highlight_markers: CodeMirror.TextMarker[]; - private debounced_get_highlight: Debouncer< - lsProtocol.DocumentHighlight[] | undefined - >; - private virtual_position: IVirtualPosition; - private sent_version: number; - private last_token: CodeEditor.IToken | null = null; +export class HighlightsFeature extends Feature { + readonly capabilities: lsProtocol.ClientCapabilities = { + textDocument: { + documentHighlight: { + dynamicRegistration: true + } + } + }; + readonly id = HighlightsFeature.id; - get settings() { - return super.settings as FeatureSettings; - } + protected settings: FeatureSettings; + protected markManager: ISimpleMarkManager; + protected console = new BrowserConsole().scope('Highlights'); - register(): void { - this.debounced_get_highlight = this.create_debouncer(); + private _debouncedGetHighlight: Debouncer< + lsProtocol.DocumentHighlight[] | null, + void, + [VirtualDocument, IVirtualPosition] + >; + private _virtualPosition: IVirtualPosition; + private _versionSent: number; + private _lastToken: CodeEditor.IToken | null = null; + + constructor(options: HighlightsFeature.IOptions) { + super(options); + this.settings = options.settings; + const connectionManager = options.connectionManager; + this.markManager = createMarkManager({ + [DocumentHighlightKind.Text]: { class: 'cm-lsp-highlight-Text' }, + [DocumentHighlightKind.Read]: { class: 'cm-lsp-highlight-Read' }, + [DocumentHighlightKind.Write]: { class: 'cm-lsp-highlight-Write' } + }); + + this._debouncedGetHighlight = this.create_debouncer(); this.settings.changed.connect(() => { - this.debounced_get_highlight = this.create_debouncer(); + this._debouncedGetHighlight = this.create_debouncer(); }); - this.editor_handlers.set('cursorActivity', this.onCursorActivity); - this.editor_handlers.set('blur', this.onBlur); - this.editor_handlers.set('focus', this.onCursorActivity); - super.register(); - } - - protected onBlur = () => { - if (this.settings.composite.removeOnBlur) { - this.clear_markers(); - this.last_token = null; - } else { - this.onCursorActivity().catch(console.warn); - } - }; - remove(): void { - this.clear_markers(); - super.remove(); + options.editorExtensionRegistry.addExtension({ + name: 'lsp:highlights', + factory: options => { + const updateListener = EditorView.updateListener.of(viewUpdate => { + if ( + viewUpdate.docChanged || + viewUpdate.selectionSet || + viewUpdate.focusChanged + ) { + // TODO a better way to get the adapter here? + const adapter = [...connectionManager.adapters.values()].find( + adapter => adapter.widget.node.contains(viewUpdate.view.dom) + ); + if (!adapter) { + this.console.warn('Adapter not found'); + return; + } + this.onCursorActivity(adapter).catch(this.console.warn); + } + }); + const eventListeners = EditorView.domEventHandlers({ + blur: (e, view) => { + this.onBlur(view); + }, + focus: event => { + const adapter = [...connectionManager.adapters.values()].find( + adapter => + adapter.widget.node.contains( + event.currentTarget! as HTMLElement + ) + ); + if (!adapter) { + this.console.warn('Adapter not found'); + return; + } + this.onCursorActivity(adapter).catch(this.console.warn); + }, + keydown: event => { + const adapter = [...connectionManager.adapters.values()].find( + adapter => + adapter.widget.node.contains( + event.currentTarget! as HTMLElement + ) + ); + if (!adapter) { + this.console.warn('Adapter not found'); + return; + } + this.onCursorActivity(adapter).catch(this.console.warn); + } + }); + return EditorExtensionRegistry.createImmutableExtension([ + updateListener, + eventListeners + ]); + } + }); } - protected clear_markers() { - for (const [cmEditor, markers] of this.highlightMarkers.entries()) { - cmEditor.operation(() => { - for (const marker of markers) { - marker.clear(); - } - }); + protected onBlur(view: EditorView) { + if (this.settings.composite.removeOnBlur) { + this.markManager.clearEditorMarks(view); + this._lastToken = null; } - this.highlightMarkers = new Map(); - this.highlight_markers = []; } - protected handleHighlight = ( - items: lsProtocol.DocumentHighlight[] | undefined - ) => { - this.clear_markers(); + protected handleHighlight( + items: lsProtocol.DocumentHighlight[] | null, + adapter: WidgetLSPAdapter + ) { + this.markManager.clearAllMarks(); if (!items) { return; } - const highlightOptionsByEditor = new Map< - CodeMirror.Editor, - IHighlightDefinition[] + const highlightsByEditor = new Map< + CodeEditor.IEditor, + IEditorHighlight[] >(); for (let item of items) { - let range = this.range_to_editor_range(item.range); - let kind_class = item.kind - ? 'cm-lsp-highlight-' + DocumentHighlightKind[item.kind] - : ''; + let range = rangeToEditorRange(adapter, item.range, null); + const editor = range.editor; - let optionsList = highlightOptionsByEditor.get(range.editor); + let optionsList = highlightsByEditor.get(editor); if (!optionsList) { optionsList = []; - highlightOptionsByEditor.set(range.editor, optionsList); + highlightsByEditor.set(editor, optionsList); } + optionsList.push({ - options: { - className: 'cm-lsp-highlight ' + kind_class - }, - start: range.start, - end: range.end + kind: item.kind || DocumentHighlightKind.Text, + from: editor.getOffsetAt(PositionConverter.cm_to_ce(range.start)), + to: editor.getOffsetAt(PositionConverter.cm_to_ce(range.end)) }); } - for (const [ - cmEditor, - markerDefinitions - ] of highlightOptionsByEditor.entries()) { - // note: using `operation()` significantly improves performance. - // test cases: + for (const [editor, markerDefinitions] of highlightsByEditor.entries()) { + // CodeMirror5 performance test cases: // - one cell with 1000 `math.pi` and `import math`; move cursor to `math`, // wait for 1000 highlights, then move to `pi`: - // - before: + // - step-by-step: // - highlight `math`: 13.1s // - then highlight `pi`: 16.6s - // - after: + // - operation(): // - highlight `math`: 160ms // - then highlight `pi`: 227ms + // - CodeMirror6, measuring `markManager.putMarks`: + // - highlight `math`: 181ms + // - then highlight `pi`: 334ms // - 100 cells with `math.pi` and one with `import math`; move cursor to `math`, // wait for 1000 highlights, then move to `pi` (this is overhead control, // no gains expected): - // - before: + // - step-by-step: // - highlight `math`: 385ms // - then highlight `pi`: 683 ms - // - after: + // - operation(): // - highlight `math`: 390ms // - then highlight `pi`: 870ms - cmEditor.operation(() => { - const doc = cmEditor.getDoc(); - const markersList: CodeMirror.TextMarker[] = []; - for (const definition of markerDefinitions) { - let marker; - try { - marker = doc.markText( - definition.start, - definition.end, - definition.options - ); - } catch (e) { - this.console.warn('Marking highlight failed:', definition, e); - return; - } - markersList.push(marker); - this.highlight_markers.push(marker); - } - this.highlightMarkers.set(cmEditor, markersList); - }); + + const editorView = (editor as CodeMirrorEditor).editor; + this.markManager.putMarks(editorView, markerDefinitions); } - }; + } protected create_debouncer() { - return new Debouncer( - this.on_cursor_activity, - this.settings.composite.debouncerDelay - ); + return new Debouncer< + lsProtocol.DocumentHighlight[] | null, + void, + [VirtualDocument, IVirtualPosition] + >(this.on_cursor_activity, this.settings.composite.debouncerDelay); } - protected on_cursor_activity = async () => { - this.sent_version = this.virtual_document.document_info.version; - return await this.connection.getDocumentHighlights( - this.virtual_position, - this.virtual_document.document_info, - false - ); + protected on_cursor_activity = async ( + virtualDocument: VirtualDocument, + virtualPosition: IVirtualPosition + ) => { + const connection = this.connectionManager.connections.get( + virtualDocument.uri + )!; + if ( + !( + connection.isReady && + connection.serverCapabilities.documentHighlightProvider + ) + ) { + return null; + } + this._versionSent = virtualDocument.documentInfo.version; + return await connection.clientRequests[ + 'textDocument/documentHighlight' + ].request({ + textDocument: { + uri: virtualDocument.documentInfo.uri + }, + position: { + line: virtualPosition.line, + character: virtualPosition.ch + } + }); }; - protected onCursorActivity = async () => { - if (!this.virtual_editor?.virtual_document?.document_info) { + protected async onCursorActivity(adapter: WidgetLSPAdapter) { + if (!adapter.virtualDocument) { + this.console.log('virtualDocument not ready on adapter'); return; } - let root_position: IRootPosition; + await adapter.virtualDocument!.updateManager.updateDone; + + // TODO: this is the same problem as in signature + // TODO: the assumption that updated editor = active editor will fail on RTC. How to get `CodeEditor.IEditor` and `Document.IEditor` from `EditorView`? we got `CodeEditor.IModel` from `options.model` but may need more context here. + const editorAccessor = adapter.activeEditor; + const editor = editorAccessor!.getEditor()!; + const position = editor.getCursorPosition(); + const editorPosition = PositionConverter.ce_to_cm( + position + ) as IEditorPosition; + + const rootPosition = editorPositionToRootPosition( + adapter, + editorAccessor!, + editorPosition + ); - await this.virtual_editor.virtual_document.update_manager.update_done; - try { - root_position = this.virtual_editor - .getDoc() - .getCursor('start') as IRootPosition; - } catch (err) { - this.console.warn('no root position available'); + if (!rootPosition) { + this.console.debug('Root position not available'); return; } - if (root_position == null) { - this.console.warn('no root position available'); + const document = documentAtRootPosition(adapter, rootPosition); + + if (!document.documentInfo) { + this.console.debug('Root document lacks document info'); return; } - const token = this.virtual_editor.get_token_at(root_position); + const offset = editor.getOffsetAt( + PositionConverter.cm_to_ce(editorPosition) + ); + const token = editor.getTokenAt(offset); // if token has not changed, no need to update highlight, unless it is an empty token // which would indicate that the cursor is at the first character if ( - this.last_token && - token.value === this.last_token.value && + this._lastToken && + token.value === this._lastToken.value && token.value !== '' ) { this.console.log( @@ -223,90 +305,95 @@ export class HighlightsCM extends CodeMirrorIntegration { return; } - let document: VirtualDocument; try { - document = this.virtual_editor.document_at_root_position(root_position); - } catch (e) { - this.console.warn( - 'Could not obtain virtual document from position', - root_position + const virtualPosition = rootPositionToVirtualPosition( + adapter, + rootPosition ); - return; - } - if (document !== this.virtual_document) { - return; - } - - try { - let virtual_position = - this.virtual_editor.root_position_to_virtual_position(root_position); + this._virtualPosition = virtualPosition; - this.virtual_position = virtual_position; - - Promise.all([ + const [highlights] = await Promise.all([ // request the highlights as soon as possible - this.debounced_get_highlight.invoke(), + this._debouncedGetHighlight.invoke(document, virtualPosition), // and in the meantime remove the old markers async () => { - this.clear_markers(); - this.last_token = null; + this.markManager.clearAllMarks(); + this._lastToken = null; } - ]) - .then(([highlights]) => { - // in the time the response returned the document might have been closed - check that - if (this.virtual_document.isDisposed) { - return; - } + ]); - let version_after = this.virtual_document.document_info.version; + // in the time the response returned the document might have been closed - check that + if (document.isDisposed) { + return; + } - /// if document was updated since (e.g. user pressed delete - token change, but position did not) - if (version_after !== this.sent_version) { - this.console.log( - 'skipping highlights response delayed by ' + - (version_after - this.sent_version) + - ' document versions' - ); - return; - } - // if cursor position changed (e.g. user moved cursor up - position has changed, but document version did not) - if (virtual_position !== this.virtual_position) { - this.console.log( - 'skipping highlights response: cursor moved since it was requested' - ); - return; - } + let version_after = document.documentInfo.version; + + /// if document was updated since (e.g. user pressed delete - token change, but position did not) + if (version_after !== this._versionSent) { + this.console.log( + 'skipping highlights response delayed by ' + + (version_after - this._versionSent) + + ' document versions' + ); + return; + } + // if cursor position changed (e.g. user moved cursor up - position has changed, but document version did not) + if (virtualPosition !== this._virtualPosition) { + this.console.log( + 'skipping highlights response: cursor moved since it was requested' + ); + return; + } - this.handleHighlight(highlights); - this.last_token = token; - }) - .catch(this.console.warn); + this.handleHighlight(highlights, adapter); + this._lastToken = token; } catch (e) { this.console.warn('Could not get highlights:', e); } - }; + } } -const FEATURE_ID = PLUGIN_ID + ':highlights'; +export namespace HighlightsFeature { + export interface IOptions extends Feature.IOptions { + settings: FeatureSettings; + editorExtensionRegistry: IEditorExtensionRegistry; + contextAssembler: ContextAssembler; + } + export const id = PLUGIN_ID + ':highlights'; +} export const HIGHLIGHTS_PLUGIN: JupyterFrontEndPlugin = { - id: FEATURE_ID, - requires: [ILSPFeatureManager, ISettingRegistry], + id: HighlightsFeature.id, + requires: [ + ILSPFeatureManager, + ISettingRegistry, + IEditorExtensionRegistry, + ILSPDocumentConnectionManager + ], autoStart: true, - activate: ( + activate: async ( app: JupyterFrontEnd, featureManager: ILSPFeatureManager, - settingRegistry: ISettingRegistry + settingRegistry: ISettingRegistry, + editorExtensionRegistry: IEditorExtensionRegistry, + connectionManager: ILSPDocumentConnectionManager ) => { - const settings = new FeatureSettings(settingRegistry, FEATURE_ID); - - featureManager.register({ - feature: { - editorIntegrationFactory: new Map([['CodeMirrorEditor', HighlightsCM]]), - id: FEATURE_ID, - name: 'LSP Highlights', - settings: settings - } + const contextAssembler = new ContextAssembler({ app, connectionManager }); + const settings = new FeatureSettings( + settingRegistry, + HighlightsFeature.id + ); + await settings.ready; + if (settings.composite.disable) { + return; + } + const feature = new HighlightsFeature({ + settings, + editorExtensionRegistry, + connectionManager, + contextAssembler }); + featureManager.register(feature); } }; diff --git a/packages/jupyterlab-lsp/src/features/hover.ts b/packages/jupyterlab-lsp/src/features/hover.ts index 68953ee89..5d5a45311 100644 --- a/packages/jupyterlab-lsp/src/features/hover.ts +++ b/packages/jupyterlab-lsp/src/features/hover.ts @@ -1,38 +1,51 @@ +import { EditorView } from '@codemirror/view'; import { JupyterFrontEnd, JupyterFrontEndPlugin } from '@jupyterlab/application'; import { CodeEditor } from '@jupyterlab/codeeditor'; +import { + CodeMirrorEditor, + IEditorExtensionRegistry, + EditorExtensionRegistry +} from '@jupyterlab/codemirror'; +import { + IRootPosition, + IVirtualPosition, + IEditorPosition, + ProtocolCoordinates, + ILSPFeatureManager, + isEqual, + ILSPDocumentConnectionManager, + WidgetLSPAdapter, + VirtualDocument, + Document +} from '@jupyterlab/lsp'; import { IRenderMimeRegistry } from '@jupyterlab/rendermime'; import { ISettingRegistry } from '@jupyterlab/settingregistry'; import { LabIcon } from '@jupyterlab/ui-components'; import { Throttler } from '@lumino/polling'; -import type * as CodeMirror from 'codemirror'; import type * as lsProtocol from 'vscode-languageserver-protocol'; import hoverSvg from '../../style/icons/hover.svg'; import { CodeHover as LSPHoverSettings, ModifierKey } from '../_hover'; import { EditorTooltipManager, FreeTooltip } from '../components/free_tooltip'; -import { PositionConverter } from '../converter'; +import { ContextAssembler } from '../context'; import { - CodeMirrorIntegration, + PositionConverter, + documentAtRootPosition, + rootPositionToVirtualPosition, + rootPositionToEditorPosition, + editorPositionToRootPosition, + editorAtRootPosition, + rangeToEditorRange, IEditorRange -} from '../editor_integration/codemirror'; -import { - FeatureSettings, - IEditorIntegrationOptions, - IFeatureLabIntegration -} from '../feature'; -import { - IRootPosition, - IVirtualPosition, - ProtocolCoordinates, - is_equal -} from '../positioning'; -import { ILSPFeatureManager, PLUGIN_ID } from '../tokens'; +} from '../converter'; +import { FeatureSettings, Feature } from '../feature'; +import { createMarkManager, ISimpleMarkManager } from '../marks'; +import { PLUGIN_ID } from '../tokens'; import { getModifierState } from '../utils'; -import { VirtualDocument } from '../virtual/document'; -import { IEditorChange } from '../virtual/editor'; +import { BrowserConsole } from '../virtual/console'; export const hoverIcon = new LabIcon({ name: 'lsp:hover', @@ -43,7 +56,7 @@ interface IResponseData { response: lsProtocol.Hover; document: VirtualDocument; editor_range: IEditorRange; - ce_editor: CodeEditor.IEditor; + ceEditor: CodeEditor.IEditor; } /** @@ -81,8 +94,8 @@ class ResponseCache { const previousIndex = this._data.findIndex( previous => previous.document === item.document && - is_equal(previous.editor_range.start, item.editor_range.start) && - is_equal(previous.editor_range.end, item.editor_range.end) && + isEqual(previous.editor_range.start, item.editor_range.start) && + isEqual(previous.editor_range.end, item.editor_range.end) && previous.editor_range.editor === item.editor_range.editor ); if (previousIndex !== -1) { @@ -120,21 +133,129 @@ function to_markup( } } -export class HoverCM extends CodeMirrorIntegration { - protected last_hover_character: IRootPosition | null = null; +interface IContext { + adapter: WidgetLSPAdapter; + token: CodeEditor.IToken; + editor: CodeEditor.IEditor; + editorAccessor: Document.IEditor; +} + +export class HoverFeature extends Feature { + readonly capabilities: lsProtocol.ClientCapabilities = { + textDocument: { + hover: { + dynamicRegistration: true, + contentFormat: ['markdown', 'plaintext'] + } + } + }; + readonly id = HoverFeature.id; + tooltipManager: EditorTooltipManager; + + protected console = new BrowserConsole().scope('Hover'); + protected settings: FeatureSettings; + protected lastHoverCharacter: IRootPosition | null = null; private last_hover_response: lsProtocol.Hover | null; - protected hover_marker: CodeMirror.TextMarker | null = null; - private virtual_position: IVirtualPosition; + protected hasMarker: boolean = false; + protected markManager: ISimpleMarkManager<'hover'>; + private virtualPosition: IVirtualPosition; protected cache: ResponseCache; + protected contextAssembler: ContextAssembler; - private debounced_get_hover: Throttler>; + private debouncedGetHover: Throttler< + Promise, + void, + [VirtualDocument, IVirtualPosition, IContext] + >; private tooltip: FreeTooltip; private _previousHoverRequest: Promise< Promise > | null = null; - constructor(options: IEditorIntegrationOptions) { + constructor(options: HoverFeature.IOptions) { super(options); + this.settings = options.settings; + this.tooltipManager = new EditorTooltipManager(options.renderMimeRegistry); + this.contextAssembler = options.contextAssembler; + + this.cache = new ResponseCache(10); + const connectionManager = options.connectionManager; + + this.markManager = createMarkManager({ + hover: { class: 'cm-lsp-hover-available' } + }); + + options.editorExtensionRegistry.addExtension({ + name: 'lsp:hover', + factory: options => { + const updateListener = EditorView.updateListener.of(viewUpdate => { + if (viewUpdate.docChanged) { + this.afterChange(); + } + }); + const eventListeners = EditorView.domEventHandlers({ + mousemove: event => { + const adapter = [...connectionManager.adapters.values()].find( + adapter => + adapter.widget.node.contains(event.target as HTMLElement) + ); + + if (!adapter) { + this.console.warn('Adapter not found'); + return; + } + + // this is used to hide the tooltip on leaving cells in notebook + this.updateUnderlineAndTooltip(event, adapter) + ?.then(keep_tooltip => { + if (!keep_tooltip) { + this.maybeHideTooltip(event); + } + }) + .catch(this.console.warn); + }, + mouseleave: event => { + this.onMouseLeave(event); + }, + // show hover after pressing the modifier key + keydown: event => { + const adapter = [...connectionManager.adapters.values()].find( + adapter => + adapter.widget.node.contains( + event.currentTarget! as HTMLElement + ) + ); + if (!adapter) { + this.console.warn('Adapter not found'); + return; + } + this.onKeyDown(event, adapter); + } + }); + return EditorExtensionRegistry.createImmutableExtension([ + eventListeners, + updateListener + ]); + } + }); + + this.debouncedGetHover = this.create_throttler(); + + this.settings.changed.connect(() => { + this.cache.maxSize = this.settings.composite.cacheSize; + this.debouncedGetHover = this.create_throttler(); + }); + } + + protected create_throttler() { + return new Throttler< + Promise, + void, + [VirtualDocument, IVirtualPosition, IContext] + >(this.getHover, { + limit: this.settings.composite.throttlerDelay || 0, + edge: 'trailing' + }); } protected get modifierKey(): ModifierKey { @@ -145,19 +266,11 @@ export class HoverCM extends CodeMirrorIntegration { return this.settings.composite.autoActivate; } - get lab_integration() { - return super.lab_integration as HoverLabIntegration; - } - - get settings() { - return super.settings as FeatureSettings; - } - protected restore_from_cache( document: VirtualDocument, - virtual_position: IVirtualPosition + virtualPosition: IVirtualPosition ): IResponseData | null { - const { line, ch } = virtual_position; + const { line, ch } = virtualPosition; const matching_items = this.cache.data.filter(cache_item => { if (cache_item.document !== document) { return false; @@ -168,78 +281,40 @@ export class HoverCM extends CodeMirrorIntegration { if (matching_items.length > 1) { this.console.warn( 'Potential hover cache malfunction: ', - virtual_position, + virtualPosition, matching_items ); } return matching_items.length != 0 ? matching_items[0] : null; } - register(): void { - this.cache = new ResponseCache(this.settings.composite.cacheSize); - - this.wrapper_handlers.set('mousemove', event => { - // as CodeMirror.Editor does not support mouseleave nor mousemove, - // we simulate the mouseleave for the editor in wrapper's mousemove; - // this is used to hide the tooltip on leaving cells in notebook - this.updateUnderlineAndTooltip(event) - ?.then(keep_tooltip => { - if (!keep_tooltip) { - this.maybeHideTooltip(event); - } - }) - .catch(this.console.warn); - }); - this.wrapper_handlers.set('mouseleave', this.onMouseLeave); - - // show hover after pressing the modifier key - // TODO: when the editor (notebook or file editor) is not focused, the keydown event is not getting to us - // (probably getting captured by lab); this gives subpar experience when using hover in two editors open - // side-by-side, BUT this does not happen for mousemove which properly reads keyModifier from the event - // (so this is no too bad as most of the time the user will get the desired outcome - they just need to - // budge the mice when holding ctrl if looking at a document which is not active). - // whether the editor is focused - this.wrapper_handlers.set('keydown', this.onKeyDown); - // or just the wrapper (e.g. the notebook but no cell active) - this.editor_handlers.set('keydown', (instance, event: KeyboardEvent) => - this.onKeyDown(event) - ); - - this.debounced_get_hover = this.create_throttler(); - - this.settings.changed.connect(() => { - this.cache.maxSize = this.settings.composite.cacheSize; - this.debounced_get_hover = this.create_throttler(); - }); - super.register(); - } - - protected onKeyDown = (event: KeyboardEvent) => { + protected onKeyDown = ( + event: KeyboardEvent, + adapter: WidgetLSPAdapter + ) => { if ( getModifierState(event, this.modifierKey) && - this.last_hover_character !== null + this.lastHoverCharacter !== null ) { // does not need to be shown if it is already visible (otherwise we would be creating an identical tooltip again!) if (this.tooltip && this.tooltip.isVisible && !this.tooltip.isDisposed) { return; } - const document = this.virtual_editor.document_at_root_position( - this.last_hover_character - ); - let response_data = this.restore_from_cache( + const document = documentAtRootPosition(adapter, this.lastHoverCharacter); + let responseData = this.restore_from_cache( document, - this.virtual_position + this.virtualPosition ); - if (response_data == null) { + if (responseData == null) { return; } event.stopPropagation(); - this.handleResponse(response_data, this.last_hover_character, true); + this.handleResponse(adapter, responseData, this.lastHoverCharacter, true); } }; protected onMouseLeave = (event: MouseEvent) => { - this.remove_range_highlight(); + this.removeRangeHighlight(); this.maybeHideTooltip(event); }; @@ -252,51 +327,56 @@ export class HoverCM extends CodeMirrorIntegration { } } - protected create_throttler() { - return new Throttler>(this.on_hover, { - limit: this.settings.composite.throttlerDelay, - edge: 'trailing' - }); - } - - afterChange(change: IEditorChange, root_position: IRootPosition) { - super.afterChange(change, root_position); + afterChange() { // reset cache on any change in the document this.cache.clean(); - this.last_hover_character = null; - this.remove_range_highlight(); + this.lastHoverCharacter = null; + this.removeRangeHighlight(); } - protected on_hover = async ( - virtual_position: IVirtualPosition, - add_range_fn: (hover: lsProtocol.Hover) => lsProtocol.Hover + protected getHover = async ( + virtualDocument: VirtualDocument, + virtualPosition: IVirtualPosition, + context: IContext ): Promise => { - if ( - !( - this.connection.isReady && - this.connection.serverCapabilities?.hoverProvider - ) - ) { + const connection = this.connectionManager.connections.get( + virtualDocument.uri + )!; + if (!(connection.isReady && connection.serverCapabilities.hoverProvider)) { return null; } - let hover = await this.connection.clientRequests[ + let response = await connection.clientRequests[ 'textDocument/hover' ].request({ textDocument: { - // this might be wrong - should not it be using the specific virtual document? - uri: this.virtual_document.document_info.uri + uri: virtualDocument.documentInfo.uri }, position: { - line: virtual_position.line, - character: virtual_position.ch + line: virtualPosition.line, + character: virtualPosition.ch } }); - if (hover == null) { + if (response == null) { return null; } - return add_range_fn(hover); + if (typeof response.range !== 'undefined') { + return response; + } + // Harmonise response by adding range + const editorRange = this._getEditorRange( + context.adapter, + response, + context.token, + context.editor + ); + return this._addRange( + context.adapter, + response, + editorRange, + context.editorAccessor + ); }; protected static get_markup_for_hover( @@ -327,39 +407,46 @@ export class HoverCM extends CodeMirrorIntegration { } /** - * Underlines the word if a tooltip is available. + * marks the word if a tooltip is available. * Displays tooltip if asked to do so. * * Returns true is the tooltip was shown. */ public handleResponse = ( - response_data: IResponseData, - root_position: IRootPosition, - show_tooltip: boolean + adapter: WidgetLSPAdapter, + responseData: IResponseData, + rootPosition: IRootPosition, + showTooltip: boolean ): boolean => { - let response = response_data.response; + let response = responseData.response; // testing for object equality because the response will likely be reused from cache if (this.last_hover_response != response) { - this.remove_range_highlight(); - this.hover_marker = this.highlight_range( - response_data.editor_range, - 'cm-lsp-hover-available' + this.removeRangeHighlight(); + + const range = responseData.editor_range; + const editorView = (range.editor as CodeMirrorEditor).editor; + const from = range.editor.getOffsetAt( + PositionConverter.cm_to_ce(range.start) ); + const to = range.editor.getOffsetAt( + PositionConverter.cm_to_ce(range.end) + ); + this.markManager.putMarks(editorView, [{ from, to, kind: 'hover' }]); + this.hasMarker = true; } this.last_hover_response = response; - if (show_tooltip) { - const markup = HoverCM.get_markup_for_hover(response); - let editor_position = - this.virtual_editor.root_position_to_editor(root_position); + if (showTooltip) { + const markup = HoverFeature.get_markup_for_hover(response); + let editorPosition = rootPositionToEditorPosition(adapter, rootPosition); - this.tooltip = this.lab_integration.tooltip.showOrCreate({ + this.tooltip = this.tooltipManager.showOrCreate({ markup, - position: editor_position, - ce_editor: response_data.ce_editor, - adapter: this.adapter, + position: editorPosition, + ceEditor: responseData.ceEditor, + adapter: adapter, className: 'lsp-hover' }); return true; @@ -367,14 +454,14 @@ export class HoverCM extends CodeMirrorIntegration { return false; }; - protected is_token_empty(token: CodeMirror.Token) { - return token.string.length === 0; + protected is_token_empty(token: CodeEditor.IToken) { + return token.value.length === 0; // TODO || token.type.length === 0? (sometimes the underline is shown on meaningless tokens) } protected is_event_inside_visible(event: MouseEvent) { let target = event.target as HTMLElement; - return target.closest('.CodeMirror-sizer') != null; + return target.closest('.cm-scroller') != null; } protected is_useful_response(response: lsProtocol.Hover) { @@ -389,56 +476,84 @@ export class HoverCM extends CodeMirrorIntegration { * Returns true if the tooltip should stay. */ protected async _updateUnderlineAndTooltip( - event: MouseEvent + event: MouseEvent, + adapter: WidgetLSPAdapter ): Promise { const target = event.target; // if over an empty space in a line (and not over a token) then not worth checking if ( - target == null || - (target as HTMLElement).classList.contains('CodeMirror-line') + target == null + // TODO this no longer works in CodeMirror6 as it tires to avoid wrapping + // html elements as much as possible. + // || (target as HTMLElement).classList.contains('cm-line') ) { - this.remove_range_highlight(); + this.removeRangeHighlight(); return false; } - const show_tooltip = + const showTooltip = this.isHoverAutomatic || getModifierState(event, this.modifierKey); - // currently the events are coming from notebook panel; ideally these would be connected to individual cells, - // (only cells with code) instead, but this is more complex to implement right. In any case filtering - // is needed to determine in hovered character belongs to this virtual document + // Filtering is needed to determine in hovered character belongs to this virtual document + + // TODO: or should the adapter be derived from model and passed as an argument? Or maybe we should try both? + // const adapter = this.contextAssembler.adapterFromNode(target as HTMLElement); - const root_position = this.position_from_mouse(event); + if (!adapter) { + this.removeRangeHighlight(); + return false; + } + + const rootPosition = this.contextAssembler.positionFromCoordinates( + event.clientX, + event.clientY, + adapter + ); // happens because mousemove is attached to panel, not individual code cells, // and because some regions of the editor (between lines) have no characters - if (root_position == null) { - this.remove_range_highlight(); + if (rootPosition == null) { + this.removeRangeHighlight(); return false; } - let token = this.virtual_editor.getTokenAt(root_position); + const editorAccessor = editorAtRootPosition(adapter, rootPosition); + const editor = editorAccessor.getEditor(); + if (!editor) { + this.console.warn('Editor not available from accessor'); + this.removeRangeHighlight(); + return false; + } + + const editorPosition = rootPositionToEditorPosition(adapter, rootPosition); + + const offset = editor.getOffsetAt( + PositionConverter.cm_to_ce(editorPosition) + ); + const token = editor.getTokenAt(offset); - let document = this.virtual_editor.document_at_root_position(root_position); + const document = documentAtRootPosition(adapter, rootPosition); if ( this.is_token_empty(token) || - document !== this.virtual_document || + //document !== this.virtualDocument || !this.is_event_inside_visible(event) ) { - this.remove_range_highlight(); + this.removeRangeHighlight(); return false; } if ( - !this.last_hover_character || - !is_equal(root_position, this.last_hover_character) + !this.lastHoverCharacter || + !isEqual(rootPosition, this.lastHoverCharacter) ) { - let virtual_position = - this.virtual_editor.root_position_to_virtual_position(root_position); - this.virtual_position = virtual_position; - this.last_hover_character = root_position; + let virtualPosition = rootPositionToVirtualPosition( + adapter, + rootPosition + ); + this.virtualPosition = virtualPosition; + this.lastHoverCharacter = rootPosition; // if we already sent a request, maybe it already covers the are of interest? // not harm waiting as the server won't be able to help us anyways @@ -452,27 +567,21 @@ export class HoverCM extends CodeMirrorIntegration { }) ]); } - let response_data = this.restore_from_cache(document, virtual_position); + let responseData = this.restore_from_cache(document, virtualPosition); let delay_ms = this.settings.composite.delay; - if (response_data == null) { - const ce_editor = - this.virtual_editor.get_editor_at_root_position(root_position); - const cm_editor = - this.virtual_editor.ce_editor_to_cm_editor.get(ce_editor)!; - const add_range_fn = (hover: lsProtocol.Hover): lsProtocol.Hover => { - const editor_range = this.get_editor_range( - hover, - root_position, + if (responseData == null) { + //const ceEditor = + // editorAtRootPosition(adapter, rootPosition).getEditor()!; + const promise = this.debouncedGetHover.invoke( + document, + virtualPosition, + { + adapter, token, - cm_editor - ); - return this.add_range_if_needed(hover, editor_range, ce_editor); - }; - - const promise = this.debounced_get_hover.invoke( - virtual_position, - add_range_fn + editor, + editorAccessor + } ); this._previousHoverRequest = promise; let response = await promise; @@ -483,32 +592,33 @@ export class HoverCM extends CodeMirrorIntegration { response && response.range && ProtocolCoordinates.isWithinRange( - { line: virtual_position.line, character: virtual_position.ch }, + { line: virtualPosition.line, character: virtualPosition.ch }, response.range ) && this.is_useful_response(response) ) { - const editor_range = this.get_editor_range( + // TODO: I am reconstructing the range anyways - do I really want to ensure it in getHover? + const editorRange = this._getEditorRange( + adapter, response, - root_position, token, - cm_editor + editor ); - response_data = { + responseData = { response: response, document: document, - editor_range: editor_range, - ce_editor: ce_editor + editor_range: editorRange, + ceEditor: editor }; - this.cache.store(response_data); + this.cache.store(responseData); delay_ms = Math.max( 0, this.settings.composite.delay - this.settings.composite.throttlerDelay ); } else { - this.remove_range_highlight(); + this.removeRangeHighlight(); return false; } } @@ -517,95 +627,99 @@ export class HoverCM extends CodeMirrorIntegration { await new Promise(resolve => setTimeout(resolve, delay_ms)); } - return this.handleResponse(response_data, root_position, show_tooltip); + return this.handleResponse( + adapter, + responseData, + rootPosition, + showTooltip + ); } else { return true; } } - protected updateUnderlineAndTooltip = (event: MouseEvent) => { + protected updateUnderlineAndTooltip = ( + event: MouseEvent, + adapter: WidgetLSPAdapter + ) => { try { - return this._updateUnderlineAndTooltip(event); + return this._updateUnderlineAndTooltip(event, adapter); } catch (e) { - if ( - !( - e.message === 'Cell not found in cell_line_map' || - e.message === "Cannot read property 'string' of undefined" - ) - ) { - this.console.warn(e); - } + this.console.warn(e); return undefined; } }; - protected remove_range_highlight = () => { - if (this.hover_marker) { - this.hover_marker.clear(); - this.hover_marker = null; + protected removeRangeHighlight = () => { + if (this.hasMarker) { + this.markManager.clearAllMarks(); + this.hasMarker = false; this.last_hover_response = null; - this.last_hover_character = null; + this.lastHoverCharacter = null; } }; remove(): void { this.cache.clean(); - this.remove_range_highlight(); - this.debounced_get_hover.dispose(); - super.remove(); + this.removeRangeHighlight(); + this.debouncedGetHover.dispose(); } - private get_editor_range( + /** + * Construct the range to underline manually using the token information. + */ + private _getEditorRange( + adapter: WidgetLSPAdapter, response: lsProtocol.Hover, - position: IRootPosition, - token: CodeMirror.Token, - cm_editor: CodeMirror.Editor + token: CodeEditor.IToken, + editor: CodeEditor.IEditor ): IEditorRange { if (typeof response.range !== 'undefined') { - return this.range_to_editor_range(response.range, cm_editor); + return rangeToEditorRange(adapter, response.range, editor); } - // construct the range manually using the token information - let start_in_root = { - line: position.line, - ch: token.start - } as IRootPosition; - let end_in_root = { - line: position.line, - ch: token.end - } as IRootPosition; + const startInEditor = editor.getPositionAt(token.offset); + const endInEditor = editor.getPositionAt(token.offset + token.value.length); + + if (!startInEditor || !endInEditor) { + throw Error( + 'Could not reconstruct editor range: start or end of token in editor do not resolve to a position' + ); + } return { - start: this.virtual_editor.root_position_to_editor(start_in_root), - end: this.virtual_editor.root_position_to_editor(end_in_root), - editor: cm_editor + start: PositionConverter.ce_to_cm(startInEditor) as IEditorPosition, + end: PositionConverter.ce_to_cm(endInEditor) as IEditorPosition, + editor }; } - private add_range_if_needed( + private _addRange( + adapter: WidgetLSPAdapter, response: lsProtocol.Hover, - editor_range: IEditorRange, - ce_editor: CodeEditor.IEditor + editorEange: IEditorRange, + editorAccessor: Document.IEditor ): lsProtocol.Hover { - if (typeof response.range !== 'undefined') { - return response; - } return { ...response, range: { start: PositionConverter.cm_to_lsp( - this.virtual_editor.root_position_to_virtual_position( - this.virtual_editor.transform_from_editor_to_root( - ce_editor, - editor_range.start + rootPositionToVirtualPosition( + adapter, + editorPositionToRootPosition( + adapter, + editorAccessor, + editorEange.start )! ) ), end: PositionConverter.cm_to_lsp( - this.virtual_editor.root_position_to_virtual_position( - this.virtual_editor.transform_from_editor_to_root( - ce_editor, - editor_range.end + rootPositionToVirtualPosition( + adapter, + editorPositionToRootPosition( + adapter, + editorAccessor, + editorEange.end )! ) ) @@ -614,54 +728,50 @@ export class HoverCM extends CodeMirrorIntegration { } } -class HoverLabIntegration implements IFeatureLabIntegration { - tooltip: EditorTooltipManager; - settings: FeatureSettings; - - constructor( - app: JupyterFrontEnd, - settings: FeatureSettings, - renderMimeRegistry: IRenderMimeRegistry - ) { - this.tooltip = new EditorTooltipManager(renderMimeRegistry); +export namespace HoverFeature { + export interface IOptions extends Feature.IOptions { + settings: FeatureSettings; + renderMimeRegistry: IRenderMimeRegistry; + editorExtensionRegistry: IEditorExtensionRegistry; + contextAssembler: ContextAssembler; } + export const id = PLUGIN_ID + ':hover'; } -const FEATURE_ID = PLUGIN_ID + ':hover'; - export const HOVER_PLUGIN: JupyterFrontEndPlugin = { - id: FEATURE_ID, - requires: [ILSPFeatureManager, ISettingRegistry, IRenderMimeRegistry], + id: HoverFeature.id, + requires: [ + ILSPFeatureManager, + ISettingRegistry, + IRenderMimeRegistry, + IEditorExtensionRegistry, + ILSPDocumentConnectionManager + ], autoStart: true, - activate: ( + activate: async ( app: JupyterFrontEnd, featureManager: ILSPFeatureManager, settingRegistry: ISettingRegistry, - renderMimeRegistry: IRenderMimeRegistry + renderMimeRegistry: IRenderMimeRegistry, + editorExtensionRegistry: IEditorExtensionRegistry, + connectionManager: ILSPDocumentConnectionManager ) => { - const settings = new FeatureSettings(settingRegistry, FEATURE_ID); - const labIntegration = new HoverLabIntegration( - app, - settings, - renderMimeRegistry + const contextAssembler = new ContextAssembler({ app, connectionManager }); + const settings = new FeatureSettings( + settingRegistry, + HoverFeature.id ); - - featureManager.register({ - feature: { - editorIntegrationFactory: new Map([['CodeMirrorEditor', HoverCM]]), - id: FEATURE_ID, - name: 'LSP Hover tooltip', - labIntegration: labIntegration, - settings: settings, - capabilities: { - textDocument: { - hover: { - dynamicRegistration: true, - contentFormat: ['markdown', 'plaintext'] - } - } - } - } + await settings.ready; + if (settings.composite.disable) { + return; + } + const feature = new HoverFeature({ + settings, + renderMimeRegistry, + editorExtensionRegistry, + connectionManager, + contextAssembler }); + featureManager.register(feature); } }; diff --git a/packages/jupyterlab-lsp/src/features/jump_to.ts b/packages/jupyterlab-lsp/src/features/jump_to.ts index c393ae5b4..595433369 100644 --- a/packages/jupyterlab-lsp/src/features/jump_to.ts +++ b/packages/jupyterlab-lsp/src/features/jump_to.ts @@ -1,3 +1,4 @@ +import { EditorView } from '@codemirror/view'; import { CodeJumper, FileEditorJumper, @@ -7,32 +8,52 @@ import { JupyterFrontEnd, JupyterFrontEndPlugin } from '@jupyterlab/application'; -import { InputDialog } from '@jupyterlab/apputils'; -import { CodeMirrorEditor } from '@jupyterlab/codemirror'; +import { + InputDialog, + ICommandPalette, + Notification +} from '@jupyterlab/apputils'; +import { + CodeMirrorEditor, + IEditorExtensionRegistry, + EditorExtensionRegistry +} from '@jupyterlab/codemirror'; import { URLExt } from '@jupyterlab/coreutils'; import { IDocumentManager } from '@jupyterlab/docmanager'; import { IEditorTracker } from '@jupyterlab/fileeditor'; +import { + IVirtualPosition, + ProtocolCoordinates, + WidgetLSPAdapter, + ILSPFeatureManager, + ILSPDocumentConnectionManager +} from '@jupyterlab/lsp'; +import { AnyLocation } from '@jupyterlab/lsp/lib/lsp'; import { INotebookTracker } from '@jupyterlab/notebook'; import { ISettingRegistry } from '@jupyterlab/settingregistry'; -import { ITranslator, TranslationBundle } from '@jupyterlab/translation'; +import { + ITranslator, + TranslationBundle, + nullTranslator +} from '@jupyterlab/translation'; import { LabIcon } from '@jupyterlab/ui-components'; -import { AnyLocation } from 'lsp-ws-connection/lib/types'; import type * as lsp from 'vscode-languageserver-protocol'; +import * as lsProtocol from 'vscode-languageserver-protocol'; import jumpToSvg from '../../style/icons/jump-to.svg'; import { CodeJump as LSPJumpSettings, ModifierKey } from '../_jump_to'; -import { CommandEntryPoint } from '../command_manager'; -import { PositionConverter } from '../converter'; -import { CodeMirrorIntegration } from '../editor_integration/codemirror'; +import { ContextAssembler } from '../context'; import { - FeatureSettings, - IFeatureCommand, - IFeatureLabIntegration -} from '../feature'; -import { IVirtualPosition, ProtocolCoordinates } from '../positioning'; -import { ILSPAdapterManager, ILSPFeatureManager, PLUGIN_ID } from '../tokens'; + PositionConverter, + documentAtRootPosition, + rootPositionToVirtualPosition, + rootPositionToEditorPosition, + virtualPositionToRootPosition +} from '../converter'; +import { FeatureSettings, Feature } from '../feature'; +import { PLUGIN_ID } from '../tokens'; import { getModifierState, uri_to_contents_path, uris_equal } from '../utils'; -import { CodeMirrorVirtualEditor } from '../virtual/codemirror_editor'; +import { BrowserConsole } from '../virtual/console'; export const jumpToIcon = new LabIcon({ name: 'lsp:jump-to', @@ -44,10 +65,6 @@ const jumpBackIcon = new LabIcon({ svgstr: jumpToSvg.replace('jp-icon3', 'lsp-icon-flip-x jp-icon3') }); -const FEATURE_ID = PLUGIN_ID + ':jump_to'; - -let trans: TranslationBundle; - const enum JumpResult { NoTargetsFound = 1, PositioningFailure = 2, @@ -57,28 +74,93 @@ const enum JumpResult { AlreadyAtTarget = 6 } -export class CMJumpToDefinition extends CodeMirrorIntegration { - get jumper() { - return (this.feature.labIntegration as JumperLabIntegration).jumper; +export class NavigationFeature extends Feature { + readonly id = NavigationFeature.id; + readonly capabilities: lsProtocol.ClientCapabilities = { + textDocument: { + declaration: { + dynamicRegistration: true, + linkSupport: true + }, + definition: { + dynamicRegistration: true, + linkSupport: true + }, + typeDefinition: { + dynamicRegistration: true, + linkSupport: true + }, + implementation: { + dynamicRegistration: true, + linkSupport: true + } + } + }; + protected settings: FeatureSettings; + protected console = new BrowserConsole().scope('Navigation'); + protected contextAssembler: ContextAssembler; + + constructor(options: NavigationFeature.IOptions) { + super(options); + this.settings = options.settings; + this._trans = options.trans; + this.contextAssembler = options.contextAssembler; + const connectionManager = options.connectionManager; + + options.editorExtensionRegistry.addExtension({ + name: 'lsp:jump', + factory: options => { + const clickListener = EditorView.domEventHandlers({ + mouseup: event => { + const adapter = [...connectionManager.adapters.values()].find( + adapter => + adapter.widget.node.contains(event.target as HTMLElement) + ); + + if (!adapter) { + this.console.warn('Adapter not found'); + return; + } + this._jumpOnMouseUp(event, adapter); + } + }); + + return EditorExtensionRegistry.createImmutableExtension([ + clickListener + ]); + } + }); + + this._jumpers = new Map(); + const { fileEditorTracker, notebookTracker, documentManager } = options; + + if (fileEditorTracker !== null) { + fileEditorTracker.widgetAdded.connect((_, widget) => { + let fileEditor = widget.content; + + if (fileEditor.editor instanceof CodeMirrorEditor) { + let jumper = new FileEditorJumper(widget, documentManager); + this._jumpers.set(widget.id, jumper); + } + }); + } + + notebookTracker.widgetAdded.connect(async (_, widget) => { + let jumper = new NotebookJumper(widget, documentManager); + this._jumpers.set(widget.id, jumper); + }); } - get settings() { - return super.settings as FeatureSettings; + getJumper(adapter: WidgetLSPAdapter): CodeJumper { + let current = adapter.widget.id; + return this._jumpers.get(current)!; } protected get modifierKey(): ModifierKey { return this.settings.composite.modifierKey; } - register() { - this.editor_handlers.set('mousedown', this._jumpOnMouseUp.bind(this)); - super.register(); - } - - private _jumpOnMouseUp( - virtualEditor: CodeMirrorVirtualEditor, - event: MouseEvent - ) { + private _jumpOnMouseUp(event: MouseEvent, adapter: WidgetLSPAdapter) { // For Alt + click we need to wait for mouse up to enable users to create // rectangular selections with Alt + drag. if (this.modifierKey === 'Alt') { @@ -90,7 +172,7 @@ export class CMJumpToDefinition extends CodeMirrorIntegration { // https://github.com/jupyter-lsp/jupyterlab-lsp/issues/823 return; } - return this._jumpToDefinitionOrRefernce(virtualEditor, event); + return this._jumpToDefinitionOrRefernce(event, adapter); }, { once: true @@ -99,13 +181,13 @@ export class CMJumpToDefinition extends CodeMirrorIntegration { } else { // For Ctrl + click we need to act on mouse down to prevent // adding multiple cursors if jump were to occur. - return this._jumpToDefinitionOrRefernce(virtualEditor, event); + return this._jumpToDefinitionOrRefernce(event, adapter); } } private _jumpToDefinitionOrRefernce( - virtualEditor: CodeMirrorVirtualEditor, - event: MouseEvent + event: MouseEvent, + adapter: WidgetLSPAdapter ) { const { button } = event; const shouldJump = @@ -113,20 +195,31 @@ export class CMJumpToDefinition extends CodeMirrorIntegration { if (!shouldJump) { return; } - let rootPosition = this.position_from_mouse(event); + + const rootPosition = this.contextAssembler.positionFromCoordinates( + event.clientX, + event.clientY, + adapter + ); + if (rootPosition == null) { this.console.warn( 'Could not retrieve root position from mouse event to jump to definition/reference' ); return; } - let document = virtualEditor.document_at_root_position(rootPosition); - let virtualPosition = - virtualEditor.root_position_to_virtual_position(rootPosition); + + const virtualPosition = rootPositionToVirtualPosition( + adapter, + rootPosition + ); + const document = documentAtRootPosition(adapter, rootPosition); + + const connection = this.connectionManager.connections.get(document.uri)!; const positionParams: lsp.TextDocumentPositionParams = { textDocument: { - uri: document.document_info.uri + uri: document.documentInfo.uri }, position: { line: virtualPosition.line, @@ -134,24 +227,24 @@ export class CMJumpToDefinition extends CodeMirrorIntegration { } }; - this.connection.clientRequests['textDocument/definition'] + connection.clientRequests['textDocument/definition'] .request(positionParams) .then(targets => { - this.handleJump(targets, positionParams) + this.handleJump(targets, positionParams, adapter) .then((result: JumpResult | undefined) => { if ( result === JumpResult.NoTargetsFound || result === JumpResult.AlreadyAtTarget ) { // definition was not found, or we are in definition already, suggest references - this.connection.clientRequests['textDocument/references'] + connection.clientRequests['textDocument/references'] .request({ ...positionParams, context: { includeDeclaration: false } }) .then(targets => // TODO: explain that we are now presenting references? - this.handleJump(targets, positionParams) + this.handleJump(targets, positionParams, adapter) ) .catch(this.console.warn); } @@ -210,8 +303,8 @@ export class CMJumpToDefinition extends CodeMirrorIntegration { // the preview should use this.jumper.document_manager.services.contents let getItemOptions = { - title: trans.__('Choose the jump target'), - okLabel: trans.__('Jump'), + title: this._trans.__('Choose the jump target'), + okLabel: this._trans.__('Jump'), items: choices }; // TODO: use showHints() or completion-like widget instead? @@ -252,13 +345,18 @@ export class CMJumpToDefinition extends CodeMirrorIntegration { async handleJump( locationData: AnyLocation, - positionParams: lsp.TextDocumentPositionParams + positionParams: lsp.TextDocumentPositionParams, + adapter: WidgetLSPAdapter ) { const locations = this._harmonizeLocations(locationData); const targetInfo = await this._chooseTarget(locations); + const jumper = this.getJumper(adapter); if (!targetInfo) { - this.setStatusMessage(trans.__('No jump targets found'), 2 * 1000); + const notificationID = Notification.info( + this._trans.__('No jump targets found') + ); + setTimeout(() => Notification.dismiss(notificationID), 2 * 1000); return JumpResult.NoTargetsFound; } @@ -269,22 +367,28 @@ export class CMJumpToDefinition extends CodeMirrorIntegration { ) as IVirtualPosition; if (uris_equal(uri, positionParams.textDocument.uri)) { - let editor_index = this.adapter.get_editor_index_at(virtualPosition); + let editorIndex = adapter.getEditorIndexAt(virtualPosition); // if in current file, transform from the position within virtual document to the editor position: - let editor_position = - this.virtual_editor.transform_virtual_to_editor(virtualPosition); - if (editor_position === null) { + const rootPosition = virtualPositionToRootPosition( + adapter, + virtualPosition + ); + if (rootPosition === null) { this.console.warn( 'Could not jump: conversion from virtual position to editor position failed', virtualPosition ); return JumpResult.PositioningFailure; } - let editor_position_ce = PositionConverter.cm_to_ce(editor_position); - this.console.log(`Jumping to ${editor_index}th editor of ${uri}`); - this.console.log('Jump target within editor:', editor_position_ce); + const editorPosition = rootPositionToEditorPosition( + adapter, + rootPosition + ); - let contentsPath = this.adapter.widget.context.path; + this.console.log(`Jumping to ${editorIndex}th editor of ${uri}`); + this.console.log('Jump target within editor:', editorPosition); + + let contentsPath = adapter.widget.context.path; const didUserChooseThis = locations.length > 1; @@ -296,10 +400,10 @@ export class CMJumpToDefinition extends CodeMirrorIntegration { return JumpResult.AlreadyAtTarget; } - this.jumper.global_jump({ - line: editor_position_ce.line, - column: editor_position.ch, - editor_index: editor_index, + jumper.global_jump({ + line: editorPosition.line, + column: editorPosition.ch, + editor_index: editorIndex, is_symlink: false, contents_path: contentsPath }); @@ -329,10 +433,10 @@ export class CMJumpToDefinition extends CodeMirrorIntegration { } try { - await this.jumper.document_manager.services.contents.get(contentsPath, { + await jumper.document_manager.services.contents.get(contentsPath, { content: false }); - this.jumper.global_jump({ + jumper.global_jump({ contents_path: contentsPath, ...jump_data, is_symlink: false @@ -342,7 +446,8 @@ export class CMJumpToDefinition extends CodeMirrorIntegration { this.console.warn(err); } - this.jumper.global_jump({ + // TODO: user debugger source request? + jumper.global_jump({ contents_path: URLExt.join('.lsp_symlink', contentsPath), ...jump_data, is_symlink: true @@ -350,192 +455,232 @@ export class CMJumpToDefinition extends CodeMirrorIntegration { return JumpResult.AssumeSuccess; } } -} -class JumperLabIntegration implements IFeatureLabIntegration { - private adapterManager: ILSPAdapterManager; - private jumpers: Map; - settings: FeatureSettings; - - constructor( - settings: FeatureSettings, - adapterManager: ILSPAdapterManager, - notebookTracker: INotebookTracker, - documentManager: IDocumentManager, - fileEditorTracker: IEditorTracker | null - ) { - this.settings = settings; - this.adapterManager = adapterManager; - this.jumpers = new Map(); - - if (fileEditorTracker !== null) { - fileEditorTracker.widgetAdded.connect((_, widget) => { - let fileEditor = widget.content; - - if (fileEditor.editor instanceof CodeMirrorEditor) { - let jumper = new FileEditorJumper(widget, documentManager); - this.jumpers.set(widget.id, jumper); - } - }); - } - - notebookTracker.widgetAdded.connect(async (_, widget) => { - // NOTE: assuming that the default cells content factory produces CodeMirror editors(!) - let jumper = new NotebookJumper(widget, documentManager); - this.jumpers.set(widget.id, jumper); - }); - } + private _trans: TranslationBundle; + private _jumpers: Map; +} - get jumper(): CodeJumper { - let current = this.adapterManager.currentAdapter.widget.id; - return this.jumpers.get(current)!; +export namespace NavigationFeature { + export interface IOptions extends Feature.IOptions { + settings: FeatureSettings; + trans: TranslationBundle; + notebookTracker: INotebookTracker; + documentManager: IDocumentManager; + contextAssembler: ContextAssembler; + editorExtensionRegistry: IEditorExtensionRegistry; + fileEditorTracker: IEditorTracker | null; } + export const id = PLUGIN_ID + ':jump_to'; } -const COMMANDS = (trans: TranslationBundle): IFeatureCommand[] => [ - { - id: 'jump-to-definition', - execute: async ({ connection, virtual_position, document, features }) => { - const jumpFeature = features.get(FEATURE_ID) as CMJumpToDefinition; - if (!connection) { - jumpFeature.setStatusMessage( - trans.__('Connection not found for jump'), - 2 * 1000 - ); - return; - } - - const positionParams: lsp.TextDocumentPositionParams = { - textDocument: { - uri: document.document_info.uri - }, - position: { - line: virtual_position.line, - character: virtual_position.ch - } - }; - const targets = await connection.clientRequests[ - 'textDocument/definition' - ].request(positionParams); - await jumpFeature.handleJump(targets, positionParams); - }, - is_enabled: ({ connection }) => - connection ? connection.provides('definitionProvider') : false, - label: trans.__('Jump to definition'), - icon: jumpToIcon - }, - { - id: 'jump-to-reference', - execute: async ({ connection, virtual_position, document, features }) => { - const jumpFeature = features.get(FEATURE_ID) as CMJumpToDefinition; - if (!connection) { - jumpFeature.setStatusMessage( - trans.__('Connection not found for jump'), - 2 * 1000 - ); - return; - } - - const positionParams: lsp.TextDocumentPositionParams = { - textDocument: { - uri: document.document_info.uri - }, - position: { - line: virtual_position.line, - character: virtual_position.ch - } - }; - const targets = await connection.clientRequests[ - 'textDocument/references' - ].request({ ...positionParams, context: { includeDeclaration: false } }); - await jumpFeature.handleJump(targets, positionParams); - }, - is_enabled: ({ connection }) => - connection ? connection.provides('referencesProvider') : false, - label: trans.__('Jump to references'), - icon: jumpToIcon - }, - { - id: 'jump-back', - execute: async ({ features }) => { - const jump_feature = features.get(FEATURE_ID) as CMJumpToDefinition; - jump_feature.jumper.global_jump_back(); - }, - is_enabled: ({ connection }) => - connection - ? connection.provides('definitionProvider') || - connection.provides('referencesProvider') - : false, - label: trans.__('Jump back'), - icon: jumpBackIcon, - // do not attach to any of the context menus - attach_to: new Set() - } -]; +export namespace CommandIDs { + export const jumpToDefinition = 'lsp:jump-to-definition'; + export const jumpToReference = 'lsp:jump-to-reference'; + export const jumpBack = 'lsp:jump-back'; +} export const JUMP_PLUGIN: JupyterFrontEndPlugin = { - id: FEATURE_ID, + id: NavigationFeature.id, requires: [ ILSPFeatureManager, ISettingRegistry, - ILSPAdapterManager, + ILSPDocumentConnectionManager, INotebookTracker, IDocumentManager, - ITranslator + IEditorExtensionRegistry ], - optional: [IEditorTracker], + optional: [IEditorTracker, ICommandPalette, ITranslator], autoStart: true, - activate: ( + activate: async ( app: JupyterFrontEnd, featureManager: ILSPFeatureManager, settingRegistry: ISettingRegistry, - adapterManager: ILSPAdapterManager, + connectionManager: ILSPDocumentConnectionManager, notebookTracker: INotebookTracker, documentManager: IDocumentManager, - translator: ITranslator, - fileEditorTracker: IEditorTracker | null + editorExtensionRegistry: IEditorExtensionRegistry, + fileEditorTracker: IEditorTracker | null, + palette: ICommandPalette | null, + translator: ITranslator | null ) => { - const settings = new FeatureSettings(settingRegistry, FEATURE_ID); - trans = translator.load('jupyterlab-lsp'); - let labIntegration = new JumperLabIntegration( + const trans = (translator || nullTranslator).load('jupyterlab_lsp'); + const contextAssembler = new ContextAssembler({ app, connectionManager }); + const settings = new FeatureSettings( + settingRegistry, + NavigationFeature.id + ); + await settings.ready; + + if (settings.composite.disable) { + return; + } + + const feature = new NavigationFeature({ settings, - adapterManager, + connectionManager, notebookTracker, documentManager, - fileEditorTracker - ); + fileEditorTracker, + contextAssembler, + editorExtensionRegistry, + trans + }); + featureManager.register(feature); + + const assembler = new ContextAssembler({ + app, + connectionManager + }); - featureManager.register({ - feature: { - editorIntegrationFactory: new Map([ - ['CodeMirrorEditor', CMJumpToDefinition] - ]), - commands: COMMANDS(trans), - id: FEATURE_ID, - name: 'Jump to definition', - labIntegration: labIntegration, - settings: settings, - capabilities: { + app.commands.addCommand(CommandIDs.jumpToDefinition, { + execute: async () => { + const context = assembler.getContext(); + if (!context) { + console.warn('Could not get context'); + return; + } + const { connection, virtualPosition, document, adapter } = context; + + if (!connection) { + const notificationId = Notification.info( + trans.__('Connection not found for jump') + ); + setTimeout(() => { + Notification.dismiss(notificationId); + }, 2 * 1000); + return; + } + + const positionParams: lsp.TextDocumentPositionParams = { textDocument: { - declaration: { - dynamicRegistration: true, - linkSupport: true - }, - definition: { - dynamicRegistration: true, - linkSupport: true - }, - typeDefinition: { - dynamicRegistration: true, - linkSupport: true - }, - implementation: { - dynamicRegistration: true, - linkSupport: true - } + uri: document.documentInfo.uri + }, + position: { + line: virtualPosition.line, + character: virtualPosition.ch + } + }; + const targets = await connection.clientRequests[ + 'textDocument/definition' + ].request(positionParams); + await feature.handleJump(targets, positionParams, adapter); + }, + label: trans.__('Jump to definition'), + icon: jumpToIcon, + isEnabled: () => { + const context = assembler.getContext(); + if (!context) { + console.warn('Could not get context'); + return false; + } + const { connection } = context; + return connection ? connection.provides('definitionProvider') : false; + } + }); + + app.commands.addCommand(CommandIDs.jumpToReference, { + execute: async () => { + const context = assembler.getContext(); + if (!context) { + console.warn('Could not get context'); + return; + } + const { connection, virtualPosition, document, adapter } = context; + + if (!connection) { + const notificationId = Notification.info( + trans.__('Connection not found for jump') + ); + setTimeout(() => { + Notification.dismiss(notificationId); + }, 2 * 1000); + return; + } + + const positionParams: lsp.TextDocumentPositionParams = { + textDocument: { + uri: document.documentInfo.uri + }, + position: { + line: virtualPosition.line, + character: virtualPosition.ch } + }; + const targets = await connection.clientRequests[ + 'textDocument/references' + ].request({ + ...positionParams, + context: { includeDeclaration: false } + }); + await feature.handleJump(targets, positionParams, adapter); + }, + label: trans.__('Jump to references'), + icon: jumpToIcon, + isEnabled: () => { + const context = assembler.getContext(); + if (!context) { + console.warn('Could not get context'); + return false; } + const { connection } = context; + return connection ? connection.provides('referencesProvider') : false; } }); + + app.commands.addCommand(CommandIDs.jumpBack, { + execute: async () => { + const context = assembler.getContext(); + if (!context) { + console.warn('Could not get context'); + return; + } + feature.getJumper(context.adapter).global_jump_back(); + }, + label: trans.__('Jump back'), + icon: jumpBackIcon, + isEnabled: () => { + const context = assembler.getContext(); + if (!context) { + console.warn('Could not get context'); + return false; + } + const { connection } = context; + return connection + ? connection.provides('definitionProvider') || + connection.provides('referencesProvider') + : false; + } + }); + + for (const commandID of [ + CommandIDs.jumpToDefinition, + CommandIDs.jumpToReference + ]) { + // add to menus + app.contextMenu.addItem({ + selector: '.jp-Notebook .jp-CodeCell .jp-Editor', + command: commandID, + rank: 10 + }); + + app.contextMenu.addItem({ + selector: '.jp-FileEditor', + command: commandID, + rank: 0 + }); + } + + for (const commandID of [ + CommandIDs.jumpToDefinition, + CommandIDs.jumpToReference, + CommandIDs.jumpBack + ]) { + if (palette) { + palette.addItem({ + command: commandID, + category: trans.__('Language Server Protocol') + }); + } + } } }; diff --git a/packages/jupyterlab-lsp/src/features/rename.spec.ts b/packages/jupyterlab-lsp/src/features/rename.spec.ts index 4b9137f56..0292fe2c5 100644 --- a/packages/jupyterlab-lsp/src/features/rename.spec.ts +++ b/packages/jupyterlab-lsp/src/features/rename.spec.ts @@ -1,42 +1,42 @@ import { PageConfig } from '@jupyterlab/coreutils'; -import { expect } from 'chai'; +import { nullTranslator } from '@jupyterlab/translation'; import * as lsProtocol from 'vscode-languageserver-protocol'; -import { FileEditorFeatureTestEnvironment } from '../editor_integration/testutils'; +import { FileEditorTestEnvironment } from '../testutils'; +import { VirtualDocument } from '../virtual/document'; -import { RenameCM } from './rename'; +import { RenameFeature } from './rename'; describe('Rename', () => { - let env: FileEditorFeatureTestEnvironment; + let env: FileEditorTestEnvironment; - beforeEach(() => { - env = new FileEditorFeatureTestEnvironment(); + beforeEach(async () => { + env = new FileEditorTestEnvironment(); + await env.init(); }); afterEach(() => env.dispose()); describe('Works with VirtualFileEditor', () => { - let feature: RenameCM; + let feature: RenameFeature; - beforeEach( - () => - (feature = env.init_integration({ - constructor: RenameCM, - id: 'Rename' - })) - ); - afterEach(() => env.dispose_feature(feature)); + beforeEach(() => { + feature = new RenameFeature({ + trans: nullTranslator.load(''), + connectionManager: env.connectionManager + }); + }); PageConfig.setOption('rootUri', 'file://'); it('renames files', async () => { - env.ce_editor.model.value.text = 'x = 1\n'; - await env.adapter.update_documents(); - let main_document = env.virtual_editor.virtual_document; + env.activeEditor.model.sharedModel.setSource('x = 1\n'); + await env.adapter.updateDocuments(); + let main_document = env.adapter.virtualDocument!; await feature.handleRename( { changes: { - ['file:///' + env.document_options.path]: [ + ['file:///' + env.documentOptions.path]: [ { range: { start: { line: 0, character: 0 }, @@ -48,13 +48,16 @@ describe('Rename', () => { } }, 'x', - 'y' + 'y', + env.adapter, + main_document as VirtualDocument ); - await env.adapter.update_documents(); + await env.adapter.updateDocuments(); - expect(env.status_message.message).to.be.equal('Renamed x to y'); - expect(main_document.value).to.be.equal('y = 1\n'); + // TODO: intercept notifications + // expect(env.status_message.message).toBe('Renamed x to y'); + expect(main_document.value).toBe('y = 1\n'); }); }); }); diff --git a/packages/jupyterlab-lsp/src/features/rename.ts b/packages/jupyterlab-lsp/src/features/rename.ts index c4c10f2a3..35a525ecf 100644 --- a/packages/jupyterlab-lsp/src/features/rename.ts +++ b/packages/jupyterlab-lsp/src/features/rename.ts @@ -2,7 +2,16 @@ import { JupyterFrontEnd, JupyterFrontEndPlugin } from '@jupyterlab/application'; -import { InputDialog } from '@jupyterlab/apputils'; +import { + InputDialog, + Notification, + ICommandPalette +} from '@jupyterlab/apputils'; +import { + ILSPFeatureManager, + ILSPDocumentConnectionManager, + WidgetLSPAdapter +} from '@jupyterlab/lsp'; import { ISettingRegistry } from '@jupyterlab/settingregistry'; import { ITranslator, @@ -13,16 +22,20 @@ import { LabIcon } from '@jupyterlab/ui-components'; import * as lsProtocol from 'vscode-languageserver-protocol'; import renameSvg from '../../style/icons/rename.svg'; +import { CodeRename as LSPRenameSettings } from '../_rename'; +import { ContextAssembler } from '../context'; import { - CodeMirrorIntegration, - IEditOutcome -} from '../editor_integration/codemirror'; -import { FeatureSettings, IFeatureCommand } from '../feature'; -import { ILSPFeatureManager, PLUGIN_ID } from '../tokens'; -import { CodeMirrorVirtualEditor } from '../virtual/codemirror_editor'; + PositionConverter, + editorAtRootPosition, + rootPositionToEditorPosition +} from '../converter'; +import { EditApplicator, IEditOutcome } from '../edits'; +import { FeatureSettings, Feature } from '../feature'; +import { PLUGIN_ID } from '../tokens'; +import { BrowserConsole } from '../virtual/console'; +import { VirtualDocument } from '../virtual/document'; -import { FEATURE_ID as DIAGNOSTICS_PLUGIN_ID } from './diagnostics'; -import { DiagnosticsCM } from './diagnostics/diagnostics'; +import { IDiagnosticsFeature } from './diagnostics/tokens'; export const renameIcon = new LabIcon({ name: 'lsp:rename', @@ -31,128 +44,63 @@ export const renameIcon = new LabIcon({ const FEATURE_ID = PLUGIN_ID + ':rename'; -const COMMANDS = (trans: TranslationBundle): IFeatureCommand[] => [ - { - id: 'rename-symbol', - execute: async ({ - editor, - connection, - virtual_position, - document, - features - }) => { - const rename_feature = features.get(FEATURE_ID) as RenameCM; - rename_feature.setTrans(trans); - - let root_position = - rename_feature.transform_virtual_position_to_root_position( - virtual_position - ); - let old_value = editor.get_token_at(root_position).value; - let handle_failure = (error: Error) => { - let status: string | null = ''; - - if (features.has(DIAGNOSTICS_PLUGIN_ID)) { - let diagnostics_feature = features.get( - DIAGNOSTICS_PLUGIN_ID - ) as DiagnosticsCM; - - status = RenameCM.ux_workaround_for_rope_limitation( - error, - diagnostics_feature, - editor as CodeMirrorVirtualEditor, - rename_feature - ); - } - - if (!status) { - status = trans.__(`Rename failed: %1`, error); - } - - rename_feature.setStatus(status, 7.5 * 1000); - }; - - const dialog_value = await InputDialog.getText({ - title: trans.__('Rename to'), - text: old_value, - okLabel: trans.__('Rename'), - cancelLabel: trans.__('Cancel') - }); - - try { - const new_value = dialog_value.value; - if (dialog_value.button.accept != true || new_value == null) { - // the user has cancelled the rename action or did not provide new value - return; - } - rename_feature.setStatus( - trans.__('Renaming %1 to %2...', old_value, new_value), - 2 * 1000 - ); - const edit = await connection?.rename( - virtual_position, - document.document_info, - new_value, - false - ); - if (edit) { - await rename_feature.handleRename(edit, old_value, new_value); - } else { - handle_failure(new Error('no edit from server')); - } - } catch (error) { - handle_failure(error); +export class RenameFeature extends Feature { + readonly id = RenameFeature.id; + readonly capabilities: lsProtocol.ClientCapabilities = { + textDocument: { + rename: { + prepareSupport: false, + honorsChangeAnnotations: false } - }, - is_enabled: ({ connection }) => - connection ? connection.provides('renameProvider') : false, - label: trans.__('Rename symbol'), - icon: renameIcon - } -]; + } + }; + protected console = new BrowserConsole().scope('Rename'); -export class RenameCM extends CodeMirrorIntegration { - public setTrans(trans: TranslationBundle) { - this.trans = trans; - } + private _trans: TranslationBundle; - public setStatus(message: string, timeout: number) { - return this.status_message.set(message, timeout); + constructor(options: RenameFeature.IOptions) { + super(options); + this._trans = options.trans; } async handleRename( workspaceEdit: lsProtocol.WorkspaceEdit, - old_value: string, - new_value: string + oldValue: string, + newValue: string, + adapter: WidgetLSPAdapter, + document: VirtualDocument ) { let outcome: IEditOutcome; + const applicator = new EditApplicator(document, adapter); try { - outcome = await this.apply_edit(workspaceEdit); + outcome = await applicator.applyEdit(workspaceEdit); } catch (error) { - this.status_message.set(this.trans.__('Rename failed: %1', error)); + Notification.emit(this._trans.__('Rename failed: %1', error), 'error'); return; } try { let status: string; - const change_text = this.trans.__('%1 to %2', old_value, new_value); + const change_text = this._trans.__('%1 to %2', oldValue, newValue); + let severity: 'success' | 'warning' | 'error' = 'success'; if (outcome.appliedChanges === 0) { - status = this.trans.__( + status = this._trans.__( 'Could not rename %1 - consult the language server documentation', change_text ); + severity = 'warning'; } else if (outcome.wasGranular) { - status = this.trans._n( + status = this._trans._n( 'Renamed %2 in %3 place', 'Renamed %2 in %3 places', outcome.appliedChanges!, change_text, outcome.appliedChanges ); - } else if (this.adapter.has_multiple_editors) { - status = this.trans._n( + } else if (adapter.hasMultipleEditors) { + status = this._trans._n( 'Renamed %2 in %3 cell', 'Renamed %2 in %3 cells', outcome.modifiedCells, @@ -160,110 +108,249 @@ export class RenameCM extends CodeMirrorIntegration { outcome.modifiedCells ); } else { - status = this.trans.__('Renamed %1', change_text); + status = this._trans.__('Renamed %1', change_text); } if (outcome.errors.length !== 0) { - status += this.trans.__(' with errors: %1', outcome.errors); + status += this._trans.__(' with errors: %1', outcome.errors); + severity = 'error'; } - this.status_message.set(status, 5 * 1000); + Notification.emit(status, severity); } catch (error) { this.console.warn(error); } return outcome; } +} - /** - * In #115 an issue with rename for Python (when using pyls) was identified: - * rename was failing with an obscure message when the source code could - * not be parsed correctly by rope (due to a user's syntax error). - * - * This function detects such a condition using diagnostics feature - * and provides a nice error message to the user. - */ - static ux_workaround_for_rope_limitation( - error: Error, - diagnostics_feature: DiagnosticsCM, - editor: CodeMirrorVirtualEditor, - rename_feature: RenameCM - ): string | null { - let has_index_error = false; - try { - has_index_error = error.message.includes('IndexError'); - } catch (e) { - return null; - } - if (!has_index_error) { - return null; - } - let dire_python_errors = ( - diagnostics_feature.diagnostics_db.all || [] - ).filter( - diagnostic => - diagnostic.diagnostic.message.includes('invalid syntax') || - diagnostic.diagnostic.message.includes('SyntaxError') || - diagnostic.diagnostic.message.includes('IndentationError') - ); +/** + * In #115 an issue with rename for Python (when using pyls) was identified: + * rename was failing with an obscure message when the source code could + * not be parsed correctly by rope (due to a user's syntax error). + * + * This function detects such a condition using diagnostics feature + * and provides a nice error message to the user. + */ +function guessFailureReason( + error: Error, + adapter: WidgetLSPAdapter, + diagnostics: IDiagnosticsFeature, + trans: TranslationBundle +): string | null { + let hasIndexError = false; + try { + hasIndexError = error.message.includes('IndexError'); + } catch (e) { + return null; + } + if (!hasIndexError) { + return null; + } + let direPythonErrors = ( + diagnostics.getDiagnosticsDB(adapter).all || [] + ).filter( + diagnostic => + diagnostic.diagnostic.message.includes('invalid syntax') || + diagnostic.diagnostic.message.includes('SyntaxError') || + diagnostic.diagnostic.message.includes('IndentationError') + ); - if (dire_python_errors.length === 0) { - return null; - } + if (direPythonErrors.length === 0) { + return null; + } - let dire_errors = [ - ...new Set( - dire_python_errors.map(diagnostic => { - let message = diagnostic.diagnostic.message; - let start = diagnostic.range.start; - if (rename_feature.adapter.has_multiple_editors) { - let { index: editor_id } = editor.find_editor(diagnostic.editor); - let cell_number = editor_id + 1; - // TODO: should we show "code cell" numbers, or just cell number? - return rename_feature.trans.__( - '%1 in cell %2 at line %3', - message, - cell_number, - start.line - ); - } else { - return rename_feature.trans.__( - '%1 at line %2', - message, - start.line - ); - } - }) - ) - ].join(', '); - return rename_feature.trans.__( - 'Syntax error(s) prevent rename: %1', - dire_errors - ); + let dire_errors = [ + ...new Set( + direPythonErrors.map(diagnostic => { + let message = diagnostic.diagnostic.message; + let start = diagnostic.range.start; + if (adapter.hasMultipleEditors) { + let editorIndex = adapter.editors.findIndex( + e => e.ceEditor.getEditor() === diagnostic.editor + ); + let cellNumber = editorIndex === -1 ? '(?)' : editorIndex + 1; + return trans.__( + '%1 in cell %2 at line %3', + message, + cellNumber, + start.line + ); + } else { + return trans.__('%1 at line %2', message, start.line); + } + }) + ) + ].join(', '); + return trans.__('Syntax error(s) prevents rename: %1', dire_errors); +} + +export namespace RenameFeature { + export interface IOptions extends Feature.IOptions { + trans: TranslationBundle; } + export const id = FEATURE_ID; +} + +export namespace CommandIDs { + export const renameSymbol = 'lsp:rename-symbol'; } export const RENAME_PLUGIN: JupyterFrontEndPlugin = { id: FEATURE_ID, - requires: [ILSPFeatureManager, ISettingRegistry, ITranslator], + requires: [ + ILSPFeatureManager, + ISettingRegistry, + ILSPDocumentConnectionManager + ], + optional: [ICommandPalette, IDiagnosticsFeature, ITranslator], autoStart: true, - activate: ( + activate: async ( app: JupyterFrontEnd, featureManager: ILSPFeatureManager, settingRegistry: ISettingRegistry, + connectionManager: ILSPDocumentConnectionManager, + palette: ICommandPalette, + diagnostics: IDiagnosticsFeature, translator: ITranslator ) => { const trans = (translator || nullTranslator).load('jupyterlab_lsp'); - const settings = new FeatureSettings(settingRegistry, FEATURE_ID); + const settings = new FeatureSettings( + settingRegistry, + RenameFeature.id + ); + await settings.ready; - featureManager.register({ - feature: { - editorIntegrationFactory: new Map([['CodeMirrorEditor', RenameCM]]), - id: FEATURE_ID, - name: 'LSP Rename', - settings: settings, - commands: COMMANDS(trans) - } + if (settings.composite.disable) { + return; + } + const feature = new RenameFeature({ + trans, + connectionManager + }); + featureManager.register(feature); + + const assembler = new ContextAssembler({ + app, + connectionManager + }); + + app.commands.addCommand(CommandIDs.renameSymbol, { + execute: async () => { + const context = assembler.getContext(); + if (!context) { + return; + } + const { adapter, connection, virtualPosition, rootPosition, document } = + context; + + const editorAccessor = editorAtRootPosition(adapter, rootPosition); + const editor = editorAccessor?.getEditor(); + if (!editor) { + console.log('Could not rename - no editor'); + return; + } + const editorPosition = rootPositionToEditorPosition( + adapter, + rootPosition + ); + const offset = editor.getOffsetAt( + PositionConverter.cm_to_ce(editorPosition) + ); + let oldValue = editor.getTokenAt(offset).value; + let handleFailure = (error: Error) => { + let status: string | null = ''; + + if (diagnostics) { + status = guessFailureReason(error, adapter, diagnostics, trans); + } + + if (!status) { + Notification.error(trans.__(`Rename failed: %1`, error)); + } else { + Notification.info(status); + } + }; + + const dialogValue = await InputDialog.getText({ + title: trans.__('Rename to'), + text: oldValue, + okLabel: trans.__('Rename'), + cancelLabel: trans.__('Cancel') + }); + + try { + const newValue = dialogValue.value; + if (dialogValue.button.accept != true || newValue == null) { + // the user has cancelled the rename action or did not provide new value + return; + } + Notification.info( + trans.__('Renaming %1 to %2...', oldValue, newValue) + ); + const edit = await connection!.clientRequests[ + 'textDocument/rename' + ].request({ + position: { + line: virtualPosition.line, + character: virtualPosition.ch + }, + textDocument: { + uri: document.documentInfo.uri + }, + newName: newValue + }); + if (edit) { + await feature.handleRename( + edit, + oldValue, + newValue, + adapter, + document + ); + } else { + handleFailure(new Error('no edit from server')); + } + } catch (error) { + handleFailure(error); + } + }, + isVisible: () => { + const context = assembler.getContext(); + if (!context) { + return false; + } + const { connection } = context; + return ( + connection != null && + connection.isReady && + connection.provides('renameProvider') + ); + }, + isEnabled: () => { + return assembler.isContextMenuOverToken() ? true : false; + }, + label: trans.__('Rename symbol'), + icon: renameIcon + }); + + // add to menus + app.contextMenu.addItem({ + selector: '.jp-Notebook .jp-CodeCell .jp-Editor', + command: CommandIDs.renameSymbol, + rank: 10 + }); + + app.contextMenu.addItem({ + selector: '.jp-FileEditor', + command: CommandIDs.renameSymbol, + rank: 0 + }); + + palette.addItem({ + command: CommandIDs.renameSymbol, + category: trans.__('Language Server Protocol') }); } }; diff --git a/packages/jupyterlab-lsp/src/features/signature.spec.ts b/packages/jupyterlab-lsp/src/features/signature.spec.ts index ceb8a8823..f4bf7680b 100644 --- a/packages/jupyterlab-lsp/src/features/signature.spec.ts +++ b/packages/jupyterlab-lsp/src/features/signature.spec.ts @@ -1,4 +1,6 @@ -import { expect } from 'chai'; +import { python } from '@codemirror/lang-python'; +import { Language } from '@codemirror/language'; +import * as lsProtocol from 'vscode-languageserver-protocol'; import { BrowserConsole } from '../virtual/console'; @@ -11,21 +13,21 @@ describe('Signature', () => { ['This function does foo', '', 'But there are more details'], 1 )!; - expect(split.lead).to.equal('This function does foo'); - expect(split.remainder).to.equal('But there are more details'); + expect(split.lead).toBe('This function does foo'); + expect(split.remainder).toBe('But there are more details'); }); it('Does not extracts when it would break markdown', () => { let split = extractLead( ['This is **not the end', '', 'of this spread sentence**'], 1 ); - expect(split).to.equal(null); + expect(split).toBe(null); split = extractLead( ['This is not the end', '', 'of this spread sentence'], 1 ); - expect(split).to.equal(null); + expect(split).toBe(null); }); it('Extracts standalone two-line paragraph', () => { const split = extractLead( @@ -37,8 +39,8 @@ describe('Signature', () => { ], 2 )!; - expect(split.lead).to.equal('This function does foo,\nand it does bar'); - expect(split.remainder).to.equal('But there are more details'); + expect(split.lead).toBe('This function does foo,\nand it does bar'); + expect(split.remainder).toBe('But there are more details'); }); it('Does not extract too long paragraph', () => { const split = extractLead( @@ -50,13 +52,19 @@ describe('Signature', () => { ], 1 ); - expect(split).to.equal(null); + expect(split).toBe(null); }); }); describe('SignatureToMarkdown', () => { - const MockHighlighter = (code: string, fragment: string) => - code.replace(fragment, `${fragment}`); + const MockHighlighter = ( + code: string, + fragment: lsProtocol.ParameterInformation, + _language: Language | undefined + ) => { + const label = typeof fragment.label === 'string' ? fragment.label : ''; + return code.replace(label, `${label}`); + }; it('renders plaintext signature', async () => { let text = signatureToMarkdown( @@ -71,11 +79,11 @@ describe('Signature', () => { ], activeParameter: 0 }, - 'python', + python().language, MockHighlighter, new BrowserConsole() ); - expect(text).to.be.equal( + expect(text).toBe( 'str(text)\n\nCreate a new \\*string\\* object from the given object.\n' ); }); @@ -96,11 +104,11 @@ describe('Signature', () => { ], activeParameter: 0 }, - 'python', + python().language, MockHighlighter, new BrowserConsole() ); - expect(text).to.be.equal( + expect(text).toBe( 'str(text)\n\nCreate a new \\*string\\* object from the given object.\n' ); }); @@ -121,11 +129,11 @@ describe('Signature', () => { ], activeParameter: 0 }, - 'python', + python().language, MockHighlighter, new BrowserConsole() ); - expect(text).to.be.equal( + expect(text).toBe( 'str(text)\n\nCreate a new *string* object from the given object.' ); }); @@ -146,13 +154,13 @@ describe('Signature', () => { ], activeParameter: 0 }, - 'python', + python().language, MockHighlighter, new BrowserConsole(), undefined, 4 ); - expect(text).to.be.equal( + expect(text).toBe( 'str(text)\n\nline 1\n
    \nline 2\nline 3\nline 4\nline 5\n
    ' ); }); @@ -166,13 +174,13 @@ describe('Signature', () => { kind: 'plaintext' } }, - 'python', + python().language, MockHighlighter, new BrowserConsole(), undefined, 4 ); - expect(text).to.be.equal( + expect(text).toBe( '```python\nstr()\n```\n\nline 1\n
    \nline 2\nline 3\nline 4\nline 5\n
    ' ); }); diff --git a/packages/jupyterlab-lsp/src/features/signature.ts b/packages/jupyterlab-lsp/src/features/signature.ts index 6df9e440c..f6e93f360 100644 --- a/packages/jupyterlab-lsp/src/features/signature.ts +++ b/packages/jupyterlab-lsp/src/features/signature.ts @@ -1,27 +1,41 @@ +import { Language } from '@codemirror/language'; +import { ChangeSet, Text } from '@codemirror/state'; +import { EditorView } from '@codemirror/view'; import { JupyterFrontEnd, JupyterFrontEndPlugin } from '@jupyterlab/application'; -import { ICodeMirror } from '@jupyterlab/codemirror'; +import { + IEditorExtensionRegistry, + EditorExtensionRegistry, + IEditorLanguageRegistry, + jupyterHighlightStyle +} from '@jupyterlab/codemirror'; +import { + IEditorPosition, + IRootPosition, + offsetAtPosition, + positionAtOffset, + ILSPFeatureManager, + ILSPDocumentConnectionManager, + WidgetLSPAdapter +} from '@jupyterlab/lsp'; import { IRenderMimeRegistry } from '@jupyterlab/rendermime'; import { ISettingRegistry } from '@jupyterlab/settingregistry'; +import { highlightTree } from '@lezer/highlight'; import * as lsProtocol from 'vscode-languageserver-protocol'; import { CodeSignature as LSPSignatureSettings } from '../_signature'; import { EditorTooltipManager } from '../components/free_tooltip'; -import { PositionConverter } from '../converter'; -import { CodeMirrorIntegration } from '../editor_integration/codemirror'; -import { FeatureSettings, IFeatureLabIntegration } from '../feature'; import { - IEditorPosition, - IRootPosition, - offset_at_position, - position_at_offset -} from '../positioning'; -import { ILogConsoleCore, ILSPFeatureManager, PLUGIN_ID } from '../tokens'; + PositionConverter, + rootPositionToVirtualPosition, + editorPositionToRootPosition +} from '../converter'; +import { FeatureSettings, Feature } from '../feature'; +import { ILogConsoleCore, PLUGIN_ID } from '../tokens'; import { escapeMarkdown } from '../utils'; -import { CodeMirrorVirtualEditor } from '../virtual/codemirror_editor'; -import { IEditorChange } from '../virtual/editor'; +import { BrowserConsole } from '../virtual/console'; const TOOLTIP_ID = 'signature'; const CLASS_NAME = 'lsp-signature-help'; @@ -74,11 +88,11 @@ export function extractLead(lines: string[], size: number): ISplit | null { */ export function signatureToMarkdown( item: lsProtocol.SignatureInformation, - language: string = '', + language: Language | undefined, codeHighlighter: ( source: string, - variable: string, - language: string + variable: lsProtocol.ParameterInformation, + language: Language | undefined ) => string, logger: ILogConsoleCore, activeParameterFallback?: number | null, @@ -96,17 +110,13 @@ export function signatureToMarkdown( 'LSP server returned wrong number for activeSignature for: ', item ); - markdown = '```' + language + '\n' + label + '\n```'; + markdown = '```' + language?.name + '\n' + label + '\n```'; } else { const parameter = item.parameters[activeParameter]; - let substring: string = - typeof parameter.label === 'string' - ? parameter.label - : label.slice(parameter.label[0], parameter.label[1]); - markdown = codeHighlighter(label, substring, language); + markdown = codeHighlighter(label, parameter, language); } } else { - markdown = '```' + language + '\n' + label + '\n```'; + markdown = '```' + language?.name + '\n' + label + '\n```'; } let details = ''; if (item.documentation) { @@ -158,12 +168,131 @@ export function signatureToMarkdown( return markdown; } -export class SignatureCM extends CodeMirrorIntegration { +function extractLastCharacter(changes: ChangeSet): string { + // TODO test with pasting, maybe rewrite to retrieve based on cursor position. + let last = ''; + changes.iterChanges( + ( + fromA: number, + toA: number, + fromB: number, + toB: number, + inserted: Text + ) => { + last = inserted.sliceString(-1); + } + ); + return last ? last[0] : ''; +} + +function runMode( + source: string, + language: Language, + callback: ( + text: string, + style: string | null, + from: number, + to: number + ) => void +): void { + const tree = language.parser.parse(source); + let pos = 0; + highlightTree(tree, jupyterHighlightStyle, (from, to, token) => { + if (from > pos) { + callback(source.slice(pos, from), null, pos, from); + } + callback(source.slice(from, to), token, from, to); + pos = to; + }); + if (pos != tree.length) { + callback(source.slice(pos, tree.length), null, pos, tree.length); + } +} + +export class SignatureFeature extends Feature { + readonly id = SignatureFeature.id; + readonly capabilities: lsProtocol.ClientCapabilities = { + textDocument: { + signatureHelp: { + dynamicRegistration: true, + signatureInformation: { + documentationFormat: ['markdown', 'plaintext'] + } + } + } + }; + tooltip: EditorTooltipManager; + protected signatureCharacter: IRootPosition; protected _signatureCharacters: string[]; + protected console = new BrowserConsole().scope('Signature'); + protected settings: FeatureSettings; + protected languageRegistry: IEditorLanguageRegistry; + + constructor(options: SignatureFeature.IOptions) { + super(options); + this.settings = options.settings; + this.tooltip = new EditorTooltipManager(options.renderMimeRegistry); + this.languageRegistry = options.languageRegistry; + const connectionManager = options.connectionManager; + options.editorExtensionRegistry.addExtension({ + name: 'lsp:codeSignature', + factory: options => { + const updateListener = EditorView.updateListener.of(viewUpdate => { + const adapter = [...connectionManager.adapters.values()].find( + adapter => adapter.widget.node.contains(viewUpdate.view.contentDOM) + ); + + if (!adapter) { + this.console.log('No adapter, will not show signature'); + return; + } - get settings() { - return super.settings as FeatureSettings; + // TODO: the assumption that updated editor = active editor will fail on RTC. How to get `CodeEditor.IEditor` and `Document.IEditor` from `EditorView`? we got `CodeEditor.IModel` from `options.model` but may need more context here. + const editorAccessor = adapter.activeEditor; + const editor = editorAccessor!.getEditor()!; + + // TODO: or should it come from viewUpdate instead?! + // especially on copy paste this can be problematic. + const position = editor.getCursorPosition(); + + const editorPosition = PositionConverter.ce_to_cm( + position + ) as IEditorPosition; + + // Delay handling by moving on top of the stack + // so that virtual document is updated. + setTimeout(() => { + if (viewUpdate.docChanged) { + this.afterChange( + viewUpdate.changes, + adapter, + editorPosition + ).catch(this.console.warn); + } else { + this.onCursorActivity(adapter, editorPosition).catch( + this.console.warn + ); + } + }, 0); + }); + + const focusListener = EditorView.domEventHandlers({ + focus: () => { + // TODO + // this.onCursorActivity() + }, + blur: event => { + this.onBlur(event); + } + }); + + return EditorExtensionRegistry.createImmutableExtension([ + updateListener, + focusListener + ]); + } + }); } get _closeCharacters(): string[] { @@ -173,35 +302,27 @@ export class SignatureCM extends CodeMirrorIntegration { return this.settings.composite.closeCharacters; } - register(): void { - this.editor_handlers.set( - 'cursorActivity', - this.onCursorActivity.bind(this) - ); - this.editor_handlers.set('blur', this.onBlur.bind(this)); - this.editor_handlers.set('focus', this.onCursorActivity.bind(this)); - super.register(); - } - - onBlur(virtualEditor: CodeMirrorVirtualEditor, event: FocusEvent) { + onBlur(event: FocusEvent) { // hide unless the focus moved to the signature itself // (allowing user to select/copy from signature) + const target = event.relatedTarget as Element | null; if ( this.isSignatureShown() && - (event.relatedTarget as Element).closest('.' + CLASS_NAME) === null + (target ? target.closest('.' + CLASS_NAME) === null : true) ) { this._removeTooltip(); } } - onCursorActivity() { + async onCursorActivity( + adapter: WidgetLSPAdapter, + newEditorPosition: IEditorPosition + ) { if (!this.isSignatureShown()) { return; } - const newRootPosition = this.virtual_editor.get_cursor_position(); - const initialPosition = this.lab_integration.tooltip.position; - let newEditorPosition = - this.virtual_editor.root_position_to_editor(newRootPosition); + + const initialPosition = this.tooltip.position; if ( newEditorPosition.line === initialPosition.line && newEditorPosition.ch < initialPosition.ch @@ -211,19 +332,13 @@ export class SignatureCM extends CodeMirrorIntegration { } else { // otherwise, update the signature as the active parameter could have changed, // or the server may want us to close the tooltip - this.requestSignature(newRootPosition, initialPosition)?.catch( - this.console.warn - ); + await this._requestSignature(adapter, newEditorPosition, initialPosition); } } - get lab_integration() { - return super.lab_integration as SignatureLabIntegration; - } - protected get_markup_for_signature_help( response: lsProtocol.SignatureHelp, - language: string = '' + language: Language | undefined ): lsProtocol.MarkupContent { let signatures = new Array(); @@ -257,31 +372,60 @@ export class SignatureCM extends CodeMirrorIntegration { }; } - protected highlightCode(source: string, variable: string, language: string) { + protected highlightCode( + source: string, + parameter: lsProtocol.ParameterInformation, + language: Language | undefined + ) { const pre = document.createElement('pre'); const code = document.createElement('code'); pre.appendChild(code); - code.className = `cm-s-jupyter language-${language}`; - this.lab_integration.codeMirror.CodeMirror.runMode( - source, - language, - (token: string, className: string) => { - let element: HTMLElement | Node; - if (className) { - element = document.createElement('span'); - (element as HTMLElement).classList.add('cm-' + className); - element.textContent = token; - } else { - element = document.createTextNode(token); - } - if (className === 'variable' && token === variable) { - const mark = document.createElement('mark'); - mark.appendChild(element); - element = mark; + code.className = + 'cm-s-jupyter' + language ? `language-${language?.name}` : ''; + + const substring: string = + typeof parameter.label === 'string' + ? parameter.label + : source.slice(parameter.label[0], parameter.label[1]); + const start = source.indexOf(substring); + const end = start + substring.length; + + if (!language) { + code.innerText = source; + } else { + runMode( + source, + language, + (token: string, className: string, from: number, to: number) => { + let element: HTMLElement | Node; + if (className) { + element = document.createElement('span'); + (element as HTMLElement).classList.add(className); + element.textContent = token; + } else { + element = document.createTextNode(token); + } + // In CodeMirror6 variables are not necessairly tokenized, + // we need to split them manually + if (from <= end && start <= to) { + const a = Math.max(start, from); + const b = Math.min(to, end); + const prefix = source.slice(from, a); + const content = source.slice(a, b); + const suffix = source.slice(b, to); + + const mark = document.createElement('mark'); + mark.appendChild(document.createTextNode(content)); + code.appendChild(document.createTextNode(prefix)); + code.appendChild(mark); + code.appendChild(document.createTextNode(suffix)); + } else { + code.appendChild(element); + } } - code.appendChild(element); - } - ); + ); + } + return pre.outerHTML; } @@ -290,7 +434,7 @@ export class SignatureCM extends CodeMirrorIntegration { */ protected signatureToMarkdown( item: lsProtocol.SignatureInformation, - language: string, + language: Language | undefined, activeParameterFallback?: number | null ): string { return signatureToMarkdown( @@ -304,19 +448,32 @@ export class SignatureCM extends CodeMirrorIntegration { } private _removeTooltip() { - this.lab_integration.tooltip.remove(); + this.tooltip.remove(); } private _hideTooltip() { - this.lab_integration.tooltip.hide(); + this.tooltip.hide(); } private handleSignature( response: lsProtocol.SignatureHelp, - position_at_request: IRootPosition, - display_position: IEditorPosition | null = null + adapter: WidgetLSPAdapter, + positionAtRequest: IRootPosition, + displayPosition: IEditorPosition | null = null ) { - this.console.log('Signature received', response); + this.console.debug('Signature received', response); + + // TODO: this might wrong connection! + // we need to find the correct documentAtRootPosition + const virtualDocument = adapter.virtualDocument!; + const connection = this.connectionManager.connections.get( + virtualDocument.uri + )!; + + const signatureCharacters: string[] = + connection.serverCapabilities.signatureHelpProvider?.triggerCharacters ?? + []; + if (response === null) { // do not hide on undefined as it simply indicates that no new info is available // (null means close, undefined means no update, response means update) @@ -335,13 +492,32 @@ export class SignatureCM extends CodeMirrorIntegration { return; } - let root_position = this.virtual_editor.get_cursor_position(); + // TODO: helper? + const editorAccessor = adapter.activeEditor!; + const editor = editorAccessor.getEditor()!; + const pos = editor.getCursorPosition(); + const editorPosition = PositionConverter.ce_to_cm(pos) as IEditorPosition; + + // TODO should I just shove it into Feature class and have an adapter getter in there? + const rootPosition = editorPositionToRootPosition( + adapter, + editorAccessor, + editorPosition + ); + + if (!rootPosition) { + this.console.warn( + 'Signature failed: could not map editor position to root position.' + ); + this._removeTooltip(); + return; + } // if the cursor advanced in the same line, the previously retrieved signature may still be useful // if the line changed or cursor moved backwards then no reason to keep the suggestions if ( - position_at_request.line != root_position.line || - root_position.ch < position_at_request.ch + positionAtRequest.line != rootPosition.line || + rootPosition.ch < positionAtRequest.ch ) { this.console.debug( 'Ignoring signature response: cursor has receded or changed line' @@ -350,54 +526,70 @@ export class SignatureCM extends CodeMirrorIntegration { return; } - let cm_editor = this.get_cm_editor(root_position); - if (!cm_editor.hasFocus()) { + //const virtualPosition = rootPositionToVirtualPosition(adapter, rootPosition); + + //let editorAccessor = adapter.editors[adapter.getEditorIndexAt(virtualPosition)].ceEditor; + //const editor = editorAccessor.getEditor(); + if (!editor) { + this.console.debug( + 'Ignoring signature response: the corresponding editor is not loaded' + ); + return; + } + if (!editor.hasFocus()) { this.console.debug( 'Ignoring signature response: the corresponding editor lost focus' ); this._removeTooltip(); return; } - let editor_position = - this.virtual_editor.root_position_to_editor(root_position); - let language = this.get_language_at(editor_position, cm_editor); + + //let editorPosition = + // virtualDocument.transformVirtualToEditor(virtualPosition); + + const editorLanguage = this.languageRegistry.findByMIME( + editor.model.mimeType + ); + // TODO: restore language probing + // let language = cm_editor.getModeAt(editorPosition).name; + const language = editorLanguage?.support?.language; let markup = this.get_markup_for_signature_help(response, language); - this.console.log( + this.console.debug( 'Signature will be shown', language, markup, - root_position, + rootPosition, response ); - if (display_position === null) { + if (displayPosition === null) { // try to find last occurrance of trigger character to position the tooltip - const content = cm_editor.getValue(); + const content = editor.model.sharedModel.getSource(); const lines = content.split('\n'); - const offset = offset_at_position( - PositionConverter.cm_to_ce(editor_position), + const offset = offsetAtPosition( + PositionConverter.cm_to_ce(editorPosition!), lines ); + // maybe? + // const offset = cm_editor.getOffsetAt(PositionConverter.cm_to_ce(editorPosition)); const subset = content.substring(0, offset); const lastTriggerCharacterOffset = Math.max( - ...this.signatureCharacters.map(character => - subset.lastIndexOf(character) - ) + ...signatureCharacters.map(character => subset.lastIndexOf(character)) ); if (lastTriggerCharacterOffset !== -1) { - display_position = PositionConverter.ce_to_cm( - position_at_offset(lastTriggerCharacterOffset, lines) + displayPosition = PositionConverter.ce_to_cm( + positionAtOffset(lastTriggerCharacterOffset, lines) ) as IEditorPosition; } else { - display_position = editor_position; + displayPosition = editorPosition; } } - this.lab_integration.tooltip.showOrCreate({ + this.tooltip.showOrCreate({ markup, - position: display_position, + position: displayPosition!, id: TOOLTIP_ID, - ce_editor: this.virtual_editor.find_ce_editor(cm_editor), - adapter: this.adapter, + ceEditor: editor, + adapter: adapter, className: CLASS_NAME, tooltip: { privilege: 'forceAbove', @@ -410,138 +602,148 @@ export class SignatureCM extends CodeMirrorIntegration { }); } - get signatureCharacters() { - if (!this._signatureCharacters?.length) { - this._signatureCharacters = - this.connection.getLanguageSignatureCharacters(); - } - return this._signatureCharacters; - } - protected isSignatureShown() { - return this.lab_integration.tooltip.isShown(TOOLTIP_ID); + return this.tooltip.isShown(TOOLTIP_ID); } - afterChange(change: IEditorChange, root_position: IRootPosition) { - const last_character = this.extract_last_character(change); + async afterChange( + change: ChangeSet, + adapter: WidgetLSPAdapter, + editorPosition: IEditorPosition + ) { + const lastCharacter = extractLastCharacter(change); const isSignatureShown = this.isSignatureShown(); let previousPosition: IEditorPosition | null = null; + await adapter.updateFinished; if (isSignatureShown) { - previousPosition = this.lab_integration.tooltip.position; - if (this._closeCharacters.includes(last_character)) { + previousPosition = this.tooltip.position; + if (this._closeCharacters.includes(lastCharacter)) { // remove just in case but do not short-circuit in case if we need to re-trigger this._removeTooltip(); } } + // TODO: use connection for virtual document from root position! + const virtualDocument = adapter.virtualDocument; + if (!virtualDocument) { + this.console.warn('Could not access virtual document'); + return; + } + const connection = this.connectionManager.connections.get( + virtualDocument.uri + )!; + if (!connection.isReady) { + return; + } + + const signatureCharacters = + connection.serverCapabilities.signatureHelpProvider?.triggerCharacters ?? + []; + // only proceed if: trigger character was used or the signature is/was visible immediately before - if ( - !(this.signatureCharacters.includes(last_character) || isSignatureShown) - ) { + if (!(signatureCharacters.includes(lastCharacter) || isSignatureShown)) { return; } - this.requestSignature(root_position, previousPosition)?.catch( - this.console.warn - ); + await this._requestSignature(adapter, editorPosition, previousPosition); } - private requestSignature( - root_position: IRootPosition, + private async _requestSignature( + adapter: WidgetLSPAdapter, + newEditorPosition: IEditorPosition, previousPosition: IEditorPosition | null ) { + // TODO: why would virtual document be missing? + const virtualDocument = adapter.virtualDocument!; + const connection = this.connectionManager.connections.get( + virtualDocument.uri + )!; + if ( !( - this.connection.isReady && - this.connection.serverCapabilities?.signatureHelpProvider + connection.isReady && + connection.serverCapabilities.signatureHelpProvider ) ) { return; } - this.signatureCharacter = root_position; - - let virtual_position = - this.virtual_editor.root_position_to_virtual_position(root_position); - - return this.connection.clientRequests['textDocument/signatureHelp'] - .request({ - position: { - line: virtual_position.line, - character: virtual_position.ch - }, - textDocument: { - uri: this.virtual_document.document_info.uri - } - }) - .then(help => - this.handleSignature(help, root_position, previousPosition) - ); - } -} -class SignatureLabIntegration implements IFeatureLabIntegration { - tooltip: EditorTooltipManager; - settings: FeatureSettings; + // TODO: why missing + const rootPosition = virtualDocument.transformFromEditorToRoot( + adapter.activeEditor!, + newEditorPosition + )!; - constructor( - app: JupyterFrontEnd, - settings: FeatureSettings, - renderMimeRegistry: IRenderMimeRegistry, - public codeMirror: ICodeMirror - ) { - this.tooltip = new EditorTooltipManager(renderMimeRegistry); + this.signatureCharacter = rootPosition; + + const virtualPosition = rootPositionToVirtualPosition( + adapter, + rootPosition + ); + + const help = await connection.clientRequests[ + 'textDocument/signatureHelp' + ].request({ + position: { + line: virtualPosition.line, + character: virtualPosition.ch + }, + textDocument: { + uri: virtualDocument.documentInfo.uri + } + }); + return this.handleSignature(help, adapter, rootPosition, previousPosition); } } -const FEATURE_ID = PLUGIN_ID + ':signature'; +export namespace SignatureFeature { + export interface IOptions extends Feature.IOptions { + settings: FeatureSettings; + renderMimeRegistry: IRenderMimeRegistry; + editorExtensionRegistry: IEditorExtensionRegistry; + languageRegistry: IEditorLanguageRegistry; + } + export const id = PLUGIN_ID + ':signature'; +} export const SIGNATURE_PLUGIN: JupyterFrontEndPlugin = { - id: FEATURE_ID, + id: SignatureFeature.id, requires: [ ILSPFeatureManager, ISettingRegistry, IRenderMimeRegistry, - ICodeMirror + IEditorExtensionRegistry, + ILSPDocumentConnectionManager, + IEditorLanguageRegistry ], autoStart: true, - activate: ( + activate: async ( app: JupyterFrontEnd, featureManager: ILSPFeatureManager, settingRegistry: ISettingRegistry, renderMimeRegistry: IRenderMimeRegistry, - codeMirror: ICodeMirror + editorExtensionRegistry: IEditorExtensionRegistry, + connectionManager: ILSPDocumentConnectionManager, + languageRegistry: IEditorLanguageRegistry ) => { const settings = new FeatureSettings( settingRegistry, - FEATURE_ID + SignatureFeature.id ); - const labIntegration = new SignatureLabIntegration( - app, + await settings.ready; + if (settings.composite.disable) { + return; + } + const feature = new SignatureFeature({ settings, + connectionManager, renderMimeRegistry, - codeMirror - ); - - featureManager.register({ - feature: { - editorIntegrationFactory: new Map([['CodeMirrorEditor', SignatureCM]]), - id: FEATURE_ID, - name: 'LSP Function signature', - labIntegration: labIntegration, - settings: settings, - capabilities: { - textDocument: { - signatureHelp: { - dynamicRegistration: true, - signatureInformation: { - documentationFormat: ['markdown', 'plaintext'] - } - } - } - } - } + editorExtensionRegistry, + languageRegistry }); + featureManager.register(feature); + // return feature; } }; diff --git a/packages/jupyterlab-lsp/src/features/syntax_highlighting.ts b/packages/jupyterlab-lsp/src/features/syntax_highlighting.ts index 9a0ab7938..b9be71db4 100644 --- a/packages/jupyterlab-lsp/src/features/syntax_highlighting.ts +++ b/packages/jupyterlab-lsp/src/features/syntax_highlighting.ts @@ -1,3 +1,4 @@ +import { EditorView } from '@codemirror/view'; import { JupyterFrontEnd, JupyterFrontEndPlugin @@ -6,48 +7,70 @@ import { IEditorMimeTypeService, IEditorServices } from '@jupyterlab/codeeditor'; -import { CodeMirrorEditor, ICodeMirror } from '@jupyterlab/codemirror'; +import { + CodeMirrorEditor, + IEditorExtensionRegistry, + IEditorLanguageRegistry, + EditorExtensionRegistry +} from '@jupyterlab/codemirror'; +import { + ILSPFeatureManager, + ILSPDocumentConnectionManager, + WidgetLSPAdapter +} from '@jupyterlab/lsp'; import { ISettingRegistry } from '@jupyterlab/settingregistry'; -import { ITranslator } from '@jupyterlab/translation'; import { LabIcon } from '@jupyterlab/ui-components'; import syntaxSvg from '../../style/icons/syntax-highlight.svg'; import { CodeSyntax as LSPSyntaxHighlightingSettings } from '../_syntax_highlighting'; -import { CodeMirrorIntegration } from '../editor_integration/codemirror'; -import { - FeatureSettings, - IEditorIntegrationOptions, - IFeatureLabIntegration, - IFeatureSettings -} from '../feature'; -import { ILSPFeatureManager, PLUGIN_ID } from '../tokens'; +import { FeatureSettings, Feature } from '../feature'; +import { PLUGIN_ID } from '../tokens'; +import { VirtualDocument } from '../virtual/document'; export const syntaxHighlightingIcon = new LabIcon({ name: 'lsp:syntax-highlighting', svgstr: syntaxSvg }); -const FEATURE_ID = PLUGIN_ID + ':syntax_highlighting'; +export class SyntaxHighlightingFeature extends Feature { + readonly id = SyntaxHighlightingFeature.id; + // note: semantic highlighting could be implemented here + readonly capabilities = {}; + protected originalModes = new Map(); -export class CMSyntaxHighlighting extends CodeMirrorIntegration { - editors_with_active_highlight: Set; - - constructor(options: IEditorIntegrationOptions) { + constructor(protected options: SyntaxHighlightingFeature.IOptions) { super(options); - this.virtual_document.changed.connect(this.update_mode.bind(this), this); - this.editors_with_active_highlight = new Set(); - } + const connectionManager = options.connectionManager; + + options.editorExtensionRegistry.addExtension({ + name: 'lsp:syntaxHighlighting', + factory: options => { + const updateListener = EditorView.updateListener.of(viewUpdate => { + if (!viewUpdate.docChanged) { + return; + } - get lab_integration() { - return super.lab_integration as SyntaxLabIntegration; - } + const adapter = [...connectionManager.adapters.values()].find( + adapter => adapter.widget.node.contains(viewUpdate.view.contentDOM) + ); - get settings() { - return super.settings as IFeatureSettings; + // TODO https://github.com/jupyterlab/jupyterlab/issues/14711#issuecomment-1624442627 + // const editor = adapter.editors.find(e => e.model === options.model); + + if (adapter) { + this.updateMode(adapter, viewUpdate.view).catch(console.warn); + } + }); + + return EditorExtensionRegistry.createImmutableExtension([ + updateListener + ]); + } + }); } - private get_mode(language: string) { - let mimetype = this.lab_integration.mimeTypeService.getMimeTypeByLanguage({ + private getMode(language: string): string | undefined { + const mimetype = this.options.mimeTypeService.getMimeTypeByLanguage({ name: language }); @@ -58,28 +81,46 @@ export class CMSyntaxHighlighting extends CodeMirrorIntegration { return; } - return this.lab_integration.codeMirror.CodeMirror.findModeByMIME(mimetype); - } - - update_mode() { - let root = this.virtual_document; - let editors_with_current_highlight = new Set(); + const editorLanguage = this.options.languageRegistry.findByMIME(mimetype); - for (let map of root.foreign_document_maps) { - for (let [range, block] of map.entries()) { - let ce_editor = block.editor as CodeMirrorEditor; - let editor = ce_editor.editor; - let lines = editor.getValue('\n'); - let total_area = lines.concat('').length; + if (!editorLanguage) { + return; + } - let covered_area = - ce_editor.getOffsetAt(range.end) - ce_editor.getOffsetAt(range.start); + return mimetype; + } - let coverage = covered_area / total_area; + async updateMode(adapter: WidgetLSPAdapter, view: EditorView) { + const topDocument = adapter.virtualDocument as VirtualDocument; + const totalArea = view.state.doc.length; + + // TODO no way to map from EditorView to Document.IEditor is blocking here. + // TODO: active editor is not necessairly the editor that triggered the update + const editorAccessor = adapter.activeEditor; + const editor = editorAccessor?.getEditor(); + if ( + !editorAccessor || + !editor || + (editor as CodeMirrorEditor).editor !== view + ) { + // TODO: ideally we would not have to do this (we would have view -> editor map) + return; + } + if (!topDocument) { + return; + } + await topDocument.updateManager.updateDone; - let language = block.virtual_document.language; + const overrides = new Map(); + for (const map of topDocument.getForeignDocuments(editorAccessor)) { + for (const [range, block] of map.entries()) { + const editor = block.editor.getEditor()! as CodeMirrorEditor; + const coveredArea = + editor.getOffsetAt(range.end) - editor.getOffsetAt(range.start); + const coverage = coveredArea / totalArea; - let mode = this.get_mode(language); + const language = block.virtualDocument.language; + const mode = this.getMode(language); // if not highlighting mode available, skip this editor if (typeof mode === 'undefined') { @@ -87,73 +128,85 @@ export class CMSyntaxHighlighting extends CodeMirrorIntegration { } // change the mode if the majority of the code is the foreign code - if (coverage > this.settings.composite.foreignCodeThreshold) { - editors_with_current_highlight.add(ce_editor); - let old_mode = editor.getOption('mode'); - if (old_mode != mode.mime) { - editor.setOption('mode', mode.mime); - } + if (coverage > this.options.settings.composite.foreignCodeThreshold) { + const original = editor.model.mimeType; + // this will trigger a side effect of switching language by updating + // private language compartment (implementation detail). + editor.model.mimeType = mode; + overrides.set(editor, original); } } } - - if (editors_with_current_highlight != this.editors_with_active_highlight) { - for (let ce_editor of this.editors_with_active_highlight) { - if (!editors_with_current_highlight.has(ce_editor)) { - ce_editor.editor.setOption('mode', ce_editor.model.mimeType); - } + const relevantEditors = new Set( + adapter.editors.map(e => e.ceEditor.getEditor()) + ); + // restore modes on editors which are no longer over the threshold + // (but only those which belong to this adapter). + for (const [editor, originalMode] of this.originalModes) { + if (!relevantEditors.has(editor)) { + continue; + } + if (overrides.has(editor)) { + continue; + } else { + editor.model.mimeType = originalMode; + } + } + // add new ovverrides to remember the original mode + for (const [editor, mode] of overrides) { + if (!this.originalModes.has(editor)) { + this.originalModes.set(editor, mode); } } - - this.editors_with_active_highlight = editors_with_current_highlight; } } -class SyntaxLabIntegration implements IFeatureLabIntegration { - // TODO: we could accept custom mimetype mapping from settings - settings: IFeatureSettings; - - constructor( - public mimeTypeService: IEditorMimeTypeService, - public codeMirror: ICodeMirror - ) {} +export namespace SyntaxHighlightingFeature { + export interface IOptions extends Feature.IOptions { + settings: FeatureSettings; + mimeTypeService: IEditorMimeTypeService; + editorExtensionRegistry: IEditorExtensionRegistry; + languageRegistry: IEditorLanguageRegistry; + } + export const id = PLUGIN_ID + ':syntax_highlighting'; } export const SYNTAX_HIGHLIGHTING_PLUGIN: JupyterFrontEndPlugin = { - id: FEATURE_ID, + id: SyntaxHighlightingFeature.id, requires: [ ILSPFeatureManager, IEditorServices, ISettingRegistry, - ICodeMirror, - ITranslator + IEditorExtensionRegistry, + IEditorLanguageRegistry, + ILSPDocumentConnectionManager ], autoStart: true, - activate: ( + activate: async ( app: JupyterFrontEnd, featureManager: ILSPFeatureManager, editorServices: IEditorServices, settingRegistry: ISettingRegistry, - codeMirror: ICodeMirror, - translator: ITranslator + editorExtensionRegistry: IEditorExtensionRegistry, + languageRegistry: IEditorLanguageRegistry, + connectionManager: ILSPDocumentConnectionManager ) => { - const settings = new FeatureSettings(settingRegistry, FEATURE_ID); - const trans = translator.load('jupyterlab_lsp'); - - featureManager.register({ - feature: { - editorIntegrationFactory: new Map([ - ['CodeMirrorEditor', CMSyntaxHighlighting] - ]), - commands: [], - id: FEATURE_ID, - name: trans.__('Syntax highlighting'), - labIntegration: new SyntaxLabIntegration( - editorServices.mimeTypeService, - codeMirror - ), - settings: settings - } + const settings = new FeatureSettings( + settingRegistry, + SyntaxHighlightingFeature.id + ); + await settings.ready; + if (settings.composite.disable) { + return; + } + const feature = new SyntaxHighlightingFeature({ + settings, + connectionManager, + editorExtensionRegistry, + mimeTypeService: editorServices.mimeTypeService, + languageRegistry }); + featureManager.register(feature); + // return feature; } }; diff --git a/packages/jupyterlab-lsp/src/index.ts b/packages/jupyterlab-lsp/src/index.ts index 1e4180794..459307d5f 100644 --- a/packages/jupyterlab-lsp/src/index.ts +++ b/packages/jupyterlab-lsp/src/index.ts @@ -16,28 +16,23 @@ import { JupyterFrontEnd, JupyterFrontEndPlugin } from '@jupyterlab/application'; -import { ICommandPalette } from '@jupyterlab/apputils'; -import { IDocumentManager } from '@jupyterlab/docmanager'; -import { IDocumentWidget } from '@jupyterlab/docregistry'; import { ILoggerRegistry } from '@jupyterlab/logconsole'; +import { + ILSPDocumentConnectionManager, + DocumentConnectionManager, + ILanguageServerManager +} from '@jupyterlab/lsp'; import { ISettingRegistry } from '@jupyterlab/settingregistry'; import { IStatusBar } from '@jupyterlab/statusbar'; import { ITranslator, nullTranslator } from '@jupyterlab/translation'; -import { IFormComponentRegistry } from '@jupyterlab/ui-components'; -import { Signal } from '@lumino/signaling'; +import { IFormRendererRegistry } from '@jupyterlab/ui-components'; import '../style/index.css'; -import { LanguageServer } from './_plugin'; -import { WIDGET_ADAPTER_MANAGER } from './adapter_manager'; -import { FILE_EDITOR_ADAPTER } from './adapters/file_editor'; -import { NOTEBOOK_ADAPTER } from './adapters/notebook'; -import { ContextCommandManager } from './command_manager'; +import { LanguageServers } from './_plugin'; +import { FILEEDITOR_ADAPTER_PLUGIN } from './adapters/fileeditor'; +import { NOTEBOOK_ADAPTER_PLUGIN } from './adapters/notebook'; import { StatusButtonExtension } from './components/statusbar'; -import { DocumentConnectionManager } from './connection_manager'; -import { CODE_EXTRACTORS_MANAGER } from './extractors/manager'; -import { IForeignCodeExtractorsRegistry } from './extractors/types'; -import { IFeature } from './feature'; import { COMPLETION_PLUGIN } from './features/completion'; import { DIAGNOSTICS_PLUGIN } from './features/diagnostics'; import { HIGHLIGHTS_PLUGIN } from './features/highlights'; @@ -46,165 +41,66 @@ import { JUMP_PLUGIN } from './features/jump_to'; import { RENAME_PLUGIN } from './features/rename'; import { SIGNATURE_PLUGIN } from './features/signature'; import { SYNTAX_HIGHLIGHTING_PLUGIN } from './features/syntax_highlighting'; -import { LanguageServerManager } from './manager'; import { CODE_OVERRIDES_MANAGER } from './overrides'; -import { - ICodeOverridesRegistry, - ILSPCodeOverridesManager -} from './overrides/tokens'; import { SettingsUIManager, SettingsSchemaManager } from './settings'; import { - IAdapterTypeOptions, - ILSPAdapterManager, - ILSPCodeExtractorsManager, - ILSPFeatureManager, ILSPLogConsole, - ILSPVirtualEditorManager, - PLUGIN_ID, + PLUGIN_ID as PLUGIN_ID_BASE, TLanguageServerConfigurations } from './tokens'; import { DEFAULT_TRANSCLUSIONS } from './transclusions/defaults'; -import { CODEMIRROR_VIRTUAL_EDITOR } from './virtual/codemirror_editor'; import { LOG_CONSOLE } from './virtual/console'; -import { VIRTUAL_EDITOR_MANAGER } from './virtual/editor'; - -import IPaths = JupyterFrontEnd.IPaths; - -export interface IFeatureOptions { - /** - * The feature to be registered. - */ - feature: IFeature; - /** - * Identifiers (values of `JupyterFrontEndPlugin.id` field) of the features - * that your feature wants to disable; use it to override the default feature - * implementations with your custom implementation (e.g. a custom completer) - */ - supersedes?: string[]; -} -export class FeatureManager implements ILSPFeatureManager { - features: Array = []; - private command_managers: Array = []; - private command_manager_registered: Signal< - FeatureManager, - ContextCommandManager - >; +const PLUGIN_ID = PLUGIN_ID_BASE + ':plugin'; - constructor() { - this.command_manager_registered = new Signal(this); - } - - private _register(options: IFeatureOptions) { - if (options.supersedes) { - for (let option of options.supersedes) { - this.features = this.features.filter(feature => feature.id != option); - } - } - this.features.push(options.feature); - - if (options.feature.commands) { - for (let command_manager of this.command_managers) { - command_manager.add(options.feature.commands); - } - this.command_manager_registered.connect( - (feature_manager, command_manager) => { - if (options.feature.commands) { - command_manager.add(options.feature.commands); - } - } - ); - } - } - - register(options: IFeatureOptions): void { - if (options.feature.settings && options.feature.settings.ready) { - options.feature.settings.ready - .then(() => { - if (!options.feature?.settings?.composite.disable) { - this._register(options); - } else { - console.log('Skipping ', options.feature.id, 'as disabled'); - } - }) - .catch(console.warn); - return; - } else { - this._register(options); - } +export class LSPExtension { + get connection_manager(): ILSPDocumentConnectionManager { + return this._connection_manager; } + private _connection_manager: DocumentConnectionManager; + language_server_manager: ILanguageServerManager; + private _settingsSchemaManager: SettingsSchemaManager; - registerCommandManager(manager: ContextCommandManager) { - this.command_managers.push(manager); - this.command_manager_registered.emit(manager); + private _isAnyActive(): boolean { + const adapters = [...this._connection_manager.adapters.values()]; + return ( + this.app.shell.currentWidget !== null && + adapters.some(adapter => adapter.widget == this.app.shell.currentWidget) + ); } -} - -export interface ILSPExtension { - app: JupyterFrontEnd; - connection_manager: DocumentConnectionManager; - language_server_manager: LanguageServerManager; - feature_manager: ILSPFeatureManager; - editor_type_manager: ILSPVirtualEditorManager; - foreign_code_extractors: IForeignCodeExtractorsRegistry; - code_overrides: ICodeOverridesRegistry; - console: ILSPLogConsole; - translator: ITranslator; - user_console: ILoggerRegistry | null; -} - -export class LSPExtension implements ILSPExtension { - connection_manager: DocumentConnectionManager; - language_server_manager: LanguageServerManager; - feature_manager: ILSPFeatureManager; - private _settingsSchemaManager: SettingsSchemaManager; constructor( public app: JupyterFrontEnd, private setting_registry: ISettingRegistry, - private palette: ICommandPalette, - documentManager: IDocumentManager, - paths: IPaths, - private adapterManager: ILSPAdapterManager, - public editor_type_manager: ILSPVirtualEditorManager, - private code_extractors_manager: ILSPCodeExtractorsManager, - private code_overrides_manager: ILSPCodeOverridesManager, + connection_manager: DocumentConnectionManager, public console: ILSPLogConsole, public translator: ITranslator, public user_console: ILoggerRegistry | null, - status_bar: IStatusBar | null, - formRegistry: IFormComponentRegistry | null + statusBar: IStatusBar | null, + formRegistry: IFormRendererRegistry | null ) { const trans = (translator || nullTranslator).load('jupyterlab_lsp'); - this.language_server_manager = new LanguageServerManager({ - settings: app.serviceManager.serverSettings, - console: this.console.scope('LanguageServerManager') - }); - this.connection_manager = new DocumentConnectionManager({ - language_server_manager: this.language_server_manager, - console: this.console.scope('DocumentConnectionManager') - }); + this.language_server_manager = connection_manager.languageServerManager; + this._connection_manager = connection_manager; const statusButtonExtension = new StatusButtonExtension({ - language_server_manager: this.language_server_manager, - connection_manager: this.connection_manager, - adapter_manager: adapterManager, - translator_bundle: trans + languageServerManager: this.language_server_manager, + connectionManager: this.connection_manager, + translatorBundle: trans, + shell: app.shell }); - if (status_bar !== null) { - status_bar.registerStatusItem(PLUGIN_ID + ':language-server-status', { + if (statusBar !== null) { + statusBar.registerStatusItem(PLUGIN_ID_BASE + ':language-server-status', { item: statusButtonExtension.createItem(), align: 'left', rank: 1, - isActive: () => adapterManager.isAnyActive() + isActive: () => this._isAnyActive() }); } else { app.docRegistry.addWidgetExtension('Notebook', statusButtonExtension); } - this.feature_manager = new FeatureManager(); - this._settingsSchemaManager = new SettingsSchemaManager({ settingRegistry: this.setting_registry, languageServerManager: this.language_server_manager, @@ -222,10 +118,9 @@ export class LSPExtension implements ILSPExtension { schemaValidated: this._settingsSchemaManager.schemaValidated }); // register custom UI field for `language_servers` property - formRegistry.addRenderer( - 'language_servers', - settingsUI.renderForm.bind(settingsUI) - ); + formRegistry.addRenderer(`${PLUGIN_ID}.language_servers`, { + fieldRenderer: settingsUI.renderForm.bind(settingsUI) + }); } this._settingsSchemaManager @@ -246,33 +141,6 @@ export class LSPExtension implements ILSPExtension { .catch((reason: Error) => { console.error(reason.message); }); - - this.adapterManager.registerExtension(this); - } - - registerAdapterType( - adapterManager: ILSPAdapterManager, - type: IAdapterTypeOptions - ): void { - let command_manger = new ContextCommandManager({ - adapter_manager: adapterManager, - app: this.app, - palette: this.palette, - tracker: type.tracker, - suffix: type.name, - entry_point: type.entrypoint, - console: this.console, - ...type.context_menu - }); - this.feature_manager.registerCommandManager(command_manger); - } - - get foreign_code_extractors() { - return this.code_extractors_manager.registry; - } - - get code_overrides() { - return this.code_overrides_manager.registry; } private async _updateOptions( @@ -280,14 +148,14 @@ export class LSPExtension implements ILSPExtension { afterInitialization = false ) { const options = await this._settingsSchemaManager.normalizeSettings( - settings.composite as Required + settings.composite as Required ); // Store the initial server settings, to be sent asynchronously // when the servers are initialized. const languageServerSettings = (options.language_servers || {}) as TLanguageServerConfigurations; - this.connection_manager.initial_configurations = languageServerSettings; + this._connection_manager.initialConfigurations = languageServerSettings; // TODO: if priorities changed reset connections // update the server-independent part of configuration immediately @@ -297,9 +165,9 @@ export class LSPExtension implements ILSPExtension { languageServerSettings ); } - this.connection_manager.updateLogging( + this._connection_manager.updateLogging( options.logAllCommunication, - options.setTrace + options.setTrace! ); } } @@ -307,47 +175,33 @@ export class LSPExtension implements ILSPExtension { /** * The plugin registration information. */ -const plugin: JupyterFrontEndPlugin = { - id: PLUGIN_ID + ':plugin', +const plugin: JupyterFrontEndPlugin = { + id: PLUGIN_ID, requires: [ ISettingRegistry, - ICommandPalette, - IDocumentManager, - IPaths, - ILSPAdapterManager, - ILSPVirtualEditorManager, - ILSPCodeExtractorsManager, - ILSPCodeOverridesManager, + ILSPDocumentConnectionManager, ILSPLogConsole, ITranslator ], - optional: [ILoggerRegistry, IStatusBar, IFormComponentRegistry], + optional: [ILoggerRegistry, IStatusBar, IFormRendererRegistry], activate: (app, ...args) => { - let extension = new LSPExtension( + new LSPExtension( app, ...(args as [ ISettingRegistry, - ICommandPalette, - IDocumentManager, - IPaths, - ILSPAdapterManager, - ILSPVirtualEditorManager, - ILSPCodeExtractorsManager, - ILSPCodeOverridesManager, + DocumentConnectionManager, ILSPLogConsole, ITranslator, ILoggerRegistry | null, IStatusBar | null, - IFormComponentRegistry | null + IFormRendererRegistry | null ]) ); - return extension.feature_manager; }, - provides: ILSPFeatureManager, autoStart: true }; -const default_features: JupyterFrontEndPlugin[] = [ +const default_features: JupyterFrontEndPlugin[] = [ JUMP_PLUGIN, COMPLETION_PLUGIN, SIGNATURE_PLUGIN, @@ -357,19 +211,14 @@ const default_features: JupyterFrontEndPlugin[] = [ DIAGNOSTICS_PLUGIN, SYNTAX_HIGHLIGHTING_PLUGIN ]; - const plugins: JupyterFrontEndPlugin[] = [ LOG_CONSOLE, - CODE_EXTRACTORS_MANAGER, - WIDGET_ADAPTER_MANAGER, - NOTEBOOK_ADAPTER, - FILE_EDITOR_ADAPTER, - VIRTUAL_EDITOR_MANAGER, - CODEMIRROR_VIRTUAL_EDITOR, COMPLETION_THEME_MANAGER, THEME_VSCODE, THEME_MATERIAL, CODE_OVERRIDES_MANAGER, + NOTEBOOK_ADAPTER_PLUGIN, + FILEEDITOR_ADAPTER_PLUGIN, plugin, ...DEFAULT_TRANSCLUSIONS, ...default_features diff --git a/packages/jupyterlab-lsp/src/jest-shim.ts b/packages/jupyterlab-lsp/src/jest-shim.ts deleted file mode 100644 index ec2511219..000000000 --- a/packages/jupyterlab-lsp/src/jest-shim.ts +++ /dev/null @@ -1,4 +0,0 @@ -// TODO: remove after upgrading to JupyterLab 4.0 -const util = require('util'); -(global as any).TextDecoder = util.TextDecoder; -(global as any).TextEncoder = util.TextEncoder; diff --git a/packages/jupyterlab-lsp/src/manager.ts b/packages/jupyterlab-lsp/src/manager.ts deleted file mode 100644 index 7402d0695..000000000 --- a/packages/jupyterlab-lsp/src/manager.ts +++ /dev/null @@ -1,189 +0,0 @@ -import { PageConfig, URLExt } from '@jupyterlab/coreutils'; -import { ServerConnection } from '@jupyterlab/services'; -import { Signal } from '@lumino/signaling'; - -import * as SCHEMA from './_schema'; -import { - ILanguageServerManager, - ILSPLogConsole, - TLanguageServerConfigurations, - TLanguageServerId, - TSessionMap, - TSpecsMap -} from './tokens'; - -export class LanguageServerManager implements ILanguageServerManager { - protected _sessionsChanged: Signal = new Signal< - ILanguageServerManager, - void - >(this); - protected _sessions: TSessionMap = new Map(); - protected _specs: TSpecsMap = new Map(); - protected _version: number; - private _settings: ServerConnection.ISettings; - private _baseUrl: string; - private _statusCode: number; - private _retries: number; - private _retriesInterval: number; - private _configuration: TLanguageServerConfigurations; - private _warningsEmitted = new Set(); - private console: ILSPLogConsole; - - constructor(options: ILanguageServerManager.IOptions) { - this._settings = options.settings || ServerConnection.makeSettings(); - this._baseUrl = options.baseUrl || PageConfig.getBaseUrl(); - this._retries = options.retries || 2; - this._retriesInterval = options.retriesInterval || 10000; - this._statusCode = -1; - this._configuration = {}; - this.console = options.console; - this.fetchSessions().catch(console.warn); - } - - get settings() { - return this._settings; - } - - get specs() { - return this._specs; - } - - get statusUrl() { - return URLExt.join(this._baseUrl, ILanguageServerManager.URL_NS, 'status'); - } - - get sessionsChanged() { - return this._sessionsChanged; - } - - get sessions(): TSessionMap { - return this._sessions; - } - - setConfiguration(configuration: TLanguageServerConfigurations): void { - this._configuration = configuration; - } - - protected warnOnce(arg: string) { - if (!this._warningsEmitted.has(arg)) { - this._warningsEmitted.add(arg); - this.console.warn(arg); - } - } - - protected _comparePriorities(a: TLanguageServerId, b: TLanguageServerId) { - const DEFAULT_PRIORITY = 50; - const a_priority = this._configuration[a]?.priority ?? DEFAULT_PRIORITY; - const b_priority = this._configuration[b]?.priority ?? DEFAULT_PRIORITY; - if (a_priority == b_priority) { - this.warnOnce( - `Two matching servers: ${a} and ${b} have the same priority; choose which one to use by changing the priority in Advanced Settings Editor` - ); - return a.localeCompare(b); - } - // higher priority = higher in the list (descending order) - return b_priority - a_priority; - } - - protected isMatchingSpec( - options: ILanguageServerManager.IGetServerIdOptions, - spec: SCHEMA.LanguageServerSpec - ) { - // most things speak language - // if language is not known, it is guessed based on MIME type earlier - // so some language should be available by now (which can be not so obvious, e.g. "plain" for txt documents) - const lowerCaseLanguage = options.language!.toLocaleLowerCase(); - return spec.languages!.some( - language => language.toLocaleLowerCase() == lowerCaseLanguage - ); - } - - getMatchingServers(options: ILanguageServerManager.IGetServerIdOptions) { - if (!options.language) { - this.console.error( - 'Cannot match server by language: language not available; ensure that kernel and specs provide language and MIME type' - ); - return []; - } - - const matchingSessionsKeys: TLanguageServerId[] = []; - - for (const [key, session] of this._sessions.entries()) { - if (this.isMatchingSpec(options, session.spec)) { - matchingSessionsKeys.push(key); - } - } - - return matchingSessionsKeys.sort(this._comparePriorities.bind(this)); - } - - getMatchingSpecs(options: ILanguageServerManager.IGetServerIdOptions) { - const result: TSpecsMap = new Map(); - - for (const [key, specification] of this._specs.entries()) { - if (this.isMatchingSpec(options, specification)) { - result.set(key, specification); - } - } - return result; - } - - get statusCode(): number { - return this._statusCode; - } - - async fetchSessions() { - let response = await ServerConnection.makeRequest( - this.statusUrl, - { method: 'GET' }, - this._settings - ); - - this._statusCode = response.status; - - if (!response.ok) { - console.error('Could not fetch sessions', response); - if (this._retries > 0) { - this._retries -= 1; - setTimeout(this.fetchSessions.bind(this), this._retriesInterval); - } - return; - } - - let sessions: SCHEMA.Sessions; - - try { - const data = await response.json(); - sessions = data.sessions; - try { - this._version = data.version; - this._specs = new Map(Object.entries(data.specs)) as TSpecsMap; - } catch (err) { - console.warn(err); - } - } catch (err) { - console.warn(err); - return; - } - - for (let key of Object.keys(sessions)) { - let id: TLanguageServerId = key as TLanguageServerId; - if (this._sessions.has(id)) { - Object.assign(this._sessions.get(id) || {}, sessions[key]); - } else { - this._sessions.set(id, sessions[key]); - } - } - - const oldKeys = this._sessions.keys(); - - for (const oldKey in oldKeys) { - if (!sessions[oldKey]) { - let oldId = oldKey as TLanguageServerId; - this._sessions.delete(oldId); - } - } - - this._sessionsChanged.emit(void 0); - } -} diff --git a/packages/jupyterlab-lsp/src/marks.ts b/packages/jupyterlab-lsp/src/marks.ts new file mode 100644 index 000000000..b9f7ff733 --- /dev/null +++ b/packages/jupyterlab-lsp/src/marks.ts @@ -0,0 +1,107 @@ +import { StateField, StateEffect } from '@codemirror/state'; +import { EditorView, Decoration, DecorationSet } from '@codemirror/view'; + +export interface IMark { + from: number; + to: number; + kind: Kinds; +} + +/** + * Manage marks in multiple editor views (e.g. cells). + */ +export interface ISimpleMarkManager { + putMarks(view: EditorView, positions: IMark[]): void; + /** + * Clear marks from all editor views. + */ + clearAllMarks(): void; + clearEditorMarks(view: EditorView): void; +} + +export type MarkDecorationSpec = Parameters[0] & { + class: string; +}; + +namespace Private { + export let specCounter = 0; +} + +export function createMarkManager( + specs: Record +): ISimpleMarkManager { + const specId = ++Private.specCounter; + const kindToMark = Object.fromEntries( + Object.entries(specs).map(([k, spec]) => [ + k as Kinds, + Decoration.mark({ + ...(spec as MarkDecorationSpec), + _id: Private.specCounter + }) + ]) + ) as Record; + + const addMark = StateEffect.define>({ + map: ({ from, to, kind }, change) => ({ + from: change.mapPos(from), + to: change.mapPos(to), + kind + }) + }); + + const removeMark = StateEffect.define(); + + const markField = StateField.define({ + create() { + return Decoration.none; + }, + update(marks, tr) { + marks = marks.map(tr.changes); + for (let e of tr.effects) { + if (e.is(addMark)) { + marks = marks.update({ + add: [ + kindToMark[e.value.kind].range( + Math.min(e.value.from, tr.newDoc.length), + Math.min(e.value.to, tr.newDoc.length) + ) + ] + }); + } else if (e.is(removeMark)) { + marks = marks.update({ + filter: (from, to, value) => { + return value.spec['_id'] !== specId; + } + }); + } + } + return marks; + }, + provide: f => EditorView.decorations.from(f) + }); + const views = new Set(); + + return { + putMarks(view: EditorView, positions: IMark[]) { + const effects: StateEffect[] = positions.map(position => + addMark.of(position) + ); + + if (!view.state.field(markField, false)) { + effects.push(StateEffect.appendConfig.of([markField])); + } + view.dispatch({ effects }); + views.add(view); + }, + clearAllMarks() { + for (let view of views) { + this.clearEditorMarks(view); + } + views.clear(); + }, + clearEditorMarks(view: EditorView) { + const effects: StateEffect[] = [removeMark.of(null)]; + view.dispatch({ effects }); + } + }; +} diff --git a/packages/jupyterlab-lsp/src/overrides/index.ts b/packages/jupyterlab-lsp/src/overrides/index.ts index 52960a635..a6d43d6fc 100644 --- a/packages/jupyterlab-lsp/src/overrides/index.ts +++ b/packages/jupyterlab-lsp/src/overrides/index.ts @@ -6,7 +6,7 @@ import { IScopedCodeOverride } from './tokens'; -class CodeOverridesManager implements ILSPCodeOverridesManager { +export class CodeOverridesManager implements ILSPCodeOverridesManager { private readonly _overrides: ICodeOverridesRegistry; get registry() { diff --git a/packages/jupyterlab-lsp/src/overrides/maps.ts b/packages/jupyterlab-lsp/src/overrides/maps.ts index ee7e51be1..32d52eb65 100644 --- a/packages/jupyterlab-lsp/src/overrides/maps.ts +++ b/packages/jupyterlab-lsp/src/overrides/maps.ts @@ -46,19 +46,19 @@ export class ReversibleOverridesMap extends OverridesMap { replace_all( raw_lines: string[], map: OverridesMap = this - ): { lines: string[]; skip_inspect: boolean[] } { + ): { lines: string[]; skipInspect: boolean[] } { let substituted_lines = new Array(); - let skip_inspect = new Array(); + let skipInspect = new Array(); for (let i = 0; i < raw_lines.length; i++) { let line = raw_lines[i]; let override = map.override_for(line); substituted_lines.push(override == null ? line : override); - skip_inspect.push(override != null); + skipInspect.push(override != null); } return { lines: substituted_lines, - skip_inspect: skip_inspect + skipInspect: skipInspect }; } diff --git a/packages/jupyterlab-lsp/src/positioning.spec.ts b/packages/jupyterlab-lsp/src/positioning.spec.ts deleted file mode 100644 index 66e7036c0..000000000 --- a/packages/jupyterlab-lsp/src/positioning.spec.ts +++ /dev/null @@ -1,84 +0,0 @@ -import { expect } from 'chai'; - -import { offset_at_position, position_at_offset } from './positioning'; - -describe('positionAtOffset', () => { - it('works with single line', () => { - let position = position_at_offset(0, ['']); - expect(position).deep.equal({ column: 0, line: 0 }); - - position = position_at_offset(0, ['abc']); - expect(position).deep.equal({ column: 0, line: 0 }); - - position = position_at_offset(1, ['abc']); - expect(position).deep.equal({ column: 1, line: 0 }); - - position = position_at_offset(2, ['abc']); - expect(position).deep.equal({ column: 2, line: 0 }); - }); - - it('works with two lines', () => { - let two_empty_lines = '\n'.split('\n'); - let two_single_character_lines = 'a\nb'.split('\n'); - - let position = position_at_offset(0, two_empty_lines); - expect(position).deep.equal({ column: 0, line: 0 }); - - position = position_at_offset(1, two_empty_lines); - expect(position).deep.equal({ column: 0, line: 1 }); - - position = position_at_offset(1, two_single_character_lines); - expect(position).deep.equal({ column: 1, line: 0 }); - - position = position_at_offset(2, two_single_character_lines); - expect(position).deep.equal({ column: 0, line: 1 }); - - position = position_at_offset(3, two_single_character_lines); - expect(position).deep.equal({ column: 1, line: 1 }); - }); -}); - -describe('offsetAtPosition', () => { - it('works with single line', () => { - let offset = offset_at_position({ column: 0, line: 0 }, ['']); - expect(offset).deep.equal(0); - - offset = offset_at_position({ column: 0, line: 0 }, ['abc']); - expect(offset).deep.equal(0); - - offset = offset_at_position({ column: 1, line: 0 }, ['abc']); - expect(offset).deep.equal(1); - - offset = offset_at_position({ column: 2, line: 0 }, ['abc']); - expect(offset).deep.equal(2); - }); - - it('works with two lines', () => { - let two_empty_lines = '\n'.split('\n'); - let two_single_character_lines = 'a\nb'.split('\n'); - - let offset = offset_at_position({ column: 0, line: 0 }, two_empty_lines); - expect(offset).deep.equal(0); - - offset = offset_at_position({ column: 0, line: 1 }, two_empty_lines); - expect(offset).deep.equal(1); - - offset = offset_at_position( - { column: 1, line: 0 }, - two_single_character_lines - ); - expect(offset).deep.equal(1); - - offset = offset_at_position( - { column: 0, line: 1 }, - two_single_character_lines - ); - expect(offset).deep.equal(2); - - offset = offset_at_position( - { column: 1, line: 1 }, - two_single_character_lines - ); - expect(offset).deep.equal(3); - }); -}); diff --git a/packages/jupyterlab-lsp/src/positioning.ts b/packages/jupyterlab-lsp/src/positioning.ts deleted file mode 100644 index c54d55679..000000000 --- a/packages/jupyterlab-lsp/src/positioning.ts +++ /dev/null @@ -1,87 +0,0 @@ -import { CodeEditor } from '@jupyterlab/codeeditor'; -import type * as CodeMirror from 'codemirror'; -import type * as lsp from 'vscode-languageserver-protocol'; - -/** - * is_* attributes are there only to enforce strict interface type checking - */ -export interface IPosition extends CodeMirror.Position {} - -export function is_equal(self: IPosition, other: IPosition): boolean { - return other && self.line === other.line && self.ch === other.ch; -} - -export interface ISourcePosition extends IPosition { - is_source: true; -} - -export interface IEditorPosition extends IPosition { - is_editor: true; -} - -export interface IVirtualPosition extends IPosition { - is_virtual: true; -} - -export interface IRootPosition extends ISourcePosition { - is_root: true; -} - -// TODO: needs heavy unit testing -export function position_at_offset( - offset: number, - lines: string[] -): CodeEditor.IPosition { - let line = 0; - let column = 0; - for (let text_line of lines) { - // each line has a new line symbol which is accounted for in offset! - if (text_line.length + 1 <= offset) { - offset -= text_line.length + 1; - line += 1; - } else { - column = offset; - break; - } - } - return { line, column }; -} - -export function offset_at_position( - position: CodeEditor.IPosition, - lines: string[], - lines_include_breaks = false -): number { - let break_increment = lines_include_breaks ? 0 : 1; - let offset = 0; - for (let i = 0; i < lines.length; i++) { - let text_line = lines[i]; - if (position.line > i) { - offset += text_line.length + break_increment; - } else { - offset += position.column; - break; - } - } - return offset; -} - -export class PositionError extends Error { - // no-op -} - -export namespace ProtocolCoordinates { - export function isWithinRange( - position: lsp.Position, - range: lsp.Range - ): boolean { - const { line, character } = position; - return ( - line >= range.start.line && - line <= range.end.line && - // need to be non-overlapping see https://github.com/jupyter-lsp/jupyterlab-lsp/issues/628 - (line != range.start.line || character > range.start.character) && - (line != range.end.line || character <= range.end.character) - ); - } -} diff --git a/packages/jupyterlab-lsp/src/settings.ts b/packages/jupyterlab-lsp/src/settings.ts index 36fe8a82b..4f382ad5b 100644 --- a/packages/jupyterlab-lsp/src/settings.ts +++ b/packages/jupyterlab-lsp/src/settings.ts @@ -1,4 +1,5 @@ import { showDialog, Dialog } from '@jupyterlab/apputils'; +import { ILanguageServerManager, LanguageServerManager } from '@jupyterlab/lsp'; import { ISettingRegistry, ISchemaValidator @@ -10,20 +11,19 @@ import { ReadonlyJSONObject } from '@lumino/coreutils'; import { Signal, ISignal } from '@lumino/signaling'; -import { FieldProps } from '@rjsf/core'; +import { FieldProps } from '@rjsf/utils'; -import { LanguageServer } from './_plugin'; +import { LanguageServers } from './_plugin'; import { renderLanguageServerSettings, renderCollapseConflicts } from './components/serverSettings'; -import { LanguageServerManager } from './manager'; import { ILSPLogConsole } from './tokens'; import { collapseToDotted } from './utils'; type ValueOf = T[keyof T]; type ServerSchemaWrapper = ValueOf< - Required['language_servers'] + Required['language_servers'] >; /** @@ -93,7 +93,7 @@ export class SettingsUIManager { constructor( protected options: { settingRegistry: ISettingRegistry; - languageServerManager: LanguageServerManager; + languageServerManager: ILanguageServerManager; console: ILSPLogConsole; trans: TranslationBundle; schemaValidated: ISignal< @@ -128,7 +128,7 @@ export class SettingsSchemaManager { constructor( protected options: { settingRegistry: ISettingRegistry; - languageServerManager: LanguageServerManager; + languageServerManager: ILanguageServerManager; console: ILSPLogConsole; trans: TranslationBundle; /** @@ -250,7 +250,10 @@ export class SettingsSchemaManager { | Record | undefined; - for (let [serverKey, serverSpec] of languageServerManager.specs.entries()) { + // TODO: expose `specs` upstream + for (let [serverKey, serverSpec] of ( + languageServerManager as LanguageServerManager + ).specs.entries()) { if ((serverKey as string) === '') { this.console.warn( 'Empty server key - skipping transformation for', @@ -371,8 +374,8 @@ export class SettingsSchemaManager { } async normalizeSettings( - composite: Required - ): Promise> { + composite: Required + ): Promise> { await this._defaultsPopulated; // Cache collapsed settings for speed and to only show dialog once. // Note that JupyterLab attempts to transform in "preload" step (before splash screen end) diff --git a/packages/jupyterlab-lsp/src/testutils.ts b/packages/jupyterlab-lsp/src/testutils.ts new file mode 100644 index 000000000..9e939d3e1 --- /dev/null +++ b/packages/jupyterlab-lsp/src/testutils.ts @@ -0,0 +1,497 @@ +import { ICellModel } from '@jupyterlab/cells'; +import { IEditorServices } from '@jupyterlab/codeeditor'; +import { + CodeMirrorEditor, + CodeMirrorEditorFactory, + EditorLanguageRegistry, + CodeMirrorMimeTypeService, + EditorExtensionRegistry, + ybinding +} from '@jupyterlab/codemirror'; +import { + Context, + IDocumentWidget, + TextModelFactory, + DocumentRegistry +} from '@jupyterlab/docregistry'; +import { FileEditor, FileEditorFactory } from '@jupyterlab/fileeditor'; +import { + WidgetLSPAdapter, + LanguageServerManager, + CodeExtractorsManager, + DocumentConnectionManager, + FeatureManager, + ISocketConnectionOptions, + ILSPOptions +} from '@jupyterlab/lsp'; +import { LSPConnection } from '@jupyterlab/lsp/lib/connection'; +import * as nbformat from '@jupyterlab/nbformat'; +import { + Notebook, + NotebookModel, + NotebookModelFactory, + NotebookPanel, + StaticNotebook +} from '@jupyterlab/notebook'; +import { defaultRenderMime } from '@jupyterlab/rendermime/lib/testutils'; +import { ServiceManagerMock } from '@jupyterlab/services/lib/testutils'; +import { nullTranslator } from '@jupyterlab/translation'; +import { PromiseDelegate } from '@lumino/coreutils'; +import { Signal } from '@lumino/signaling'; +import type * as lsProtocol from 'vscode-languageserver-protocol'; +import type { MessageConnection } from 'vscode-ws-jsonrpc'; + +import { FileEditorAdapter } from './adapters/fileeditor'; +import { NotebookAdapter } from './adapters/notebook'; +import { IFeatureSettings } from './feature'; +import { CodeOverridesManager } from './overrides'; +import { VirtualDocument } from './virtual/document'; + +const DEFAULT_SERVER_ID = 'pylsp'; + +export interface ITestEnvironment { + documentOptions: VirtualDocument.IOptions; + + adapter: WidgetLSPAdapter; + init(): void; + + dispose(): void; +} + +export class MockLanguageServerManager extends LanguageServerManager { + async fetchSessions() { + const spec = { + languages: ['python'] + }; + // eslint-disable-next-line @typescript-eslint/ban-ts-comment + // @ts-ignore + this._sessions = new Map(); + // eslint-disable-next-line @typescript-eslint/ban-ts-comment + // @ts-ignore + this._sessions.set(DEFAULT_SERVER_ID, { + spec + } as any); + // eslint-disable-next-line @typescript-eslint/ban-ts-comment + // @ts-ignore + this._sessionsChanged.emit(void 0); + // eslint-disable-next-line @typescript-eslint/ban-ts-comment + // @ts-ignore + this._specs = new Map(Object.entries({ [DEFAULT_SERVER_ID]: spec })); + } +} + +export class MockSettings implements IFeatureSettings { + changed: Signal, void>; + + constructor(private settings: T) { + this.changed = new Signal(this); + } + + get composite(): Required { + return this.settings as Required; + } + + set(setting: keyof T, value: any): void { + this.settings[setting] = value; + } +} + +namespace MockConnection { + export interface IOptions extends ILSPOptions { + serverCapabilities: lsProtocol.ServerCapabilities; + } +} + +class MockConnection extends LSPConnection { + constructor(protected options: MockConnection.IOptions) { + super(options); + } + + //get isReady(): boolean { + // return true; + //} + connect(ws: any): void { + this.connection = new MockMessageConnection() as MessageConnection; + this.onServerInitialized({ + capabilities: this.options.serverCapabilities + }); + this._isConnected = true; + } +} + +namespace MockDocumentConnectionManager { + export interface IOptions extends DocumentConnectionManager.IOptions { + connection?: Partial; + } +} + +class MockMessageConnection implements Partial { + onError(handler: any): any { + // no-op + } + onNotification(handler: any): any { + // no-op + } + onRequest(hander: any): any { + // no-op + } + sendNotification(handler: any): Promise { + return Promise.resolve(); + } +} + +class MockDocumentConnectionManager extends DocumentConnectionManager { + constructor(protected options: MockDocumentConnectionManager.IOptions) { + super(options); + } + + get ready() { + return Promise.resolve(); + } + async connect( + options: ISocketConnectionOptions, + firstTimeoutSeconds?: number, + secondTimeoutMinutes?: number + ) { + let { language, capabilities, virtualDocument } = options; + + this.connectDocumentSignals(virtualDocument); + + const uris = { + server: '', + base: '' + }; + const matchingServers = this.languageServerManager.getMatchingServers({ + language + }); + + const languageServerId = + matchingServers.length === 0 ? null : matchingServers[0]; + if (!uris) { + return; + } + const connection = new MockConnection({ + languageId: language, + serverUri: uris.server, + rootUri: uris.base, + serverIdentifier: languageServerId!, + capabilities: capabilities, + serverCapabilities: {}, + ...this.options.connection + }); + connection.connect(null); + // eslint-disable-next-line @typescript-eslint/ban-ts-comment + // @ts-ignore + this._connected.emit({ connection, virtualDocument }); + return connection; + } +} + +export namespace TestEnvironment { + export interface IOptions { + document?: Partial; + connection?: Partial; + } +} + +export abstract class TestEnvironment implements ITestEnvironment { + adapter: WidgetLSPAdapter; + abstract widget: IDocumentWidget; + protected abstract getDefaults(): VirtualDocument.IOptions; + documentOptions: VirtualDocument.IOptions; + editorExtensionRegistry: EditorExtensionRegistry; + editorServices: IEditorServices; + + constructor(protected options?: TestEnvironment.IOptions) { + this.editorExtensionRegistry = new EditorExtensionRegistry(); + this.editorExtensionRegistry.addExtension({ + name: 'binding', + factory: ({ model }) => + EditorExtensionRegistry.createImmutableExtension( + ybinding({ ytext: (model.sharedModel as any).ysource }) + ) + }); + const languages = new EditorLanguageRegistry(); + this.editorServices = { + factoryService: new CodeMirrorEditorFactory({ + languages, + extensions: this.editorExtensionRegistry + }), + mimeTypeService: new CodeMirrorMimeTypeService(languages) + }; + this._languageServerManager = new MockLanguageServerManager({}); + this.connectionManager = new MockDocumentConnectionManager({ + languageServerManager: this._languageServerManager, + connection: this.options?.connection + }); + this.documentOptions = { + ...this.getDefaults(), + ...(options?.document || {}) + }; + } + + protected abstract createWidget(): IDocumentWidget; + protected abstract getAdapterType(): + | typeof FileEditorAdapter + | typeof NotebookAdapter; + + get activeEditor(): CodeMirrorEditor { + return this.adapter.activeEditor!.getEditor()! as CodeMirrorEditor; + } + + connectionManager: MockDocumentConnectionManager; + + async init() { + this.widget = this.createWidget(); + let adapterType = this.getAdapterType(); + const docRegistry = new DocumentRegistry(); + + const { foreignCodeExtractors, overridesRegistry } = this.documentOptions; + const overridesManager = new CodeOverridesManager(); + for (let language of Object.keys(overridesRegistry)) { + const cellOverrides = overridesRegistry[language].cell; + for (const cell of cellOverrides) { + overridesManager.register( + { + scope: 'cell', + pattern: cell.pattern, + replacement: cell.replacement, + reverse: cell.reverse as any + }, + language + ); + } + const lineOverrides = overridesRegistry[language].line; + for (const line of lineOverrides) { + overridesManager.register( + { + scope: 'line', + pattern: line.pattern, + replacement: line.replacement, + reverse: line.reverse as any + }, + language + ); + } + } + this.adapter = new adapterType(this.widget as any, { + docRegistry, + connectionManager: this.connectionManager, + codeOverridesManager: overridesManager, + featureManager: new FeatureManager(), + foreignCodeExtractorsManager: foreignCodeExtractors, + translator: nullTranslator + }); + await this.widget.context.sessionContext.ready; + await this.adapter.ready; + this.connectionManager.adapters.set( + this.adapter.virtualDocument!.path, + this.adapter + ); + await this.connectionManager.ready; + } + + private _languageServerManager: LanguageServerManager; + + dispose(): void { + this.adapter.dispose(); + this._languageServerManager.dispose(); + } +} + +export class MockNotebookAdapter extends NotebookAdapter { + get language() { + return 'python'; + } + isReady(): boolean { + return true; + } + foreingDocumentOpened = new PromiseDelegate(); + async onForeignDocumentOpened( + _: VirtualDocument, + context: any + ): Promise { + try { + const result = await super.onForeignDocumentOpened(_, context); + this.foreingDocumentOpened.resolve(undefined); + this.foreingDocumentOpened = new PromiseDelegate(); + return result; + } catch (e) { + console.warn(`onForeignDocumentOpened failed: ${e}`); + } + } +} + +export class FileEditorTestEnvironment extends TestEnvironment { + protected getAdapterType() { + return FileEditorAdapter; + } + widget: IDocumentWidget; + + protected getDefaults(): VirtualDocument.IOptions { + return { + language: 'python', + path: 'dummy.py', + fileExtension: 'py', + hasLspSupportedFile: true, + standalone: true, + overridesRegistry: {}, + foreignCodeExtractors: new CodeExtractorsManager() + }; + } + + createWidget(): IDocumentWidget { + let factory = new FileEditorFactory({ + editorServices: this.editorServices, + factoryOptions: { + name: 'Editor', + fileTypes: ['*'] + } + }); + const context = new Context({ + manager: new ServiceManagerMock(), + factory: new TextModelFactory(), + path: this.documentOptions.path + }); + void context.initialize(true); + void context.sessionContext.initialize(); + return factory.createNew(context); + } + + dispose(): void { + super.dispose(); + } +} + +export class NotebookTestEnvironment extends TestEnvironment { + public widget: NotebookPanel; + protected getAdapterType() { + return MockNotebookAdapter; + } + + get notebook(): Notebook { + return this.widget.content; + } + + protected getDefaults(): VirtualDocument.IOptions { + return { + language: 'python', + path: 'notebook.ipynb', + fileExtension: 'py', + overridesRegistry: {}, + foreignCodeExtractors: new CodeExtractorsManager(), + hasLspSupportedFile: false, + standalone: true + }; + } + + createWidget(): IDocumentWidget { + const startKernel = true; + let context = new Context({ + manager: new ServiceManagerMock(), + factory: new NotebookModelFactory({}), + path: this.documentOptions.path, + kernelPreference: { + shouldStart: startKernel, + canStart: startKernel, + autoStartDefault: startKernel + } + }); + void context.initialize(true); + void context.sessionContext.initialize(); + const editorFactory = + this.editorServices.factoryService.newInlineEditor.bind( + this.editorServices.factoryService + ); + return new NotebookPanel({ + content: new Notebook({ + rendermime: defaultRenderMime(), + contentFactory: new Notebook.ContentFactory({ editorFactory }), + mimeTypeService: this.editorServices.mimeTypeService, + notebookConfig: { + ...StaticNotebook.defaultNotebookConfig, + windowingMode: 'none' + } + }), + context + }); + } +} + +export function codeCell( + source: string[] | string, + metadata: Partial = { trusted: false } +) { + return { + cell_type: 'code', + source: source, + metadata: metadata, + execution_count: null, + outputs: [] + } as nbformat.ICodeCell; +} + +export function setNotebookContent( + notebook: Notebook, + cells: nbformat.ICodeCell[], + metadata = python_notebook_metadata +) { + let test_notebook = { + cells: cells, + metadata: metadata + } as nbformat.INotebookContent; + + notebook.model = new NotebookModel(); + notebook.model.fromJSON(test_notebook); +} + +export const python_notebook_metadata = { + kernelspec: { + display_name: 'Python [default]', + language: 'python', + name: 'python3' + }, + language_info: { + codemirror_mode: { + name: 'ipython', + version: 3 + }, + fileExtension: '.py', + mimetype: 'text/x-python', + name: 'python', + nbconvert_exporter: 'python', + pygments_lexer: 'ipython3', + version: '3.5.2' + }, + orig_nbformat: 4.1 +} as nbformat.INotebookMetadata; + +export function showAllCells(notebook: Notebook) { + notebook.show(); + // iterate over every cell to activate the editors + for (let i = 0; i < notebook.model!.cells.length; i++) { + notebook.activeCellIndex = i; + notebook.activeCell!.show(); + } +} + +export function getCellsJSON(notebook: Notebook): Array { + let cells: Array = []; + for (let i = 0; i < notebook.model!.cells.length; i++) { + cells.push(notebook.model!.cells.get(i)); + } + return cells.map(cell => cell.toJSON()); +} + +export async function synchronize_content( + environment: ITestEnvironment, + adapter: WidgetLSPAdapter +) { + await environment.adapter.updateDocuments(); + try { + // TODO + await adapter.updateFinished; + } catch (e) { + console.warn(e); + } +} diff --git a/packages/jupyterlab-lsp/src/tokens.ts b/packages/jupyterlab-lsp/src/tokens.ts index ad6c93f84..dafa089cc 100644 --- a/packages/jupyterlab-lsp/src/tokens.ts +++ b/packages/jupyterlab-lsp/src/tokens.ts @@ -1,29 +1,7 @@ -import { IWidgetTracker } from '@jupyterlab/apputils'; -import { CodeEditor } from '@jupyterlab/codeeditor'; -import { IDocumentWidget } from '@jupyterlab/docregistry'; -import { ServerConnection } from '@jupyterlab/services'; import { Token } from '@lumino/coreutils'; -import { ISignal, Signal } from '@lumino/signaling'; -import { LanguageServer2 as LSPLanguageServerSettings } from './_plugin'; +import { LanguageServer1 as LSPLanguageServerSettings } from './_plugin'; import * as SCHEMA from './_schema'; -import { WidgetAdapter } from './adapters/adapter'; -import { - CommandEntryPoint, - ContextCommandManager, - IContextMenuOptions -} from './command_manager'; -import { - IForeignCodeExtractor, - IForeignCodeExtractorsRegistry -} from './extractors/types'; -import { IEditorName, IFeature } from './feature'; -import { LanguageIdentifier } from './lsp'; -import { IVirtualEditor } from './virtual/editor'; - -import { IFeatureOptions, ILSPExtension, LSPExtension } from './index'; - -import IEditor = CodeEditor.IEditor; export type TLanguageId = string; @@ -53,118 +31,6 @@ export type TLanguageServerConfigurations = Partial< Record >; -export interface ILanguageServerManager { - sessionsChanged: ISignal; - sessions: TSessionMap; - settings: ServerConnection.ISettings; - /** - * An ordered list of matching >running< sessions, with servers of higher priority higher in the list - */ - getMatchingServers( - options: ILanguageServerManager.IGetServerIdOptions - ): TLanguageServerId[]; - - /** - * A list of all known matching specs (whether detected or not). - */ - getMatchingSpecs( - options: ILanguageServerManager.IGetServerIdOptions - ): TSpecsMap; - setConfiguration(configuration: TLanguageServerConfigurations): void; - fetchSessions(): Promise; - statusUrl: string; - statusCode: number; -} - -export namespace ILanguageServerManager { - export const URL_NS = 'lsp'; - export interface IOptions { - settings?: ServerConnection.ISettings; - baseUrl?: string; - /** - * Number of connection retries to fetch the sessions. - * Default 2. - */ - retries?: number; - /** - * The interval for retries, default 10 seconds. - */ - retriesInterval?: number; - console: ILSPLogConsole; - } - export interface IGetServerIdOptions { - language?: TLanguageId; - mimeType?: string; - } -} - -export interface ILSPFeatureManager { - /** - * A read-only registry of all registered features. - */ - readonly features: IFeature[]; - - /** - * Register the new feature (frontend capability) - * for one or more code editor implementations. - */ - register(options: IFeatureOptions): void; - /** - * Register the context command manager. Should not be used directly - * by the features - pass our commands in `IFeature.commands` instead. - */ - registerCommandManager(manager: ContextCommandManager): void; -} - -export interface IAdapterRegistration { - id: string; - adapter: WidgetAdapter; - re_connector: () => void; -} - -export type WidgetAdapterConstructor = { - new (extension: ILSPExtension, widget: T): WidgetAdapter; -}; - -export interface IAdapterTypeOptions { - tracker: IWidgetTracker; - name: string; - adapter: WidgetAdapterConstructor; - entrypoint: CommandEntryPoint; - context_menu: IContextMenuOptions; - - get_id(widget: T): string; -} - -export interface ILSPAdapterManager { - adapterTypeAdded: Signal< - ILSPAdapterManager, - IAdapterTypeOptions - >; - adapterChanged: Signal>; - adapterDisposed: Signal>; - currentAdapter: WidgetAdapter; - isAnyActive: () => boolean; - registerExtension(extension: LSPExtension): void; - registerAdapterType(options: IAdapterTypeOptions): void; - readonly types: IAdapterTypeOptions[]; -} - -export interface IVirtualEditorType { - /** - * The constructor of the IVirtualEditor instance. - */ - implementation: IVirtualEditor.Constructor; - /** - * The name of the editor T. - */ - name: IEditorName; - /** - * The implementation of and editor being supported. - */ - supports: new (...args: any) => T; -} - export interface ILogConsoleCore { debug(...args: any[]): void; log(...args: any[]): void; @@ -176,57 +42,8 @@ export interface ILSPLogConsole extends ILogConsoleCore { scope(scope: string): ILSPLogConsole; } -export interface ILSPVirtualEditorManager { - /** - * Register editor type implementation. - */ - registerEditorType(options: IVirtualEditorType): void; - - /** - * Choose the most appropriate VirtualEditor implementation - * given all the editors occurring in the widget. - */ - findBestImplementation( - editors: CodeEditor.IEditor[] - ): IVirtualEditorType | null; -} - -/** - * Manages code transclusion plugins. - */ -export interface ILSPCodeExtractorsManager { - /** - * Global registry of the foreign code extractors. - */ - registry: IForeignCodeExtractorsRegistry; - - /** - * Register the extraction rules to be applied in documents with language `host_language`. - */ - register( - extractor: IForeignCodeExtractor, - host_language: LanguageIdentifier - ): void; -} - export const PLUGIN_ID = '@jupyter-lsp/jupyterlab-lsp'; -export const ILSPFeatureManager = new Token( - PLUGIN_ID + ':ILSPFeatureManager' -); - -export const ILSPAdapterManager = new Token( - PLUGIN_ID + ':ILSPAdapterManager' -); - -export const ILSPVirtualEditorManager = new Token( - PLUGIN_ID + ':ILSPVirtualEditorManager' -); - -export const ILSPCodeExtractorsManager = new Token( - PLUGIN_ID + ':ILSPCodeExtractorsManager' -); - export const ILSPLogConsole = new Token( PLUGIN_ID + ':ILSPLogConsole' ); diff --git a/packages/jupyterlab-lsp/src/transclusions/ipython-bigquery/extractors.spec.ts b/packages/jupyterlab-lsp/src/transclusions/ipython-bigquery/extractors.spec.ts index 5d1d10822..dd650b319 100644 --- a/packages/jupyterlab-lsp/src/transclusions/ipython-bigquery/extractors.spec.ts +++ b/packages/jupyterlab-lsp/src/transclusions/ipython-bigquery/extractors.spec.ts @@ -1,28 +1,28 @@ -import { expect } from 'chai'; - -import { extract_code, get_the_only_virtual } from '../../extractors/testutils'; -import { BrowserConsole } from '../../virtual/console'; +import { + extractCode, + getTheOnlyVirtual, + mockExtractorsManager +} from '../../extractors/testutils'; import { VirtualDocument } from '../../virtual/document'; -import { foreign_code_extractors } from './extractors'; +import { foreignCodeExtractors } from './extractors'; describe('Bigquery SQL extractors', () => { let document: VirtualDocument; function extract(code: string) { - return extract_code(document, code); + return extractCode(document, code); } beforeEach(() => { document = new VirtualDocument({ language: 'python', path: 'test.ipynb', - overrides_registry: {}, - foreign_code_extractors: foreign_code_extractors, + overridesRegistry: {}, + foreignCodeExtractors: mockExtractorsManager(foreignCodeExtractors), standalone: false, - file_extension: 'py', - has_lsp_supported_file: false, - console: new BrowserConsole() + fileExtension: 'py', + hasLspSupportedFile: false }); }); @@ -33,12 +33,12 @@ describe('Bigquery SQL extractors', () => { describe('%%bigquery cell magic', () => { it('extracts simple commands', () => { let code = "%%bigquery\nselect * from character\nwhere abbrev = 'ALICE'"; - let { cell_code_kept, foreign_document_map } = extract(code); + let { cellCodeKept, foreignDocumentsMap } = extract(code); - expect(cell_code_kept).to.equal(code); - let document = get_the_only_virtual(foreign_document_map); - expect(document.language).to.equal('sql'); - expect(document.value).to.equal( + expect(cellCodeKept).toBe(code); + let document = getTheOnlyVirtual(foreignDocumentsMap); + expect(document.language).toBe('sql'); + expect(document.value).toBe( "select * from character\nwhere abbrev = 'ALICE'\n" ); }); diff --git a/packages/jupyterlab-lsp/src/transclusions/ipython-bigquery/extractors.ts b/packages/jupyterlab-lsp/src/transclusions/ipython-bigquery/extractors.ts index 00be3e4c1..a11701f42 100644 --- a/packages/jupyterlab-lsp/src/transclusions/ipython-bigquery/extractors.ts +++ b/packages/jupyterlab-lsp/src/transclusions/ipython-bigquery/extractors.ts @@ -21,15 +21,15 @@ const COMMAND_PATTERN = single_argument_options.map(command => command + ' \\w+').join('|')) + ')'; -export let foreign_code_extractors: IForeignCodeExtractorsRegistry = { +export let foreignCodeExtractors: IForeignCodeExtractorsRegistry = { // general note: to match new lines use [^] instead of dot, unless the target is ES2018, then use /s python: [ new RegExpForeignCodeExtractor({ language: 'sql', pattern: `^%%bigquery(?: (?:${SQL_URL_PATTERN}|${COMMAND_PATTERN}|(?:\\w+ << )|(?:\\w+@\\w+)))?\n?((?:.+\n)?(?:[^]*))`, - foreign_capture_groups: [1], - is_standalone: true, - file_extension: 'sql' + foreignCaptureGroups: [1], + isStandalone: true, + fileExtension: 'sql' }) ] }; diff --git a/packages/jupyterlab-lsp/src/transclusions/ipython-bigquery/index.ts b/packages/jupyterlab-lsp/src/transclusions/ipython-bigquery/index.ts index 22202a768..2d6083567 100644 --- a/packages/jupyterlab-lsp/src/transclusions/ipython-bigquery/index.ts +++ b/packages/jupyterlab-lsp/src/transclusions/ipython-bigquery/index.ts @@ -1,8 +1,9 @@ import { JupyterFrontEndPlugin } from '@jupyterlab/application'; +import { ILSPCodeExtractorsManager } from '@jupyterlab/lsp'; -import { ILSPCodeExtractorsManager, PLUGIN_ID } from '../../tokens'; +import { PLUGIN_ID } from '../../tokens'; -import { foreign_code_extractors } from './extractors'; +import { foreignCodeExtractors } from './extractors'; /** * Implements extraction of code for IPython Magics for BigQuery, see: @@ -12,8 +13,8 @@ export const IPYTHON_BIGQUERY_TRANSCLUSIONS: JupyterFrontEndPlugin = { id: PLUGIN_ID + ':ipython-bigquery', requires: [ILSPCodeExtractorsManager], activate: (app, extractors_manager: ILSPCodeExtractorsManager) => { - for (let language of Object.keys(foreign_code_extractors)) { - for (let extractor of foreign_code_extractors[language]) { + for (let language of Object.keys(foreignCodeExtractors)) { + for (let extractor of foreignCodeExtractors[language]) { extractors_manager.register(extractor, language); } } diff --git a/packages/jupyterlab-lsp/src/transclusions/ipython-rpy2/extractors.spec.ts b/packages/jupyterlab-lsp/src/transclusions/ipython-rpy2/extractors.spec.ts index df999f6ee..365af9355 100644 --- a/packages/jupyterlab-lsp/src/transclusions/ipython-rpy2/extractors.spec.ts +++ b/packages/jupyterlab-lsp/src/transclusions/ipython-rpy2/extractors.spec.ts @@ -1,33 +1,30 @@ -import { expect } from 'chai'; - import { - extract_code, - get_the_only_pair, - get_the_only_virtual, - wrap_in_python_lines + extractCode, + getTheOnlyPair, + getTheOnlyVirtual, + wrapInPythonLines, + mockExtractorsManager } from '../../extractors/testutils'; -import { BrowserConsole } from '../../virtual/console'; import { VirtualDocument } from '../../virtual/document'; -import { foreign_code_extractors } from './extractors'; +import { foreignCodeExtractors } from './extractors'; describe('IPython rpy2 extractors', () => { let document: VirtualDocument; function extract(code: string) { - return extract_code(document, code); + return extractCode(document, code); } beforeEach(() => { document = new VirtualDocument({ language: 'python', path: 'test.ipynb', - overrides_registry: {}, - foreign_code_extractors: foreign_code_extractors, + overridesRegistry: {}, + foreignCodeExtractors: mockExtractorsManager(foreignCodeExtractors), standalone: false, - file_extension: 'py', - has_lsp_supported_file: false, - console: new BrowserConsole() + fileExtension: 'py', + hasLspSupportedFile: false }); }); @@ -37,110 +34,110 @@ describe('IPython rpy2 extractors', () => { describe('%R line magic', () => { it('should not extract parts of non-code commands', () => { - let code = wrap_in_python_lines('%Rdevice svg'); - let { cell_code_kept, foreign_document_map } = extract(code); + let code = wrapInPythonLines('%Rdevice svg'); + let { cellCodeKept, foreignDocumentsMap } = extract(code); - expect(cell_code_kept).to.equal(code); - expect(foreign_document_map.size).to.equal(0); + expect(cellCodeKept).toBe(code); + expect(foreignDocumentsMap.size).toBe(0); }); it('correctly gives ranges in source', () => { let code = '%R ggplot()'; - let { foreign_document_map } = extract(code); - let { range } = get_the_only_pair(foreign_document_map); - expect(range.start.line).to.be.equal(0); + let { foreignDocumentsMap } = extract(code); + let { range } = getTheOnlyPair(foreignDocumentsMap); + expect(range.start.line).toBe(0); // note: the space before ggplot() should NOT be included in the range - expect(range.start.column).to.be.equal(3); + expect(range.start.column).toBe(3); - expect(range.end.line).to.be.equal(0); - expect(range.end.column).to.be.equal(3 + 8); + expect(range.end.line).toBe(0); + expect(range.end.column).toBe(3 + 8); }); it('correctly gives ranges in source when wrapped in lines', () => { - let code = wrap_in_python_lines('%R ggplot()'); - let { foreign_document_map } = extract(code); - let { range } = get_the_only_pair(foreign_document_map); - expect(range.start.line).to.be.equal(1); - expect(range.start.column).to.be.equal(3); - - expect(range.end.line).to.be.equal(1); - expect(range.end.column).to.be.equal(3 + 8); + let code = wrapInPythonLines('%R ggplot()'); + let { foreignDocumentsMap } = extract(code); + let { range } = getTheOnlyPair(foreignDocumentsMap); + expect(range.start.line).toBe(1); + expect(range.start.column).toBe(3); + + expect(range.end.line).toBe(1); + expect(range.end.column).toBe(3 + 8); }); it('extracts simple commands', () => { - let code = wrap_in_python_lines('%R ggplot()'); - let { cell_code_kept, foreign_document_map } = extract(code); + let code = wrapInPythonLines('%R ggplot()'); + let { cellCodeKept, foreignDocumentsMap } = extract(code); // should not be removed, but left for the static analysis (using magic overrides) - expect(cell_code_kept).to.equal(code); - let r_document = get_the_only_virtual(foreign_document_map); - expect(r_document.language).to.equal('r'); - expect(r_document.value).to.equal('ggplot()\n'); + expect(cellCodeKept).toBe(code); + let r_document = getTheOnlyVirtual(foreignDocumentsMap); + expect(r_document.language).toBe('r'); + expect(r_document.value).toBe('ggplot()\n'); }); it('parses input (into a dummy data frame)', () => { - let code = wrap_in_python_lines('%R -i df ggplot(df)'); - let { foreign_document_map } = extract(code); + let code = wrapInPythonLines('%R -i df ggplot(df)'); + let { foreignDocumentsMap } = extract(code); - let r_document = get_the_only_virtual(foreign_document_map); - expect(r_document.language).to.equal('r'); - expect(r_document.value).to.equal('df <- data.frame(); ggplot(df)\n'); + let r_document = getTheOnlyVirtual(foreignDocumentsMap); + expect(r_document.language).toBe('r'); + expect(r_document.value).toBe('df <- data.frame(); ggplot(df)\n'); }); it('parses input when no code is given', () => { let code = '%R -i df'; - let { foreign_document_map } = extract(code); + let { foreignDocumentsMap } = extract(code); - let r_document = get_the_only_virtual(foreign_document_map); - expect(r_document.value).to.equal('df <- data.frame();\n'); + let r_document = getTheOnlyVirtual(foreignDocumentsMap); + expect(r_document.value).toBe('df <- data.frame();\n'); }); it('parses multiple inputs (into dummy data frames)', () => { - let code = wrap_in_python_lines('%R -i df -i x ggplot(df)'); - let { virtual_document: r_document } = get_the_only_pair( - extract(code).foreign_document_map + let code = wrapInPythonLines('%R -i df -i x ggplot(df)'); + let { virtualDocument: r_document } = getTheOnlyPair( + extract(code).foreignDocumentsMap ); - expect(r_document.value).to.equal( + expect(r_document.value).toBe( 'df <- data.frame(); x <- data.frame(); ggplot(df)\n' ); }); it('parses inputs ignoring other arguments', () => { - let code = wrap_in_python_lines('%R -i df --width 300 -o x ggplot(df)'); - let r_document = get_the_only_virtual(extract(code).foreign_document_map); - expect(r_document.value).to.equal('df <- data.frame(); ggplot(df)\n'); + let code = wrapInPythonLines('%R -i df --width 300 -o x ggplot(df)'); + let r_document = getTheOnlyVirtual(extract(code).foreignDocumentsMap); + expect(r_document.value).toBe('df <- data.frame(); ggplot(df)\n'); }); }); describe('%%R cell magic', () => { it('extracts simple commands', () => { let code = '%%R\nggplot()'; - let { cell_code_kept, foreign_document_map } = extract(code); + let { cellCodeKept, foreignDocumentsMap } = extract(code); - expect(cell_code_kept).to.equal(code); - let r_document = get_the_only_virtual(foreign_document_map); - expect(r_document.language).to.equal('r'); - expect(r_document.value).to.equal('ggplot()\n'); + expect(cellCodeKept).toBe(code); + let r_document = getTheOnlyVirtual(foreignDocumentsMap); + expect(r_document.language).toBe('r'); + expect(r_document.value).toBe('ggplot()\n'); }); }); it('parses input (into a dummy data frame)', () => { let code = '%%R -i df\nggplot(df)'; - let { foreign_document_map } = extract(code); + let { foreignDocumentsMap } = extract(code); - let r_document = get_the_only_virtual(foreign_document_map); - expect(r_document.language).to.equal('r'); - expect(r_document.value).to.equal('df <- data.frame(); ggplot(df)\n'); + let r_document = getTheOnlyVirtual(foreignDocumentsMap); + expect(r_document.language).toBe('r'); + expect(r_document.value).toBe('df <- data.frame(); ggplot(df)\n'); }); it('correctly gives ranges in source', () => { let code = '%%R\nggplot()'; - let { foreign_document_map } = extract(code); - let { range } = get_the_only_pair(foreign_document_map); - expect(range.start.line).to.be.equal(1); - expect(range.start.column).to.be.equal(0); + let { foreignDocumentsMap } = extract(code); + let { range } = getTheOnlyPair(foreignDocumentsMap); + expect(range.start.line).toBe(1); + expect(range.start.column).toBe(0); - expect(range.end.line).to.be.equal(1); - expect(range.end.column).to.be.equal(8); + expect(range.end.line).toBe(1); + expect(range.end.column).toBe(8); }); }); diff --git a/packages/jupyterlab-lsp/src/transclusions/ipython-rpy2/extractors.ts b/packages/jupyterlab-lsp/src/transclusions/ipython-rpy2/extractors.ts index 441bbaf80..37c3eedfa 100644 --- a/packages/jupyterlab-lsp/src/transclusions/ipython-rpy2/extractors.ts +++ b/packages/jupyterlab-lsp/src/transclusions/ipython-rpy2/extractors.ts @@ -33,7 +33,7 @@ function rpy2_args(match: string, ...args: string[]) { return inputs; } -export let foreign_code_extractors: IForeignCodeExtractorsRegistry = { +export let foreignCodeExtractors: IForeignCodeExtractorsRegistry = { // general note: to match new lines use [^] instead of dot, unless the target is ES2018, then use /s python: [ // @@ -42,12 +42,12 @@ export let foreign_code_extractors: IForeignCodeExtractorsRegistry = { new RegExpForeignCodeExtractor({ language: 'r', pattern: '^%%R' + rpy2_args_pattern(RPY2_MAX_ARGS) + '\n([^]*)', - foreign_capture_groups: [RPY2_MAX_ARGS * 2 + 1], + foreignCaptureGroups: [RPY2_MAX_ARGS * 2 + 1], // it is important to not strip any leading spaces - foreign_replacer: rpy2_code_extractor_non_stripping, - extract_arguments: rpy2_args, - is_standalone: false, - file_extension: 'R' + foreignReplacer: rpy2_code_extractor_non_stripping, + extractArguments: rpy2_args, + isStandalone: false, + fileExtension: 'R' }), new RegExpForeignCodeExtractor({ language: 'r', @@ -55,11 +55,11 @@ export let foreign_code_extractors: IForeignCodeExtractorsRegistry = { // otherwise the offset will be off by one and the R language server will crash pattern: '(?:^|\n)%R' + rpy2_args_pattern(RPY2_MAX_ARGS) + '(?: (.*))?(?:\n|$)', - foreign_capture_groups: [RPY2_MAX_ARGS * 2 + 1], - foreign_replacer: create_rpy_code_extractor(true), - extract_arguments: rpy2_args, - is_standalone: false, - file_extension: 'R' + foreignCaptureGroups: [RPY2_MAX_ARGS * 2 + 1], + foreignReplacer: create_rpy_code_extractor(true), + extractArguments: rpy2_args, + isStandalone: false, + fileExtension: 'R' }) ] }; diff --git a/packages/jupyterlab-lsp/src/transclusions/ipython-rpy2/index.ts b/packages/jupyterlab-lsp/src/transclusions/ipython-rpy2/index.ts index 8e68f247a..1cba29e7c 100644 --- a/packages/jupyterlab-lsp/src/transclusions/ipython-rpy2/index.ts +++ b/packages/jupyterlab-lsp/src/transclusions/ipython-rpy2/index.ts @@ -1,9 +1,10 @@ import { JupyterFrontEndPlugin } from '@jupyterlab/application'; +import { ILSPCodeExtractorsManager } from '@jupyterlab/lsp'; import { ILSPCodeOverridesManager } from '../../overrides/tokens'; -import { ILSPCodeExtractorsManager, PLUGIN_ID } from '../../tokens'; +import { PLUGIN_ID } from '../../tokens'; -import { foreign_code_extractors } from './extractors'; +import { foreignCodeExtractors } from './extractors'; import { overrides } from './overrides'; export const IPYTHON_RPY2_TRANSCLUSIONS: JupyterFrontEndPlugin = { @@ -14,8 +15,8 @@ export const IPYTHON_RPY2_TRANSCLUSIONS: JupyterFrontEndPlugin = { extractors_manager: ILSPCodeExtractorsManager, overrides_manager: ILSPCodeOverridesManager ) => { - for (let language of Object.keys(foreign_code_extractors)) { - for (let extractor of foreign_code_extractors[language]) { + for (let language of Object.keys(foreignCodeExtractors)) { + for (let extractor of foreignCodeExtractors[language]) { extractors_manager.register(extractor, language); } } diff --git a/packages/jupyterlab-lsp/src/transclusions/ipython-rpy2/overrides.spec.ts b/packages/jupyterlab-lsp/src/transclusions/ipython-rpy2/overrides.spec.ts index c1167d769..24547dd71 100644 --- a/packages/jupyterlab-lsp/src/transclusions/ipython-rpy2/overrides.spec.ts +++ b/packages/jupyterlab-lsp/src/transclusions/ipython-rpy2/overrides.spec.ts @@ -1,5 +1,3 @@ -import { expect } from 'chai'; - import { ReversibleOverridesMap } from '../../overrides/maps'; import { overrides } from './overrides'; @@ -15,18 +13,18 @@ describe('rpy2 IPython overrides', () => { ); it('overrides cell magic', () => { let override = cell_magics.override_for(R_CELL_MAGIC)!; - expect(override).to.equal( + expect(override).toBe( 'rpy2.ipython.rmagic.RMagics.R("""print(1)\n""", "")' ); let reverse = cell_magics.reverse.override_for(override); - expect(reverse).to.equal(R_CELL_MAGIC); + expect(reverse).toBe(R_CELL_MAGIC); override = cell_magics.override_for('%%R -i x -o y\nsome\ncode')!; - expect(override).to.equal( + expect(override).toBe( 'y = rpy2.ipython.rmagic.RMagics.R("""some\ncode""", "", x)' ); reverse = cell_magics.reverse.override_for(override); - expect(reverse).to.equal('%%R -i x -o y\nsome\ncode'); + expect(reverse).toBe('%%R -i x -o y\nsome\ncode'); }); }); @@ -38,84 +36,82 @@ describe('rpy2 IPython overrides', () => { it('works with other Rdevice', () => { let line = '%Rdevice svg'; let override = line_magics.override_for(line)!; - expect(override).to.equal( - 'rpy2.ipython.rmagic.RMagics.Rdevice(" svg", "")' - ); + expect(override).toBe('rpy2.ipython.rmagic.RMagics.Rdevice(" svg", "")'); let reverse = line_magics.reverse.override_for(override); - expect(reverse).to.equal(line); + expect(reverse).toBe(line); }); it('does not overwrite non-rpy2 magics', () => { let line = '%RestMagic'; let override = line_magics.override_for(line); - expect(override).to.equal(null); + expect(override).toBe(null); }); it('works with the short form arguments, inputs and outputs', () => { let line = '%R -i x'; let override = line_magics.override_for(line)!; - expect(override).to.equal('rpy2.ipython.rmagic.RMagics.R("", "", x)'); + expect(override).toBe('rpy2.ipython.rmagic.RMagics.R("", "", x)'); let reverse = line_magics.reverse.override_for(override); - expect(reverse).to.equal(line); + expect(reverse).toBe(line); line = '%R -o x'; override = line_magics.override_for(line)!; - expect(override).to.equal('x = rpy2.ipython.rmagic.RMagics.R("", "")'); + expect(override).toBe('x = rpy2.ipython.rmagic.RMagics.R("", "")'); reverse = line_magics.reverse.override_for(override); - expect(reverse).to.equal(line); + expect(reverse).toBe(line); line = '%R -i x command()'; override = line_magics.override_for(line)!; - expect(override).to.equal( + expect(override).toBe( 'rpy2.ipython.rmagic.RMagics.R(" command()", "", x)' ); reverse = line_magics.reverse.override_for(override); - expect(reverse).to.equal(line); + expect(reverse).toBe(line); line = '%R -i x -w 800 -h 400 command()'; override = line_magics.override_for(line)!; - expect(override).to.equal( + expect(override).toBe( 'rpy2.ipython.rmagic.RMagics.R(" command()", "-w 800 -h 400", x)' ); reverse = line_magics.reverse.override_for(override); - expect(reverse).to.equal(line); + expect(reverse).toBe(line); line = '%R -i x -o y -i z command()'; override = line_magics.override_for(line)!; - expect(override).to.equal( + expect(override).toBe( 'y = rpy2.ipython.rmagic.RMagics.R(" command()", "", x, z)' ); line = '%R -i x -i z -o y -o w command()'; override = line_magics.override_for(line)!; - expect(override).to.equal( + expect(override).toBe( 'y, w = rpy2.ipython.rmagic.RMagics.R(" command()", "", x, z)' ); reverse = line_magics.reverse.override_for(override); - expect(reverse).to.equal(line); + expect(reverse).toBe(line); }); it('does not substitute magic-like constructs', () => { let line = 'print("%R -i x")'; let override = line_magics.override_for(line); - expect(override).to.equal(null); + expect(override).toBe(null); }); it('works with the long form arguments', () => { let line = '%R --input x'; let override = line_magics.override_for(line)!; - expect(override).to.equal('rpy2.ipython.rmagic.RMagics.R("", "", x)'); + expect(override).toBe('rpy2.ipython.rmagic.RMagics.R("", "", x)'); let reverse = line_magics.reverse.override_for(override); // TODO: make this preserve the long form - expect(reverse).to.equal('%R -i x'); + expect(reverse).toBe('%R -i x'); line = '%R --width 800 --height 400 command()'; override = line_magics.override_for(line)!; - expect(override).to.equal( + expect(override).toBe( 'rpy2.ipython.rmagic.RMagics.R(" command()", "--width 800 --height 400")' ); reverse = line_magics.reverse.override_for(override); - expect(reverse).to.equal(line); + expect(reverse).toBe(line); }); }); }); diff --git a/packages/jupyterlab-lsp/src/transclusions/ipython-sql/extractors.spec.ts b/packages/jupyterlab-lsp/src/transclusions/ipython-sql/extractors.spec.ts index a1e66dd3f..2e8377660 100644 --- a/packages/jupyterlab-lsp/src/transclusions/ipython-sql/extractors.spec.ts +++ b/packages/jupyterlab-lsp/src/transclusions/ipython-sql/extractors.spec.ts @@ -1,32 +1,29 @@ -import { expect } from 'chai'; - import { - extract_code, - get_the_only_virtual, - wrap_in_python_lines + extractCode, + getTheOnlyVirtual, + wrapInPythonLines, + mockExtractorsManager } from '../../extractors/testutils'; -import { BrowserConsole } from '../../virtual/console'; import { VirtualDocument } from '../../virtual/document'; -import { SQL_URL_PATTERN, foreign_code_extractors } from './extractors'; +import { SQL_URL_PATTERN, foreignCodeExtractors } from './extractors'; describe('IPython SQL extractors', () => { let document: VirtualDocument; function extract(code: string) { - return extract_code(document, code); + return extractCode(document, code); } beforeEach(() => { document = new VirtualDocument({ language: 'python', path: 'test.ipynb', - overrides_registry: {}, - foreign_code_extractors: foreign_code_extractors, + overridesRegistry: {}, + foreignCodeExtractors: mockExtractorsManager(foreignCodeExtractors), standalone: false, - file_extension: 'py', - has_lsp_supported_file: false, - console: new BrowserConsole() + fileExtension: 'py', + hasLspSupportedFile: false }); }); @@ -46,51 +43,51 @@ describe('IPython SQL extractors', () => { ]; const pattern = new RegExp(SQL_URL_PATTERN); for (let url of correct_urls) { - expect(pattern.test(url)).to.equal(true); + expect(pattern.test(url)).toBe(true); } }); }); describe('%sql line magic', () => { it('extracts simple commands', () => { - let code = wrap_in_python_lines('%sql select * from work'); - let { cell_code_kept, foreign_document_map } = extract(code); + let code = wrapInPythonLines('%sql select * from work'); + let { cellCodeKept, foreignDocumentsMap } = extract(code); // should not be removed, but left for the static analysis (using magic overrides) - expect(cell_code_kept).to.equal(code); - let document = get_the_only_virtual(foreign_document_map); - expect(document.language).to.equal('sql'); - expect(document.value).to.equal('select * from work\n'); + expect(cellCodeKept).toBe(code); + let document = getTheOnlyVirtual(foreignDocumentsMap); + expect(document.language).toBe('sql'); + expect(document.value).toBe('select * from work\n'); }); it('leaves out the connection specification', () => { - let code = wrap_in_python_lines( + let code = wrapInPythonLines( '%sql postgresql://will:longliveliz@localhost/shakes' ); - let foreign_document_map = extract(code).foreign_document_map; - let document = get_the_only_virtual(foreign_document_map); - expect(document.language).to.equal('sql'); - expect(document.value).to.equal('\n'); + let foreignDocumentsMap = extract(code).foreignDocumentsMap; + let document = getTheOnlyVirtual(foreignDocumentsMap); + expect(document.language).toBe('sql'); + expect(document.value).toBe('\n'); }); it('leaves out options', () => { - let code = wrap_in_python_lines('%sql -l'); - let foreign_document_map = extract(code).foreign_document_map; - let document = get_the_only_virtual(foreign_document_map); - expect(document.language).to.equal('sql'); - expect(document.value).to.equal('\n'); + let code = wrapInPythonLines('%sql -l'); + let foreignDocumentsMap = extract(code).foreignDocumentsMap; + let document = getTheOnlyVirtual(foreignDocumentsMap); + expect(document.language).toBe('sql'); + expect(document.value).toBe('\n'); }); }); describe('%%sql cell magic', () => { it('extracts simple commands', () => { let code = "%%sql\nselect * from character\nwhere abbrev = 'ALICE'"; - let { cell_code_kept, foreign_document_map } = extract(code); + let { cellCodeKept, foreignDocumentsMap } = extract(code); - expect(cell_code_kept).to.equal(code); - let document = get_the_only_virtual(foreign_document_map); - expect(document.language).to.equal('sql'); - expect(document.value).to.equal( + expect(cellCodeKept).toBe(code); + let document = getTheOnlyVirtual(foreignDocumentsMap); + expect(document.language).toBe('sql'); + expect(document.value).toBe( "select * from character\nwhere abbrev = 'ALICE'\n" ); }); @@ -98,39 +95,39 @@ describe('IPython SQL extractors', () => { it('leaves out the connection specification', () => { let code = "%%sql postgresql://will:longliveliz@localhost/shakes\nselect * from character\nwhere abbrev = 'ALICE'"; - let { foreign_document_map } = extract(code); + let { foreignDocumentsMap } = extract(code); - let document = get_the_only_virtual(foreign_document_map); - expect(document.language).to.equal('sql'); - expect(document.value).to.equal( + let document = getTheOnlyVirtual(foreignDocumentsMap); + expect(document.language).toBe('sql'); + expect(document.value).toBe( "select * from character\nwhere abbrev = 'ALICE'\n" ); }); it('leaves out the variable assignment', () => { let code = '%%sql works << SELECT title, year\nFROM work'; - let { foreign_document_map } = extract(code); + let { foreignDocumentsMap } = extract(code); - let document = get_the_only_virtual(foreign_document_map); - expect(document.language).to.equal('sql'); - expect(document.value).to.equal('SELECT title, year\nFROM work\n'); + let document = getTheOnlyVirtual(foreignDocumentsMap); + expect(document.language).toBe('sql'); + expect(document.value).toBe('SELECT title, year\nFROM work\n'); }); it('leaves out existing connection references', () => { let code = '%%sql will@shakes\nSELECT title, year\nFROM work'; - let { foreign_document_map } = extract(code); + let { foreignDocumentsMap } = extract(code); - let document = get_the_only_virtual(foreign_document_map); - expect(document.language).to.equal('sql'); - expect(document.value).to.equal('SELECT title, year\nFROM work\n'); + let document = getTheOnlyVirtual(foreignDocumentsMap); + expect(document.language).toBe('sql'); + expect(document.value).toBe('SELECT title, year\nFROM work\n'); }); it('leaves out persist option', () => { let code = '%%sql --persist dataframe\nSELECT * FROM dataframe;'; - let { foreign_document_map } = extract(code); - let document = get_the_only_virtual(foreign_document_map); - expect(document.language).to.equal('sql'); - expect(document.value).to.equal('SELECT * FROM dataframe;\n'); + let { foreignDocumentsMap } = extract(code); + let document = getTheOnlyVirtual(foreignDocumentsMap); + expect(document.language).toBe('sql'); + expect(document.value).toBe('SELECT * FROM dataframe;\n'); }); }); }); diff --git a/packages/jupyterlab-lsp/src/transclusions/ipython-sql/extractors.ts b/packages/jupyterlab-lsp/src/transclusions/ipython-sql/extractors.ts index 996ffdf98..9501b383d 100644 --- a/packages/jupyterlab-lsp/src/transclusions/ipython-sql/extractors.ts +++ b/packages/jupyterlab-lsp/src/transclusions/ipython-sql/extractors.ts @@ -21,22 +21,22 @@ const COMMAND_PATTERN = single_argument_options.map(command => command + ' \\w+').join('|')) + ')'; -export let foreign_code_extractors: IForeignCodeExtractorsRegistry = { +export let foreignCodeExtractors: IForeignCodeExtractorsRegistry = { // general note: to match new lines use [^] instead of dot, unless the target is ES2018, then use /s python: [ new RegExpForeignCodeExtractor({ language: 'sql', pattern: `^%%sql(?: (?:${SQL_URL_PATTERN}|${COMMAND_PATTERN}|(?:\\w+ << )|(?:\\w+@\\w+)))?\n?((?:.+\n)?(?:[^]*))`, - foreign_capture_groups: [1], - is_standalone: true, - file_extension: 'sql' + foreignCaptureGroups: [1], + isStandalone: true, + fileExtension: 'sql' }), new RegExpForeignCodeExtractor({ language: 'sql', pattern: `(?:^|\n)%sql (?:${SQL_URL_PATTERN}|${COMMAND_PATTERN}|(.*))\n?`, - foreign_capture_groups: [1], - is_standalone: false, - file_extension: 'sql' + foreignCaptureGroups: [1], + isStandalone: false, + fileExtension: 'sql' }) ] }; diff --git a/packages/jupyterlab-lsp/src/transclusions/ipython-sql/index.ts b/packages/jupyterlab-lsp/src/transclusions/ipython-sql/index.ts index 9c6e6b3ff..8fc698b29 100644 --- a/packages/jupyterlab-lsp/src/transclusions/ipython-sql/index.ts +++ b/packages/jupyterlab-lsp/src/transclusions/ipython-sql/index.ts @@ -1,8 +1,9 @@ import { JupyterFrontEndPlugin } from '@jupyterlab/application'; +import { ILSPCodeExtractorsManager } from '@jupyterlab/lsp'; -import { ILSPCodeExtractorsManager, PLUGIN_ID } from '../../tokens'; +import { PLUGIN_ID } from '../../tokens'; -import { foreign_code_extractors } from './extractors'; +import { foreignCodeExtractors } from './extractors'; /** * Implements extraction of code for ipython-sql, see: @@ -14,8 +15,8 @@ export const IPYTHON_SQL_TRANSCLUSIONS: JupyterFrontEndPlugin = { id: PLUGIN_ID + ':ipython-sql', requires: [ILSPCodeExtractorsManager], activate: (app, extractors_manager: ILSPCodeExtractorsManager) => { - for (let language of Object.keys(foreign_code_extractors)) { - for (let extractor of foreign_code_extractors[language]) { + for (let language of Object.keys(foreignCodeExtractors)) { + for (let extractor of foreignCodeExtractors[language]) { extractors_manager.register(extractor, language); } } diff --git a/packages/jupyterlab-lsp/src/transclusions/ipython/extractors.spec.ts b/packages/jupyterlab-lsp/src/transclusions/ipython/extractors.spec.ts index 6fe956c56..a403a7f5c 100644 --- a/packages/jupyterlab-lsp/src/transclusions/ipython/extractors.spec.ts +++ b/packages/jupyterlab-lsp/src/transclusions/ipython/extractors.spec.ts @@ -1,28 +1,28 @@ -import { expect } from 'chai'; - -import { extract_code, get_the_only_virtual } from '../../extractors/testutils'; -import { BrowserConsole } from '../../virtual/console'; +import { + extractCode, + getTheOnlyVirtual, + mockExtractorsManager +} from '../../extractors/testutils'; import { VirtualDocument } from '../../virtual/document'; -import { foreign_code_extractors } from './extractors'; +import { foreignCodeExtractors } from './extractors'; describe('IPython extractors', () => { let document: VirtualDocument; function extract(code: string) { - return extract_code(document, code); + return extractCode(document, code); } beforeEach(() => { document = new VirtualDocument({ language: 'python', path: 'test.ipynb', - overrides_registry: {}, - foreign_code_extractors: foreign_code_extractors, + overridesRegistry: {}, + foreignCodeExtractors: mockExtractorsManager(foreignCodeExtractors), standalone: false, - file_extension: 'py', - has_lsp_supported_file: false, - console: new BrowserConsole() + fileExtension: 'py', + hasLspSupportedFile: false }); }); @@ -33,32 +33,32 @@ describe('IPython extractors', () => { describe('handles %%python cell magic', () => { it('extracts simple commands', () => { let code = '%%python\nsys.exit()'; - let { cell_code_kept, foreign_document_map } = extract(code); + let { cellCodeKept, foreignDocumentsMap } = extract(code); - expect(cell_code_kept).to.equal(code); - let python_document = get_the_only_virtual(foreign_document_map); - expect(python_document.language).to.equal('python'); - expect(python_document.value).to.equal('sys.exit()\n'); + expect(cellCodeKept).toBe(code); + let python_document = getTheOnlyVirtual(foreignDocumentsMap); + expect(python_document.language).toBe('python'); + expect(python_document.value).toBe('sys.exit()\n'); }); }); describe('handles %%html cell magic', () => { it('works with html in normal mode', () => { let code = '%%html\n
    safe
    '; - let { foreign_document_map } = extract(code); + let { foreignDocumentsMap } = extract(code); - let html_document = get_the_only_virtual(foreign_document_map); - expect(html_document.language).to.equal('html'); - expect(html_document.value).to.equal('
    safe
    \n'); + let html_document = getTheOnlyVirtual(foreignDocumentsMap); + expect(html_document.language).toBe('html'); + expect(html_document.value).toBe('
    safe
    \n'); }); it('works with html in isolated mode', () => { let code = '%%html --isolated\n
    dangerous
    '; - let { foreign_document_map } = extract(code); + let { foreignDocumentsMap } = extract(code); - let html_document = get_the_only_virtual(foreign_document_map); - expect(html_document.language).to.equal('html'); - expect(html_document.value).to.equal('
    dangerous
    \n'); + let html_document = getTheOnlyVirtual(foreignDocumentsMap); + expect(html_document.language).toBe('html'); + expect(html_document.value).toBe('
    dangerous
    \n'); }); }); }); diff --git a/packages/jupyterlab-lsp/src/transclusions/ipython/extractors.ts b/packages/jupyterlab-lsp/src/transclusions/ipython/extractors.ts index faa4f80ea..60af50d9a 100644 --- a/packages/jupyterlab-lsp/src/transclusions/ipython/extractors.ts +++ b/packages/jupyterlab-lsp/src/transclusions/ipython/extractors.ts @@ -1,7 +1,12 @@ +import { IForeignCodeExtractor } from '@jupyterlab/lsp'; + import { RegExpForeignCodeExtractor } from '../../extractors/regexp'; -import { IForeignCodeExtractorsRegistry } from '../../extractors/types'; -export let foreign_code_extractors: IForeignCodeExtractorsRegistry = { +export interface IForeignCodeExtractorsRegistry { + [host_language: string]: IForeignCodeExtractor[]; +} + +export let foreignCodeExtractors: IForeignCodeExtractorsRegistry = { // general note: to match new lines use [^] instead of dot, unless the target is ES2018, then use /s python: [ // @@ -11,37 +16,37 @@ export let foreign_code_extractors: IForeignCodeExtractorsRegistry = { new RegExpForeignCodeExtractor({ language: 'python', pattern: '^%%(python|python2|python3|pypy)( .*?)?\n([^]*)', - foreign_capture_groups: [3], - is_standalone: true, - file_extension: 'py' + foreignCaptureGroups: [3], + isStandalone: true, + fileExtension: 'py' }), new RegExpForeignCodeExtractor({ language: 'perl', pattern: '^%%(perl)( .*?)?\n([^]*)', - foreign_capture_groups: [3], - is_standalone: true, - file_extension: 'pl' + foreignCaptureGroups: [3], + isStandalone: true, + fileExtension: 'pl' }), new RegExpForeignCodeExtractor({ language: 'ruby', pattern: '^%%(ruby)( .*?)?\n([^]*)', - foreign_capture_groups: [3], - is_standalone: true, - file_extension: 'rb' + foreignCaptureGroups: [3], + isStandalone: true, + fileExtension: 'rb' }), new RegExpForeignCodeExtractor({ language: 'sh', pattern: '^%%(sh|bash)( .*?)?\n([^]*)', - foreign_capture_groups: [3], - is_standalone: true, - file_extension: 'sh' + foreignCaptureGroups: [3], + isStandalone: true, + fileExtension: 'sh' }), new RegExpForeignCodeExtractor({ language: 'html', pattern: '^%%(html --isolated)( .*?)?\n([^]*)', - foreign_capture_groups: [3], - is_standalone: true, - file_extension: 'html' + foreignCaptureGroups: [3], + isStandalone: true, + fileExtension: 'html' }), // // IPython magics producing continuous documents (non-standalone): @@ -49,30 +54,30 @@ export let foreign_code_extractors: IForeignCodeExtractorsRegistry = { new RegExpForeignCodeExtractor({ language: 'javascript', pattern: '^%%(js|javascript)( .*?)?\n([^]*)', - foreign_capture_groups: [3], - is_standalone: false, - file_extension: 'js' + foreignCaptureGroups: [3], + isStandalone: false, + fileExtension: 'js' }), new RegExpForeignCodeExtractor({ language: 'html', pattern: '^%%(?!html --isolated)(html)( .*?)?\n([^]*)', - foreign_capture_groups: [3], - is_standalone: false, - file_extension: 'html' + foreignCaptureGroups: [3], + isStandalone: false, + fileExtension: 'html' }), new RegExpForeignCodeExtractor({ language: 'latex', pattern: '^%%(latex)( .*?)?\n([^]*)', - foreign_capture_groups: [3], - is_standalone: false, - file_extension: 'tex' + foreignCaptureGroups: [3], + isStandalone: false, + fileExtension: 'tex' }), new RegExpForeignCodeExtractor({ language: 'markdown', pattern: '^%%(markdown)( .*?)?\n([^]*)', - foreign_capture_groups: [3], - is_standalone: false, - file_extension: 'md' + foreignCaptureGroups: [3], + isStandalone: false, + fileExtension: 'md' }) ] }; diff --git a/packages/jupyterlab-lsp/src/transclusions/ipython/index.ts b/packages/jupyterlab-lsp/src/transclusions/ipython/index.ts index 8ea6398eb..36dfb7303 100644 --- a/packages/jupyterlab-lsp/src/transclusions/ipython/index.ts +++ b/packages/jupyterlab-lsp/src/transclusions/ipython/index.ts @@ -1,9 +1,10 @@ import { JupyterFrontEndPlugin } from '@jupyterlab/application'; +import { ILSPCodeExtractorsManager } from '@jupyterlab/lsp'; import { ILSPCodeOverridesManager } from '../../overrides/tokens'; -import { ILSPCodeExtractorsManager, PLUGIN_ID } from '../../tokens'; +import { PLUGIN_ID } from '../../tokens'; -import { foreign_code_extractors } from './extractors'; +import { foreignCodeExtractors } from './extractors'; import { overrides } from './overrides'; export const IPYTHON_TRANSCLUSIONS: JupyterFrontEndPlugin = { @@ -14,8 +15,8 @@ export const IPYTHON_TRANSCLUSIONS: JupyterFrontEndPlugin = { extractors_manager: ILSPCodeExtractorsManager, overrides_manager: ILSPCodeOverridesManager ) => { - for (let language of Object.keys(foreign_code_extractors)) { - for (let extractor of foreign_code_extractors[language]) { + for (let language of Object.keys(foreignCodeExtractors)) { + for (let extractor of foreignCodeExtractors[language]) { extractors_manager.register(extractor, language); } } diff --git a/packages/jupyterlab-lsp/src/transclusions/ipython/overrides.spec.ts b/packages/jupyterlab-lsp/src/transclusions/ipython/overrides.spec.ts index d485b2ada..f93956430 100644 --- a/packages/jupyterlab-lsp/src/transclusions/ipython/overrides.spec.ts +++ b/packages/jupyterlab-lsp/src/transclusions/ipython/overrides.spec.ts @@ -1,5 +1,3 @@ -import { expect } from 'chai'; - import { ReversibleOverridesMap } from '../../overrides/maps'; import { overrides } from './overrides'; @@ -40,55 +38,55 @@ describe('Default IPython overrides', () => { ); it('overrides cell magics', () => { let override = cell_magics_map.override_for(CELL_MAGIC_EXISTS)!; - expect(override).to.equal( + expect(override).toBe( 'get_ipython().run_cell_magic("MAGIC", "", """some text\n""")' ); let reverse = cell_magics_map.reverse.override_for(override); - expect(reverse).to.equal(CELL_MAGIC_EXISTS); + expect(reverse).toBe(CELL_MAGIC_EXISTS); }); it('works for empty cells', () => { // those are not correct syntax, but will happen when users are in the process of writing const cell_magic_with_args = '%%MAGIC\n'; let override = cell_magics_map.override_for(cell_magic_with_args)!; - expect(override).to.equal( + expect(override).toBe( 'get_ipython().run_cell_magic("MAGIC", "", """""")' ); let reverse = cell_magics_map.reverse.override_for(override); - expect(reverse).to.equal(cell_magic_with_args); + expect(reverse).toBe(cell_magic_with_args); }); it('escapes arguments in the first line', () => { const cell_magic_with_args = '%%MAGIC "arg in quotes"\ntext'; let override = cell_magics_map.override_for(cell_magic_with_args)!; - expect(override).to.equal( + expect(override).toBe( 'get_ipython().run_cell_magic("MAGIC", " \\"arg in quotes\\"", """text""")' ); let reverse = cell_magics_map.reverse.override_for(override); - expect(reverse).to.equal(cell_magic_with_args); + expect(reverse).toBe(cell_magic_with_args); }); it('escapes docstrings properly', () => { let override = cell_magics_map.override_for(CELL_MAGIC_WITH_DOCSTRINGS)!; - expect(override).to.equal( + expect(override).toBe( 'get_ipython().run_cell_magic("MAGIC", "", """' + ESCAPED_TEXT_WITH_DOCSTRINGS + '""")' ); let reverse = cell_magics_map.reverse.override_for(override); - expect(reverse).to.equal(CELL_MAGIC_WITH_DOCSTRINGS); + expect(reverse).toBe(CELL_MAGIC_WITH_DOCSTRINGS); }); it('does not override cell-magic-like constructs', () => { let override = cell_magics_map.override_for(NO_CELL_MAGIC); - expect(override).to.equal(null); + expect(override).toBe(null); override = cell_magics_map.override_for(LINE_MAGIC_WITH_SPACE); - expect(override).to.equal(null); + expect(override).toBe(null); }); }); @@ -98,84 +96,84 @@ describe('Default IPython overrides', () => { ); it('overrides line magics', () => { let override = line_magics_map.override_for(LINE_MAGIC_WITH_SPACE)!; - expect(override).to.equal( + expect(override).toBe( 'get_ipython().run_line_magic("MAGIC", " line = dd")' ); let reverse = line_magics_map.reverse.override_for(override); - expect(reverse).to.equal(LINE_MAGIC_WITH_SPACE); + expect(reverse).toBe(LINE_MAGIC_WITH_SPACE); }); it('overrides x =%ls and x = %ls', () => { // this is a corner-case as described in // https://github.com/jupyter-lsp/jupyterlab-lsp/issues/281#issuecomment-645286076 let override = line_magics_map.override_for('x =%ls'); - expect(override).to.equal('x =get_ipython().run_line_magic("ls", "")'); + expect(override).toBe('x =get_ipython().run_line_magic("ls", "")'); override = line_magics_map.override_for('x = %ls'); - expect(override).to.equal('x = get_ipython().run_line_magic("ls", "")'); + expect(override).toBe('x = get_ipython().run_line_magic("ls", "")'); }); it('does not override line-magic-like constructs', () => { let override = line_magics_map.override_for('list("%")'); - expect(override).to.equal(null); + expect(override).toBe(null); override = line_magics_map.override_for('list(" %test")'); - expect(override).to.equal(null); + expect(override).toBe(null); }); it('does not override modulo operators', () => { let override = line_magics_map.override_for('3 % 2'); - expect(override).to.equal(null); + expect(override).toBe(null); override = line_magics_map.override_for('3%2'); - expect(override).to.equal(null); + expect(override).toBe(null); }); it('escapes arguments', () => { let line_magic_with_args = '%MAGIC "arg"'; let override = line_magics_map.override_for(line_magic_with_args)!; - expect(override).to.equal( + expect(override).toBe( 'get_ipython().run_line_magic("MAGIC", " \\"arg\\"")' ); let reverse = line_magics_map.reverse.override_for(override); - expect(reverse).to.equal(line_magic_with_args); + expect(reverse).toBe(line_magic_with_args); line_magic_with_args = '%MAGIC "arg\\"'; override = line_magics_map.override_for(line_magic_with_args)!; - expect(override).to.equal( + expect(override).toBe( 'get_ipython().run_line_magic("MAGIC", " \\"arg\\\\\\"")' ); reverse = line_magics_map.reverse.override_for(override); - expect(reverse).to.equal(line_magic_with_args); + expect(reverse).toBe(line_magic_with_args); }); it('overrides shell commands', () => { let override = line_magics_map.override_for('!ls -o')!; - expect(override).to.equal('get_ipython().getoutput("ls -o")')!; + expect(override).toBe('get_ipython().getoutput("ls -o")')!; let reverse = line_magics_map.reverse.override_for(override); - expect(reverse).to.equal('!ls -o'); + expect(reverse).toBe('!ls -o'); }); it('overrides shell commands assignments: x =!ls and x = !ls', () => { let override = line_magics_map.override_for('x =!ls'); - expect(override).to.equal('x =get_ipython().getoutput("ls")'); + expect(override).toBe('x =get_ipython().getoutput("ls")'); override = line_magics_map.override_for('x = !ls'); - expect(override).to.equal('x = get_ipython().getoutput("ls")'); + expect(override).toBe('x = get_ipython().getoutput("ls")'); }); it('does not override shell-like constructs', () => { let override = line_magics_map.override_for('"!ls"'); - expect(override).to.equal(null); + expect(override).toBe(null); }); it('does not override != comparisons', () => { let override = line_magics_map.override_for('1 != None'); - expect(override).to.equal(null); + expect(override).toBe(null); }); }); @@ -186,57 +184,51 @@ describe('Default IPython overrides', () => { it('overrides pinfo', () => { let override = line_magics_map.override_for('?int')!; - expect(override).to.equal("get_ipython().run_line_magic('pinfo', 'int')"); + expect(override).toBe("get_ipython().run_line_magic('pinfo', 'int')"); let reverse = line_magics_map.reverse.override_for(override); - expect(reverse).to.equal('?int'); + expect(reverse).toBe('?int'); override = line_magics_map.override_for('int?')!; - expect(override).to.equal( - "get_ipython().run_line_magic('pinfo', 'int')" - ); + expect(override).toBe("get_ipython().run_line_magic('pinfo', 'int')"); reverse = line_magics_map.reverse.override_for(override); - expect(reverse).to.equal('int?'); + expect(reverse).toBe('int?'); }); it('overrides pinfo2', () => { let override = line_magics_map.override_for('??int')!; - expect(override).to.equal( - "get_ipython().run_line_magic('pinfo2', 'int')" - ); + expect(override).toBe("get_ipython().run_line_magic('pinfo2', 'int')"); let reverse = line_magics_map.reverse.override_for(override); - expect(reverse).to.equal('??int'); + expect(reverse).toBe('??int'); override = line_magics_map.override_for('int??')!; - expect(override).to.equal( - "get_ipython().run_line_magic('pinfo2', 'int')" - ); + expect(override).toBe("get_ipython().run_line_magic('pinfo2', 'int')"); reverse = line_magics_map.reverse.override_for(override); - expect(reverse).to.equal('int??'); + expect(reverse).toBe('int??'); override = line_magics_map.override_for('some_func??')!; - expect(override).to.equal( + expect(override).toBe( "get_ipython().run_line_magic('pinfo2', 'some_func')" ); reverse = line_magics_map.reverse.override_for(override); - expect(reverse).to.equal('some_func??'); + expect(reverse).toBe('some_func??'); }); it('does not override standalone question marks', () => { let override = line_magics_map.override_for("'q?'"); - expect(override).to.equal(null); + expect(override).toBe(null); override = line_magics_map.override_for('#?'); - expect(override).to.equal(null); + expect(override).toBe(null); override = line_magics_map.override_for("?q'"); - expect(override).to.equal(null); + expect(override).toBe(null); override = line_magics_map.override_for("?#'"); - expect(override).to.equal(null); + expect(override).toBe(null); }); }); }); diff --git a/packages/jupyterlab-lsp/src/utils.spec.ts b/packages/jupyterlab-lsp/src/utils.spec.ts index c42570434..286e2ffc8 100644 --- a/packages/jupyterlab-lsp/src/utils.spec.ts +++ b/packages/jupyterlab-lsp/src/utils.spec.ts @@ -1,5 +1,3 @@ -import { expect } from 'chai'; - import { collapseToDotted, escapeMarkdown, uris_equal } from './utils'; describe('uris_equal', () => { @@ -8,7 +6,7 @@ describe('uris_equal', () => { 'file:///d%3A/a/jupyterlab-lsp/jupyterlab-lsp/atest/output/windows_39_4/home/n%C3%B6te%20b%C3%B2%C3%B3ks/example.py', 'file:///d:/a/jupyterlab-lsp/jupyterlab-lsp/atest/output/windows_39_4/home/n%C3%B6te%20b%C3%B2%C3%B3ks/example.py' ); - expect(result).to.equal(true); + expect(result).toBe(true); }); }); @@ -22,7 +20,7 @@ describe('collapseToDotted', () => { explainshellEndpoint: '' } }).result - ).to.deep.equal({ + ).toEqual({ 'bashIde.globPattern': '**/*@(.sh|.inc|.bash|.command)', 'bashIde.highlightParsingErrors': true, 'bashIde.explainshellEndpoint': '' @@ -38,7 +36,7 @@ describe('collapseToDotted', () => { }, 'bashIde.explainshellEndpoint': '' }).result - ).to.deep.equal({ + ).toEqual({ 'bashIde.globPattern': '**/*@(.sh|.inc|.bash|.command)', 'bashIde.highlightParsingErrors': true, 'bashIde.explainshellEndpoint': '' @@ -54,7 +52,7 @@ describe('collapseToDotted', () => { 'jedi.env_vars': {} } }).result - ).to.deep.equal({ + ).toEqual({ 'pylsp.plugins.jedi.env_vars': {} }); }); @@ -66,7 +64,7 @@ describe('collapseToDotted', () => { collapseToDotted({ 'pylsp.configurationSources': ['pycodestyle'] }).result - ).to.deep.equal({ + ).toEqual({ 'pylsp.configurationSources': ['pycodestyle'] }); }); @@ -78,7 +76,7 @@ describe('collapseToDotted', () => { collapseToDotted({ 'pylsp.plugins.flake8.config': null }).result - ).to.deep.equal({ + ).toEqual({ 'pylsp.plugins.flake8.config': null }); }); @@ -93,7 +91,7 @@ describe('collapseToDotted', () => { }, 'bashIde.explainshellEndpoint': 'b' }).conflicts - ).to.deep.equal({ + ).toEqual({ 'bashIde.explainshellEndpoint': ['a', 'b'] }); }); @@ -108,7 +106,7 @@ describe('collapseToDotted', () => { }, 'pylsp.configurationSources': ['pycodestyle'] }).conflicts - ).to.deep.equal({ + ).toEqual({ 'pylsp.configurationSources': [['flake8'], ['pycodestyle']] }); }); @@ -116,35 +114,31 @@ describe('collapseToDotted', () => { describe('escapeMarkdown', () => { it('escapes italics', () => { - expect(escapeMarkdown('pre *italic* post')).to.equal( - 'pre \\*italic\\* post' - ); + expect(escapeMarkdown('pre *italic* post')).toBe('pre \\*italic\\* post'); }); it('escapes underscore italics', () => { - expect(escapeMarkdown('pre _italic_ post')).to.equal( - 'pre \\_italic\\_ post' - ); + expect(escapeMarkdown('pre _italic_ post')).toBe('pre \\_italic\\_ post'); }); it('escapes escaped italics', () => { - expect(escapeMarkdown('pre \\*non-italic\\* post')).to.equal( + expect(escapeMarkdown('pre \\*non-italic\\* post')).toBe( 'pre \\\\\\*non-italic\\\\\\* post' ); }); it('escapes bold', () => { - expect(escapeMarkdown('pre **bold** post')).to.equal( + expect(escapeMarkdown('pre **bold** post')).toBe( 'pre \\*\\*bold\\*\\* post' ); }); it('escapes headers', () => { - expect(escapeMarkdown('pre #heading post')).to.equal('pre \\#heading post'); + expect(escapeMarkdown('pre #heading post')).toBe('pre \\#heading post'); }); it('escapes URLs', () => { - expect(escapeMarkdown('pre [link](https://example.com) post')).to.equal( + expect(escapeMarkdown('pre [link](https://example.com) post')).toBe( 'pre \\[link\\](https://example.com) post' ); }); it('replaces indents with non-breaking spaces', () => { - expect(escapeMarkdown(' indented')).to.equal( + expect(escapeMarkdown(' indented')).toBe( '\u00A0\u00A0\u00A0\u00A0indented' ); }); diff --git a/packages/jupyterlab-lsp/src/virtual/codemirror_editor.ts b/packages/jupyterlab-lsp/src/virtual/codemirror_editor.ts deleted file mode 100644 index 97917631a..000000000 --- a/packages/jupyterlab-lsp/src/virtual/codemirror_editor.ts +++ /dev/null @@ -1,639 +0,0 @@ -import { JupyterFrontEndPlugin } from '@jupyterlab/application'; -import { CodeEditor } from '@jupyterlab/codeeditor'; -import { CodeMirrorEditor } from '@jupyterlab/codemirror'; -import { IDocumentWidget } from '@jupyterlab/docregistry'; -import { Signal } from '@lumino/signaling'; -import type * as CodeMirror from 'codemirror'; - -import { IEditorChangedData, WidgetAdapter } from '../adapters/adapter'; -import { IForeignCodeExtractorsRegistry } from '../extractors/types'; -import { IEditorName } from '../feature'; -import { - IEditorPosition, - IRootPosition, - ISourcePosition, - IVirtualPosition -} from '../positioning'; -import { ILSPLogConsole, ILSPVirtualEditorManager, PLUGIN_ID } from '../tokens'; - -import { - IBlockAddedInfo, - ICodeBlockOptions, - UpdateManager, - VirtualDocument -} from './document'; -import { IEditorChange, IVirtualEditor, IWindowCoordinates } from './editor'; - -export type CodeMirrorHandler = ( - instance: CodeMirrorVirtualEditor, - ...args: any[] -) => void; -type WrappedHandler = (instance: CodeMirror.Editor, ...args: any[]) => void; -type BlockSignalHandler = ( - adapter: WidgetAdapter, - data: IEditorChangedData -) => void; - -// problematic overloads: typescript cannot resolve old-style -// overloads for union types, so we will case to one of the -// union elements to silence it (it does not matter which one, -// but to make sure we are not introducing type issues we will -// use both: EventName1 for `.on()` and EventName2 for `.off()` -type EventName1 = CodeMirror.DOMEvent & keyof GlobalEventHandlersEventMap; -type EventName2 = keyof CodeMirror.EditorEventMap; -export type EventName = EventName1 | EventName2; - -// eslint-disable-next-line @typescript-eslint/ban-ts-comment -// @ts-ignore -class DocDispatcher implements CodeMirror.Doc { - constructor( - private virtual_editor: CodeMirrorVirtualEditor, - private adapter: WidgetAdapter - ) {} - - markText( - from: IRootPosition, - to: IRootPosition, - options?: CodeMirror.TextMarkerOptions - ): CodeMirror.TextMarker { - // TODO: edgecase: from and to in different cells - let ce_editor = - this.virtual_editor.virtual_document.get_editor_at_source_line(from); - let cm_editor = this.virtual_editor.ce_editor_to_cm_editor.get(ce_editor)!; - let notebook_map = this.virtual_editor; - return cm_editor - .getDoc() - .markText( - notebook_map.transform_from_root_to_editor(from), - notebook_map.transform_from_root_to_editor(to), - options - ); - } - - getCursor(start?: string): CodeMirror.Position { - let active_editor = this.adapter.activeEditor as CodeMirrorEditor; - if (active_editor == null) { - // TODO - return undefined as any; - } - let cursor = active_editor.editor - .getDoc() - .getCursor(start) as IEditorPosition; - return this.virtual_editor.transform_from_editor_to_root( - active_editor, - cursor - )!; - } -} -/** - * VirtualEditor extends the CodeMirror.Editor interface; its subclasses may either - * fast-forward any requests to an existing instance of the CodeMirror.Editor - * (using ES6 Proxy), or implement custom behaviour, allowing for the use of - * virtual documents representing code in complex entities such as notebooks. - */ -export class CodeMirrorVirtualEditor - implements IVirtualEditor, CodeMirror.Editor -{ - // TODO: getValue could be made private in the virtual editor and the virtual editor - // could stop exposing the full implementation of CodeMirror but rather hide it inside. - editor_name: IEditorName = 'CodeMirrorEditor'; - virtual_document: VirtualDocument; - code_extractors: IForeignCodeExtractorsRegistry; - console: ILSPLogConsole; - cm_editor_to_ce_editor: Map; - ce_editor_to_cm_editor: Map; - private block_added_handlers: BlockSignalHandler[]; - private block_removed_handlers: BlockSignalHandler[]; - isDisposed = false; - - change: Signal, IEditorChange>; - - editor_to_source_line: Map; - private editor_to_source_line_new: Map; - - private _proxy: CodeMirrorVirtualEditor; - protected readonly adapter: WidgetAdapter; - - constructor(options: IVirtualEditor.IOptions) { - this.adapter = options.adapter; - this.virtual_document = options.virtual_document; - this.console = this.adapter.console; - this.change = new Signal(this); - - this.block_added_handlers = []; - this.block_removed_handlers = []; - - this.editor_to_source_line = new Map(); - this.cm_editor_to_ce_editor = new Map(); - this.ce_editor_to_cm_editor = new Map(); - this._proxy = new Proxy(this, { - get: function ( - target: CodeMirrorVirtualEditor, - prop: keyof CodeMirror.Editor, - receiver: any - ) { - if (!(prop in target)) { - console.warn( - `Unimplemented method ${prop.toString()} for CodeMirrorVirtualEditor` - ); - return; - } else { - return Reflect.get(target, prop, receiver); - } - } - }); - // this is not the most efficient, but probably the most reliable way - this.virtual_document.update_manager.update_began.connect( - this.onEditorsUpdated, - this - ); - - this.virtual_document.update_manager.block_added.connect( - this.save_block_position, - this - ); - this.virtual_document.update_manager.update_finished.connect(() => { - this.editor_to_source_line = this.editor_to_source_line_new; - }, this); - - this.set_event_handlers(); - return this._proxy; - } - - dispose() { - if (this.isDisposed) { - return; - } - - this.editor_to_source_line.clear(); - this.cm_editor_to_ce_editor.clear(); - this.ce_editor_to_cm_editor.clear(); - - this.off('change', this.emit_change); - - for (let [[eventName], wrapped_handler] of this._event_wrappers.entries()) { - this.forEveryBlockEditor(cm_editor => { - cm_editor.off(eventName as EventName2, wrapped_handler); - }, false); - } - - this._event_wrappers.clear(); - - this.disconnectBlockMonitoring(); - - this.virtual_document.dispose(); - - // just to be sure - this.virtual_document = null as any; - this.code_extractors = null as any; - - this.isDisposed = true; - - // just to be sure - this.forEveryBlockEditor = null as any; - this._proxy = null as any; - } - - get_cursor_position(): IRootPosition { - return this.getDoc().getCursor('end') as IRootPosition; - } - - private onEditorsUpdated( - update_manager: UpdateManager, - blocks: ICodeBlockOptions[] - ): void { - this.cm_editor_to_ce_editor.clear(); - this.ce_editor_to_cm_editor.clear(); - this.editor_to_source_line_new = new Map(); - for (let block of blocks) { - let ce_editor = block.ce_editor; - let cm_editor = (ce_editor as CodeMirrorEditor).editor; - this.cm_editor_to_ce_editor.set(cm_editor, ce_editor); - this.ce_editor_to_cm_editor.set(ce_editor, cm_editor); - } - } - - private save_block_position( - update_manager: UpdateManager, - block_data: IBlockAddedInfo - ) { - this.editor_to_source_line_new.set( - block_data.block.ce_editor, - block_data.virtual_document.last_source_line - ); - } - - private set_event_handlers() { - this.on('change', this.emit_change.bind(this)); - } - - private emit_change( - instance: CodeMirrorVirtualEditor, - change: CodeMirror.EditorChange - ) { - this.change.emit(change as IEditorChange); - } - - window_coords_to_root_position( - coordinates: IWindowCoordinates - ): IRootPosition | null { - const position = this.coordsChar(coordinates, 'window'); - if (position.line === -1 && position.ch === -1) { - return null; - } - return position; - } - - get_token_at(position: IRootPosition): CodeEditor.IToken { - let token = this.getTokenAt(position); - return { - value: token.string, - offset: token.start, - type: token.type || '' - }; - } - - get_cm_editor(position: IRootPosition) { - return this.get_editor_at_root_line(position); - } - - transform_virtual_to_editor( - position: IVirtualPosition - ): IEditorPosition | null { - return this.virtual_document.transform_virtual_to_editor(position); - } - - // TODO .root is not really needed as we are in editor now... - document_at_root_position(position: IRootPosition): VirtualDocument { - let root_as_source = position as ISourcePosition; - return this.virtual_document.root.document_at_source_position( - root_as_source - ); - } - - root_position_to_virtual_position(position: IRootPosition): IVirtualPosition { - let root_as_source = position as ISourcePosition; - return this.virtual_document.root.virtual_position_at_document( - root_as_source - ); - } - - get_editor_at_root_position(root_position: IRootPosition) { - return this.virtual_document.root.get_editor_at_source_line(root_position); - } - - root_position_to_editor(root_position: IRootPosition): IEditorPosition { - return this.virtual_document.root.transform_source_to_editor(root_position); - } - - private _event_wrappers = new Map< - [EventName, CodeMirrorHandler], - WrappedHandler - >(); - - /** - * Proxy the event handler binding to the CodeMirror editors, - * allowing for multiple actual editors per a virtual editor. - * - * Only handlers accepting CodeMirror.Editor are supported for simplicity. - */ - on(eventName: EventName, handler: CodeMirrorHandler, ...args: any[]): void { - let wrapped_handler = (instance: CodeMirror.Editor, ...args: any[]) => { - try { - return handler(this, ...args); - } catch (error) { - this.console.warn( - 'CodeMirrorVirtualEditor handler (which should accept a CodeMirror Editor instance) failed', - { error, instance, args, this: this } - ); - } - }; - this._event_wrappers.set([eventName, handler], wrapped_handler); - - this.forEveryBlockEditor( - cm_editor => { - cm_editor.on(eventName as EventName1, wrapped_handler); - }, - true, - cm_editor => { - cm_editor.off(eventName as EventName2, wrapped_handler); - } - ); - } - - off(eventName: EventName, handler: CodeMirrorHandler, ...args: any[]): void { - let wrapped_handler = this._event_wrappers.get([eventName, handler]); - - this.forEveryBlockEditor(cm_editor => { - cm_editor.off(eventName as EventName2, wrapped_handler!); - }); - } - - find_ce_editor(cm_editor: CodeMirror.Editor): CodeEditor.IEditor { - return this.cm_editor_to_ce_editor.get(cm_editor)!; - } - - transform_from_editor_to_root( - editor: CodeEditor.IEditor, - position: IEditorPosition - ): IRootPosition | null { - if (!this.editor_to_source_line.has(editor)) { - this.console.warn('Editor not found in editor_to_source_line map'); - return null; - } - let shift = this.editor_to_source_line.get(editor)!; - return { - ...(position as CodeMirror.Position), - line: position.line + shift - } as IRootPosition; - } - - transform_from_root_to_editor(pos: IRootPosition): CodeMirror.Position { - // from notebook to editor space - return this.virtual_document.transform_source_to_editor(pos); - } - - state: any; - - addKeyMap(map: string | CodeMirror.KeyMap, bottom?: boolean): void { - return; - } - - addLineClass( - line: any, - where: string, - _class: string - ): CodeMirror.LineHandle { - return undefined as any; - } - - addLineWidget( - line: any, - node: HTMLElement, - options?: CodeMirror.LineWidgetOptions - ): CodeMirror.LineWidget { - return undefined as any; - } - - addOverlay(mode: any, options?: any): void { - for (let editor of this.adapter.editors) { - // TODO: use some more intelligent strategy to determine editors to test - let cm_editor = editor as CodeMirrorEditor; - cm_editor.editor.addOverlay(mode, options); - } - } - - addPanel( - node: HTMLElement, - // eslint-disable-next-line @typescript-eslint/ban-ts-comment - // @ts-ignore - options?: CodeMirror.ShowPanelOptions - // eslint-disable-next-line @typescript-eslint/ban-ts-comment - // @ts-ignore - ): CodeMirror.Panel { - return undefined; - } - - charCoords( - pos: IRootPosition, - mode?: 'window' | 'page' | 'local' - ): { left: number; right: number; top: number; bottom: number } { - try { - let editor = this.get_editor_at_root_line(pos); - return editor.charCoords(pos, mode); - } catch (e) { - console.log(e); - return { bottom: 0, left: 0, right: 0, top: 0 }; - } - } - - /** - * @note returns {line: -1, ch: -1} if position is outside of all editors - */ - coordsChar( - object: { left: number; top: number }, - mode?: 'window' | 'page' | 'local' - ): IRootPosition { - let bestGuess: IRootPosition | null = null; - for (let editor of this.adapter.editors) { - // TODO: use some more intelligent strategy to determine editors to test - let cm_editor = editor as CodeMirrorEditor; - let pos = cm_editor.editor.coordsChar(object, mode); - - if ((pos as any).outside === 1) { - continue; - } - - bestGuess = this.transform_from_editor_to_root( - editor, - pos as IEditorPosition - ); - break; - } - if (bestGuess == null) { - return { - line: -1, - ch: -1 - } as IRootPosition; - } - return bestGuess; - } - - cursorCoords( - where?: boolean, - mode?: 'window' | 'page' | 'local' - ): { left: number; top: number; bottom: number }; - cursorCoords( - where?: IRootPosition | null, - mode?: 'window' | 'page' | 'local' - ): { left: number; top: number; bottom: number }; - cursorCoords( - where?: boolean | IRootPosition | null, - mode?: 'window' | 'page' | 'local' - ): { left: number; top: number; bottom: number } { - if (typeof where !== 'boolean' && where != null) { - let editor = this.get_editor_at_root_line(where); - return editor.cursorCoords(this.transform_from_root_to_editor(where)); - } - return { bottom: 0, left: 0, top: 0 }; - } - - get any_editor(): CodeMirror.Editor { - return (this.adapter.editors[0] as CodeMirrorEditor).editor; - } - - defaultCharWidth(): number { - return this.any_editor.defaultCharWidth(); - } - - defaultTextHeight(): number { - return this.any_editor.defaultTextHeight(); - } - - endOperation(): void { - for (let editor of this.adapter.editors) { - let cm_editor = editor as CodeMirrorEditor; - cm_editor.editor.endOperation(); - } - } - - execCommand(name: string): void { - for (let editor of this.adapter.editors) { - let cm_editor = editor as CodeMirrorEditor; - cm_editor.editor.execCommand(name); - } - } - - getDoc(): CodeMirror.Doc { - let dummy_doc = new DocDispatcher(this, this.adapter); - // eslint-disable-next-line @typescript-eslint/ban-ts-comment - // @ts-ignore - return dummy_doc; - } - - private get_editor_at_root_line(pos: IRootPosition): CodeMirror.Editor { - let ce_editor = this.virtual_document.root.get_editor_at_source_line(pos); - return this.ce_editor_to_cm_editor.get(ce_editor)!; - } - - getTokenAt(pos: IRootPosition, precise?: boolean): CodeMirror.Token { - let editor = this.get_editor_at_root_line(pos); - return editor.getTokenAt(this.transform_from_root_to_editor(pos)); - } - - getTokenTypeAt(pos: IRootPosition): string { - let ce_editor = this.virtual_document.get_editor_at_source_line(pos); - let cm_editor = this.ce_editor_to_cm_editor.get(ce_editor)!; - return cm_editor.getTokenTypeAt(this.transform_from_root_to_editor(pos)); - } - - get_editor_value(editor: CodeEditor.IEditor): string { - let codemirror_editor = editor as CodeMirrorEditor; - return codemirror_editor.model.value.text; - // A previous implementation was using the underlying - // CodeMirror editor instance (as one could expect), i.e: - // let cm_editor = codemirror_editor.editor; - // return cm_editor.getValue(); - // however, because we are listening to: - // this.widget.context.model.contentChanged - // it turns out that the model can not be as fast to propagate - // the changes to the underlying CodeMirror editor instance yet - // so it seems reasonable to use the newer value from the model - // to build the next VirtualDocument; it turned out to solve some - // of the failures to resolve position within the virtual document - // which were due to race conditions. - } - - getWrapperElement(): HTMLElement { - return this.adapter.wrapper_element; - } - - heightAtLine( - line: any, - mode?: 'window' | 'page' | 'local', - includeWidgets?: boolean - ): number { - return 0; - } - - isReadOnly(): boolean { - return false; - } - - lineAtHeight(height: number, mode?: 'window' | 'page' | 'local'): number { - return 0; - } - - protected disconnectBlockMonitoring() { - for (let handler of this.block_added_handlers) { - this.adapter.editorAdded.disconnect(handler); - } - this.block_added_handlers = []; - for (let handler of this.block_removed_handlers) { - this.adapter.editorRemoved.disconnect(handler); - } - this.block_removed_handlers = []; - } - - forEveryBlockEditor( - callback: (cm_editor: CodeMirror.Editor) => any, - monitor_for_new_blocks = true, - on_editor_removed_callback: - | ((cm_editor: CodeMirror.Editor) => any) - | null = null - ) { - const editors_with_handlers = new Set(); - - // TODO... the need of iterating over all editors is universal - so this could be - // generalised to the VirtualEditor rather than live in CodeMirrorVirtualEditor; - // How would the VirtualEditor get knowledge of the editor instances? - // From the adapter (obviously). - for (let editor of this.adapter.editors) { - let cm_editor = (editor as CodeMirrorEditor).editor; - editors_with_handlers.add(cm_editor); - callback(cm_editor); - } - if (monitor_for_new_blocks) { - const on_block_added = ( - adapter: WidgetAdapter, - data: IEditorChangedData - ) => { - let { editor } = data; - if (editor == null) { - return; - } - let cm_editor = (editor as CodeMirrorEditor).editor; - if (!editors_with_handlers.has(cm_editor)) { - callback(cm_editor); - } - }; - const on_block_removed = ( - adapter: WidgetAdapter, - data: IEditorChangedData - ) => { - if (on_editor_removed_callback == null) { - return; - } - let { editor } = data; - if (editor == null) { - return; - } - let cm_editor = (editor as CodeMirrorEditor).editor; - on_editor_removed_callback(cm_editor); - }; - this.block_added_handlers.push(on_block_added); - this.block_added_handlers.push(on_block_removed); - this.adapter.editorAdded.connect(on_block_added); - this.adapter.editorRemoved.connect(on_block_removed); - } - } - - /** - * Find a cell in notebook which uses given CodeMirror editor. - * This function is O(n) - when looking up many cells - * using a hashmap based approach may be more efficient. - * @param cm_editor - */ - find_editor(cm_editor: CodeMirror.Editor) { - let ce_editor = this.cm_editor_to_ce_editor.get(cm_editor)!; - return { - index: this.adapter.get_editor_index(ce_editor), - node: this.adapter.get_editor_wrapper(ce_editor) - }; - } -} - -export interface CodeMirrorVirtualEditor extends CodeMirror.Editor {} - -export const CODEMIRROR_VIRTUAL_EDITOR: JupyterFrontEndPlugin = { - id: PLUGIN_ID + ':CodeMirrorVirtualEditor', - requires: [ILSPVirtualEditorManager], - activate: (app, editorManager: ILSPVirtualEditorManager) => { - return editorManager.registerEditorType({ - implementation: CodeMirrorVirtualEditor, - name: 'CodeMirrorEditor', - supports: CodeMirrorEditor - }); - }, - autoStart: true -}; diff --git a/packages/jupyterlab-lsp/src/virtual/console.ts b/packages/jupyterlab-lsp/src/virtual/console.ts index 3aa4b7e31..de7ea9e29 100644 --- a/packages/jupyterlab-lsp/src/virtual/console.ts +++ b/packages/jupyterlab-lsp/src/virtual/console.ts @@ -4,7 +4,7 @@ import { ISettingRegistry } from '@jupyterlab/settingregistry'; import { Signal } from '@lumino/signaling'; import { - LanguageServer as LSPSettings, + LanguageServers as LSPSettings, LoggingConsoleVerbosityLevel } from '../_plugin'; import { ILSPLogConsole, ILogConsoleCore, PLUGIN_ID } from '../tokens'; diff --git a/packages/jupyterlab-lsp/src/virtual/document.spec.ts b/packages/jupyterlab-lsp/src/virtual/document.spec.ts index 46da25adc..ad4de8cda 100644 --- a/packages/jupyterlab-lsp/src/virtual/document.spec.ts +++ b/packages/jupyterlab-lsp/src/virtual/document.spec.ts @@ -1,13 +1,15 @@ import { CodeEditor } from '@jupyterlab/codeeditor'; -import { expect } from 'chai'; +import { + ISourcePosition, + IVirtualPosition, + isWithinRange, + Document +} from '@jupyterlab/lsp'; -import { ISourcePosition, IVirtualPosition } from '../positioning'; -import { foreign_code_extractors } from '../transclusions/ipython-rpy2/extractors'; +import { mockExtractorsManager } from '../extractors/testutils'; +import { foreignCodeExtractors } from '../transclusions/ipython-rpy2/extractors'; -import { BrowserConsole } from './console'; -import { VirtualDocument, is_within_range } from './document'; - -import Mock = jest.Mock; +import { VirtualDocument } from './document'; let R_LINE_MAGICS = `%R df = data.frame() print("df created") @@ -15,7 +17,7 @@ print("df created") print("plotted") `; -describe('is_within_range', () => { +describe('isWithinRange', () => { let line_range: CodeEditor.IRange = { start: { line: 1, column: 0 }, end: { line: 1, column: 10 } @@ -25,27 +27,27 @@ describe('is_within_range', () => { end: { line: 1, column: 0 } }; it('recognizes positions within range in a single-line case', () => { - expect(is_within_range({ line: 1, column: 0 }, line_range)).to.equal(true); - expect(is_within_range({ line: 1, column: 5 }, line_range)).to.equal(true); - expect(is_within_range({ line: 1, column: 10 }, line_range)).to.equal(true); + expect(isWithinRange({ line: 1, column: 0 }, line_range)).toEqual(true); + expect(isWithinRange({ line: 1, column: 5 }, line_range)).toEqual(true); + expect(isWithinRange({ line: 1, column: 10 }, line_range)).toEqual(true); }); it('recognizes positions outside of range in a single-line case', () => { - expect(is_within_range({ line: 0, column: 0 }, line_range)).to.equal(false); - expect(is_within_range({ line: 2, column: 0 }, line_range)).to.equal(false); + expect(isWithinRange({ line: 0, column: 0 }, line_range)).toEqual(false); + expect(isWithinRange({ line: 2, column: 0 }, line_range)).toEqual(false); }); it('recognizes positions within range in multi-line case', () => { - expect(is_within_range({ line: 0, column: 3 }, long_range)).to.equal(true); - expect(is_within_range({ line: 0, column: 5 }, long_range)).to.equal(true); - expect(is_within_range({ line: 1, column: 0 }, long_range)).to.equal(true); + expect(isWithinRange({ line: 0, column: 3 }, long_range)).toEqual(true); + expect(isWithinRange({ line: 0, column: 5 }, long_range)).toEqual(true); + expect(isWithinRange({ line: 1, column: 0 }, long_range)).toEqual(true); }); it('recognizes positions outside of range in multi-line case', () => { - expect(is_within_range({ line: 0, column: 0 }, long_range)).to.equal(false); - expect(is_within_range({ line: 0, column: 1 }, long_range)).to.equal(false); - expect(is_within_range({ line: 0, column: 2 }, long_range)).to.equal(false); - expect(is_within_range({ line: 1, column: 1 }, long_range)).to.equal(false); + expect(isWithinRange({ line: 0, column: 0 }, long_range)).toEqual(false); + expect(isWithinRange({ line: 0, column: 1 }, long_range)).toEqual(false); + expect(isWithinRange({ line: 0, column: 2 }, long_range)).toEqual(false); + expect(isWithinRange({ line: 1, column: 1 }, long_range)).toEqual(false); }); }); @@ -55,126 +57,103 @@ describe('VirtualDocument', () => { document = new VirtualDocument({ language: 'python', path: 'test.ipynb', - overrides_registry: {}, - foreign_code_extractors: foreign_code_extractors, + overridesRegistry: {}, + foreignCodeExtractors: mockExtractorsManager(foreignCodeExtractors), standalone: false, - file_extension: 'py', - has_lsp_supported_file: false, - console: new BrowserConsole() - }); - }); - - describe('#dispose', () => { - it('disposes, but does not break methods which can be called from async callbacks', () => { - expect(document.isDisposed).to.equal(false); - // appending code block here should work fine - document.append_code_block({ - value: 'code', - ce_editor: {} as CodeEditor.IEditor - }); - document.dispose(); - expect(document.isDisposed).to.equal(true); - // mock console.warn - console.warn = jest.fn(); - // this one should not raise, but just warn - document.append_code_block({ - value: 'code', - ce_editor: {} as CodeEditor.IEditor - }); - expect((console.warn as Mock).mock.calls[0][0]).to.equal( - 'Cannot append code block: document disposed' - ); - }); - }); - - describe('#extract_foreign_code', () => { - it('joins non-standalone fragments together', () => { - let { cell_code_kept, foreign_document_map } = - document.extract_foreign_code( - { value: R_LINE_MAGICS, ce_editor: null as any }, - { - line: 0, - column: 0 - } - ); - - // note R cell lines are kept in code (keep_in_host=true) - expect(cell_code_kept).to.equal(R_LINE_MAGICS); - expect(foreign_document_map.size).to.equal(2); - - let { virtual_document: r_document } = foreign_document_map.get( - foreign_document_map.keys().next().value - )!; - expect(r_document.language).to.equal('r'); - expect(r_document.value).to.equal('df = data.frame()\n\n\nggplot(df)\n'); + fileExtension: 'py', + hasLspSupportedFile: false }); }); - afterEach(() => { - document.clear(); - }); - - let init_document_with_Python_and_R = () => { - let ce_editor_for_cell_1 = {} as CodeEditor.IEditor; - let ce_editor_for_cell_2 = {} as CodeEditor.IEditor; - let ce_editor_for_cell_3 = {} as CodeEditor.IEditor; - let ce_editor_for_cell_4 = {} as CodeEditor.IEditor; + let initDocumentWithPythonAndR = () => { + let ceEditor_for_cell_1 = {} as Document.IEditor; + let ceEditor_for_cell_2 = {} as Document.IEditor; + let ceEditor_for_cell_3 = {} as Document.IEditor; + let ceEditor_for_cell_4 = {} as Document.IEditor; // first block - document.append_code_block({ + document.appendCodeBlock({ value: 'test line in Python 1\n%R 1st test line in R line magic 1', - ce_editor: ce_editor_for_cell_1 + ceEditor: ceEditor_for_cell_1, + type: 'code' }); // second block - document.append_code_block({ + document.appendCodeBlock({ value: 'test line in Python 2\n%R 1st test line in R line magic 2', - ce_editor: ce_editor_for_cell_2 + ceEditor: ceEditor_for_cell_2, + type: 'code' }); // third block - document.append_code_block({ + document.appendCodeBlock({ value: 'test line in Python 3\n%R -i imported_variable 1st test line in R line magic 3', - ce_editor: ce_editor_for_cell_2 + ceEditor: ceEditor_for_cell_2, + type: 'code' }); // fourth block - document.append_code_block({ + document.appendCodeBlock({ value: '%%R\n1st test line in R cell magic 1', - ce_editor: ce_editor_for_cell_3 + ceEditor: ceEditor_for_cell_3, + type: 'code' }); // fifth block - document.append_code_block({ + document.appendCodeBlock({ value: '%%R -i imported_variable\n1st test line in R cell magic 2', - ce_editor: ce_editor_for_cell_4 + ceEditor: ceEditor_for_cell_4, + type: 'code' }); }; - describe('#transform_virtual_to_editor', () => { + // TODO: upstream this test + describe('#extractForeignCode', () => { + it('joins non-standalone fragments together', () => { + let { cellCodeKept, foreignDocumentsMap } = document.extractForeignCode( + { value: R_LINE_MAGICS, ceEditor: null as any, type: 'code' }, + { + line: 0, + column: 0 + } + ); + + // note R cell lines are kept in code (keepInHost=true) + expect(cellCodeKept).toEqual(R_LINE_MAGICS); + expect(foreignDocumentsMap.size).toEqual(2); + + let { virtualDocument: r_document } = foreignDocumentsMap.get( + foreignDocumentsMap.keys().next().value + )!; + expect(r_document.language).toEqual('r'); + expect(r_document.value).toEqual('df = data.frame()\n\n\nggplot(df)\n'); + }); + }); + + describe('#transformVirtualToEditor', () => { it('transforms positions for the top level document', () => { - init_document_with_Python_and_R(); + initDocumentWithPythonAndR(); // The first (Python) line in the first block - let editor_position = document.transform_virtual_to_editor({ + let editor_position = document.transformVirtualToEditor({ line: 0, ch: 0 } as IVirtualPosition)!; - expect(editor_position.line).to.equal(0); - expect(editor_position.ch).to.equal(0); + expect(editor_position.line).toEqual(0); + expect(editor_position.ch).toEqual(0); // The first (Python) line in the second block - editor_position = document.transform_virtual_to_editor({ + editor_position = document.transformVirtualToEditor({ line: 4, ch: 0 } as IVirtualPosition)!; - expect(editor_position.line).to.equal(0); - expect(editor_position.ch).to.equal(0); + expect(editor_position.line).toEqual(0); + expect(editor_position.ch).toEqual(0); }); it('transforms positions for the nested foreign documents', () => { - init_document_with_Python_and_R(); - let foreign_document = document.document_at_source_position({ + initDocumentWithPythonAndR(); + let foreignDocument = document.documentAtSourcePosition({ line: 1, ch: 3 } as ISourcePosition); - expect(foreign_document).to.not.equal(document); - expect(foreign_document.value).to.equal( + expect(foreignDocument).not.toBe(document); + expect(foreignDocument.value).toEqual( '1st test line in R line magic 1\n\n\n' + '1st test line in R line magic 2\n\n\n' + 'imported_variable <- data.frame(); 1st test line in R line magic 3\n\n\n' + @@ -192,51 +171,51 @@ describe('VirtualDocument', () => { } as IVirtualPosition; // For future reference, the code below would be wrong: - // let source_position = foreign_document.transform_virtual_to_source(virtual_r_1_1); - // expect(source_position.line).to.equal(1); - // expect(source_position.ch).to.equal(4); + // let source_position = foreignDocument.transform_virtual_to_source(virtual_r_1_1); + // expect(source_position.line).toEqual(1); + // expect(source_position.ch).toEqual(4); // because it checks R source position, rather than checking root source positions. let editor_position = - foreign_document.transform_virtual_to_editor(virtual_r_1_1)!; - expect(editor_position.line).to.equal(1); - expect(editor_position.ch).to.equal(4); + foreignDocument.transformVirtualToEditor(virtual_r_1_1)!; + expect(editor_position.line).toEqual(1); + expect(editor_position.ch).toEqual(4); // The second R line (in source), second in the second block // targeting 1 in "1st test line in R line magic 2" (4th virtual line == line 3) - editor_position = foreign_document.transform_virtual_to_editor({ + editor_position = foreignDocument.transformVirtualToEditor({ line: 3, ch: 0 } as IVirtualPosition)!; // 0th editor line is 'test line in Python 2\n' - expect(editor_position.line).to.equal(1); + expect(editor_position.line).toEqual(1); // 1st editor lines is '%R 1st test line in R line magic 2' // 0123 - 3rd character - expect(editor_position.ch).to.equal(3); + expect(editor_position.ch).toEqual(3); // The third R line (in source), second in the third block; // targeting "s" in "1st" in "1st test line in R line magic 3" (7th virtual line == line 6) - editor_position = foreign_document.transform_virtual_to_editor({ + editor_position = foreignDocument.transformVirtualToEditor({ line: 6, ch: 36 } as IVirtualPosition)!; // 0th editor line is 'test line in Python 3\n' - expect(editor_position.line).to.equal(1); + expect(editor_position.line).toEqual(1); // 1st editor line is '%R -i imported_variable 1st test line in R line magic 3' // 01234567890123456789012345 - 25th character - expect(editor_position.ch).to.equal(25); + expect(editor_position.ch).toEqual(25); // The fifth R line (in source), second in the fifth block; // targeting "s" in "1st" in "1st test line in R cell magic 2" (13th virtual lines == line 12) - editor_position = foreign_document.transform_virtual_to_editor({ + editor_position = foreignDocument.transformVirtualToEditor({ line: 12, ch: 36 } as IVirtualPosition)!; // 0th editor line is '%%R -i imported_variable\n' - expect(editor_position.line).to.equal(1); + expect(editor_position.line).toEqual(1); // 1st editor line is '1st test line in R cell magic 2' // 01 - expect(editor_position.ch).to.equal(1); + expect(editor_position.ch).toEqual(1); }); }); }); diff --git a/packages/jupyterlab-lsp/src/virtual/document.ts b/packages/jupyterlab-lsp/src/virtual/document.ts index 218023105..0a008326b 100644 --- a/packages/jupyterlab-lsp/src/virtual/document.ts +++ b/packages/jupyterlab-lsp/src/virtual/document.ts @@ -1,997 +1,107 @@ +// TODO: develop a better API upstream import { CodeEditor } from '@jupyterlab/codeeditor'; -import { Signal } from '@lumino/signaling'; -import { IDocumentInfo } from 'lsp-ws-connection'; +import type { + IVirtualPosition, + IRootPosition, + Document, + ForeignDocumentsMap +} from '@jupyterlab/lsp'; +import { VirtualDocument as VirtualDocumentBase } from '@jupyterlab/lsp'; -import { DocumentConnectionManager } from '../connection_manager'; -import { - IForeignCodeExtractor, - IForeignCodeExtractorsRegistry -} from '../extractors/types'; -import { LanguageIdentifier } from '../lsp'; import { ReversibleOverridesMap } from '../overrides/maps'; import { ICodeOverridesRegistry } from '../overrides/tokens'; -import { - IEditorPosition, - ISourcePosition, - IVirtualPosition, - PositionError -} from '../positioning'; -import { ILSPLogConsole } from '../tokens'; -import { DefaultMap, until_ready } from '../utils'; - -import { BrowserConsole } from './console'; - -import IRange = CodeEditor.IRange; - -type language = string; - -interface IVirtualLine { - /** - * Inspections for which document should be skipped for this virtual line? - */ - skip_inspect: Array; - /** - * Where does the virtual line belongs to in the source document? - */ - source_line: number | null; - editor: CodeEditor.IEditor; -} - -export interface ICodeBlockOptions { - ce_editor: CodeEditor.IEditor; - value: string; -} - -export interface IVirtualDocumentBlock { - /** - * Line corresponding to the block in the entire foreign document - */ - virtual_line: number; - virtual_document: VirtualDocument; - editor: CodeEditor.IEditor; -} - -export type ForeignDocumentsMap = Map; - -interface ISourceLine { - virtual_line: number; - editor: CodeEditor.IEditor; - // shift - editor_line: number; - editor_shift: CodeEditor.IPosition; - /** - * Everything which is not in the range of foreign documents belongs to the host. - */ - foreign_documents_map: ForeignDocumentsMap; -} - -export interface IForeignContext { - foreign_document: VirtualDocument; - parent_host: VirtualDocument; -} - -/** - * Check if given position is within range. - * Both start and end are inclusive. - * @param position - * @param range - */ -export function is_within_range( - position: CodeEditor.IPosition, - range: CodeEditor.IRange -): boolean { - if (range.start.line === range.end.line) { - return ( - position.line === range.start.line && - position.column >= range.start.column && - position.column <= range.end.column - ); - } - - return ( - (position.line === range.start.line && - position.column >= range.start.column && - position.line < range.end.line) || - (position.line > range.start.line && - position.column <= range.end.column && - position.line === range.end.line) || - (position.line > range.start.line && position.line < range.end.line) - ); -} - -/** - * a virtual implementation of IDocumentInfo - */ -export class VirtualDocumentInfo implements IDocumentInfo { - private _document: VirtualDocument; - version = 0; - - constructor(document: VirtualDocument) { - this._document = document; - } - - get text() { - return this._document.value; - } - - get uri() { - const uris = DocumentConnectionManager.solve_uris( - this._document, - this.languageId - ); - return uris.document; - } - - get languageId() { - return this._document.language; - } -} export namespace VirtualDocument { - export interface IOptions { - language: LanguageIdentifier; - foreign_code_extractors: IForeignCodeExtractorsRegistry; - overrides_registry: ICodeOverridesRegistry; - path: string; - file_extension: string | undefined; - console: ILSPLogConsole; - /** - * Notebooks or any other aggregates of documents are not supported - * by the LSP specification, and we need to make appropriate - * adjustments for them, pretending they are simple files - * so that the LSP servers do not refuse to cooperate. - */ - has_lsp_supported_file: boolean; - /** - * Being standalone is relevant to foreign documents - * and defines whether following chunks of code in the same - * language should be appended to this document (false, not standalone) - * or should be considered separate documents (true, standalone) - * - */ - standalone?: boolean; - parent?: VirtualDocument; + export interface IOptions extends VirtualDocumentBase.IOptions { + overridesRegistry: ICodeOverridesRegistry; } } -/** - * A notebook can hold one or more virtual documents; there is always one, - * "root" document, corresponding to the language of the kernel. All other - * virtual documents are extracted out of the notebook, based on magics, - * or other syntax constructs, depending on the kernel language. - * - * Virtual documents represent the underlying code in a single language, - * which has been parsed excluding interactive kernel commands (magics) - * which could be misunderstood by the specific LSP server. - * - * VirtualDocument has no awareness of the notebook or editor it lives in, - * however it is able to transform its content back to the notebook space, - * as it keeps editor coordinates for each virtual line. - * - * The notebook/editor aware transformations are preferred to be placed in - * VirtualEditor descendants rather than here. - * - * No dependency on editor implementation (such as CodeMirrorEditor) - * is allowed for VirtualEditor. - */ -export class VirtualDocument { - language: string; - public last_virtual_line: number; - public foreign_document_closed: Signal; - public foreign_document_opened: Signal; - public readonly instance_id: number; - protected console: ILSPLogConsole; - - standalone: boolean; - isDisposed = false; - /** - * the remote document uri, version and other server-related info - */ - public document_info: IDocumentInfo; - /** - * Virtual lines keep all the lines present in the document AND extracted to the foreign document. - */ - public virtual_lines: Map; // probably should go protected - protected source_lines: Map; - - foreign_extractors: IForeignCodeExtractor[]; - overrides_registry: ICodeOverridesRegistry; - protected foreign_extractors_registry: IForeignCodeExtractorsRegistry; - protected line_blocks: Array; - - // TODO: merge into unused documents {standalone: Map, continuous: Map} ? - protected unused_documents: Set; - protected unused_standalone_documents: DefaultMap< - language, - Array - >; - - private _remaining_lifetime: number; - private cell_magics_overrides: ReversibleOverridesMap; - private line_magics_overrides: ReversibleOverridesMap; - private static instances_count = 0; - public foreign_documents: Map; - - // TODO: make this configurable, depending on the language used - blank_lines_between_cells: number = 2; - last_source_line: number; - private previous_value: string; - public changed: Signal; - - public path: string; - public file_extension: string | undefined; - public has_lsp_supported_file: boolean; - public parent?: VirtualDocument | null; - private readonly options: VirtualDocument.IOptions; - public update_manager: UpdateManager; +export class VirtualDocument extends VirtualDocumentBase { + private cellMagicsOverrides: ReversibleOverridesMap; + private lineMagicsOverrides: ReversibleOverridesMap; constructor(options: VirtualDocument.IOptions) { - this.options = options; - this.path = options.path; - this.console = options.console; - this.file_extension = options.file_extension; - this.has_lsp_supported_file = options.has_lsp_supported_file; - this.parent = options.parent; - this.language = options.language; - let overrides = - this.language in options.overrides_registry - ? options.overrides_registry[this.language] + super(options); + const overrides = + this.language in options.overridesRegistry + ? options.overridesRegistry[this.language] : null; - this.cell_magics_overrides = new ReversibleOverridesMap( + this.cellMagicsOverrides = new ReversibleOverridesMap( overrides ? overrides.cell : [] ); - this.line_magics_overrides = new ReversibleOverridesMap( + this.lineMagicsOverrides = new ReversibleOverridesMap( overrides ? overrides.line : [] ); - this.foreign_extractors_registry = options.foreign_code_extractors; - this.foreign_extractors = - this.language in this.foreign_extractors_registry - ? this.foreign_extractors_registry[this.language] - : []; - this.virtual_lines = new Map(); - this.source_lines = new Map(); - this.foreign_documents = new Map(); - this.overrides_registry = options.overrides_registry; - this.standalone = options.standalone || false; - this.instance_id = VirtualDocument.instances_count; - VirtualDocument.instances_count += 1; - this.unused_standalone_documents = new DefaultMap( - () => new Array() - ); - this._remaining_lifetime = 6; - this.foreign_document_closed = new Signal(this); - this.foreign_document_opened = new Signal(this); - this.changed = new Signal(this); - this.unused_documents = new Set(); - this.document_info = new VirtualDocumentInfo(this); - this.update_manager = new UpdateManager(this, options.console); - this.clear(); - } - - dispose() { - if (this.isDisposed) { - return; - } - this.isDisposed = true; - - this.parent = null; - - for (const doc of this.foreign_documents.values()) { - doc.dispose(); - } - - this.close_all_foreign_documents(); - this.update_manager.dispose(); - - // clear all the maps - this.foreign_documents.clear(); - this.source_lines.clear(); - this.unused_documents.clear(); - this.unused_standalone_documents.clear(); - this.virtual_lines.clear(); - - // just to be sure - if anything is accessed after disposal (it should not) we - // will get alterted by errors in the console AND this will limit memory leaks - this.cell_magics_overrides = null as any; - this.document_info = null as any; - this.foreign_extractors = null as any; - this.foreign_extractors_registry = null as any; - this.line_magics_overrides = null as any; - this.line_blocks = null as any; - this.overrides_registry = null as any; - } - - /** - * When this counter goes down to 0, the document will be destroyed and the associated connection will be closed; - * This is meant to reduce the number of open connections when a a foreign code snippet was removed from the document. - * - * Note: top level virtual documents are currently immortal (unless killed by other means); it might be worth - * implementing culling of unused documents, but if and only if JupyterLab will also implement culling of - * idle kernels - otherwise the user experience could be a bit inconsistent, and we would need to invent our own rules. - */ - protected get remaining_lifetime() { - if (!this.parent) { - return Infinity; - } - return this._remaining_lifetime; - } - protected set remaining_lifetime(value: number) { - if (this.parent) { - this._remaining_lifetime = value; - } - } - - clear() { - // TODO - deep clear (assure that there is no memory leak) - this.unused_standalone_documents.clear(); - - for (let document of this.foreign_documents.values()) { - document.clear(); - if (document.standalone) { - // once the standalone document was cleared, we may want to remove it and close connection; - // but wait, this is a waste of resources (opening a connection takes 1-3 seconds) and, - // since this is cleaned anyway, we could use it for another standalone document of the same language. - let set = this.unused_standalone_documents.get(document.language); - set.push(document); - } - } - this.unused_documents = new Set(this.foreign_documents.values()); - this.virtual_lines.clear(); - this.source_lines.clear(); - this.last_virtual_line = 0; - this.last_source_line = 0; - this.line_blocks = []; - } - - private forward_closed_signal( - host: VirtualDocument, - context: IForeignContext - ) { - this.foreign_document_closed.emit(context); - } - - private forward_opened_signal( - host: VirtualDocument, - context: IForeignContext - ) { - this.foreign_document_opened.emit(context); - } - - // TODO: what could be refactored into "ForeignDocumentsManager" has started to emerge; - // we should consider refactoring later on. - private open_foreign( - language: language, - standalone: boolean, - file_extension: string - ): VirtualDocument { - let document = new VirtualDocument({ - ...this.options, - parent: this, - standalone: standalone, - file_extension: file_extension, - language: language - }); - const context: IForeignContext = { - foreign_document: document, - parent_host: this - }; - this.foreign_document_opened.emit(context); - // pass through any future signals - document.foreign_document_closed.connect(this.forward_closed_signal, this); - document.foreign_document_opened.connect(this.forward_opened_signal, this); - - this.foreign_documents.set(document.virtual_id, document); - - return document; - } - - document_at_source_position(position: ISourcePosition): VirtualDocument { - let source_line = this.source_lines.get(position.line); - - if (source_line == null) { - return this; - } - - let source_position_ce: CodeEditor.IPosition = { - line: source_line.editor_line, - column: position.ch - }; - - for (let [ - range, - { virtual_document: document } - ] of source_line.foreign_documents_map) { - if (is_within_range(source_position_ce, range)) { - let source_position_cm = { - line: source_position_ce.line - range.start.line, - ch: source_position_ce.column - range.start.column - }; - - return document.document_at_source_position( - source_position_cm as ISourcePosition - ); - } - } - - return this; - } - - is_within_foreign(source_position: ISourcePosition): boolean { - let source_line = this.source_lines.get(source_position.line)!; - - let source_position_ce: CodeEditor.IPosition = { - line: source_line.editor_line, - column: source_position.ch - }; - for (let [range] of source_line.foreign_documents_map) { - if (is_within_range(source_position_ce, range)) { - return true; - } - } - return false; - } - - virtual_position_at_document( - source_position: ISourcePosition - ): IVirtualPosition { - let source_line = this.source_lines.get(source_position.line); - if (source_line == null) { - throw new PositionError('Source line not mapped to virtual position'); - } - let virtual_line = source_line.virtual_line; - - // position inside the cell (block) - let source_position_ce: CodeEditor.IPosition = { - line: source_line.editor_line, - column: source_position.ch - }; - - for (let [ - range, - { virtual_line, virtual_document: document } - ] of source_line.foreign_documents_map) { - if (is_within_range(source_position_ce, range)) { - // position inside the foreign document block - let source_position_cm = { - line: source_position_ce.line - range.start.line, - ch: source_position_ce.column - range.start.column - }; - if (document.is_within_foreign(source_position_cm as ISourcePosition)) { - return this.virtual_position_at_document( - source_position_cm as ISourcePosition - ); - } else { - // where in this block in the entire foreign document? - source_position_cm.line += virtual_line; - return source_position_cm as IVirtualPosition; - } - } - } - - return { - ch: source_position.ch, - line: virtual_line - } as IVirtualPosition; } - private choose_foreign_document(extractor: IForeignCodeExtractor) { - let foreign_document: VirtualDocument; - // if not standalone, try to append to existing document - let foreign_exists = this.foreign_documents.has(extractor.language); - if (!extractor.standalone && foreign_exists) { - foreign_document = this.foreign_documents.get(extractor.language)!; - this.unused_documents.delete(foreign_document); - } else { - // if standalone, try to re-use existing connection to the server - let unused_standalone = this.unused_standalone_documents.get( - extractor.language - ); - if (extractor.standalone && unused_standalone.length > 0) { - foreign_document = unused_standalone.pop()!; - this.unused_documents.delete(foreign_document); - } else { - // if (previous document does not exists) or (extractor produces standalone documents - // and no old standalone document could be reused): create a new document - foreign_document = this.open_foreign( - extractor.language, - extractor.standalone, - extractor.file_extension - ); - } - } - return foreign_document; - } - - extract_foreign_code( - block: ICodeBlockOptions, - editor_shift: CodeEditor.IPosition - ) { - let foreign_document_map = new Map< - CodeEditor.IRange, - IVirtualDocumentBlock - >(); - - let cell_code = block.value; - - for (let extractor of this.foreign_extractors) { - // first, check if there is any foreign code: - - if (!extractor.has_foreign_code(cell_code)) { - continue; - } - - let results = extractor.extract_foreign_code(cell_code); - - let kept_cell_code = ''; - - for (let result of results) { - if (result.foreign_code !== null) { - // result.range should only be null if result.foregin_code is null - if (result.range === null) { - this.console.warn( - 'Failure in foreign code extraction: `range` is null but `foreign_code` is not!' - ); - continue; - } - let foreign_document = this.choose_foreign_document(extractor); - foreign_document_map.set(result.range, { - virtual_line: foreign_document.last_virtual_line, - virtual_document: foreign_document, - editor: block.ce_editor - }); - let foreign_shift = { - line: editor_shift.line + result.range.start.line, - column: editor_shift.column + result.range.start.column - }; - foreign_document.append_code_block( - { - value: result.foreign_code, - ce_editor: block.ce_editor - }, - foreign_shift, - result.virtual_shift! - ); - } - if (result.host_code != null) { - kept_cell_code += result.host_code; - } - } - // not breaking - many extractors are allowed to process the code, one after each other - // (think JS and CSS in HTML, or %R inside of %%timeit). - - cell_code = kept_cell_code; - } - - return { cell_code_kept: cell_code, foreign_document_map }; - } - - decode_code_block(raw_code: string): string { + // TODO: this could be moved out + decodeCodeBlock(raw_code: string): string { // TODO: add back previously extracted foreign code - let cell_override = - this.cell_magics_overrides.reverse.override_for(raw_code); - if (cell_override != null) { - return cell_override; + const cellOverride = + this.cellMagicsOverrides.reverse.override_for(raw_code); + if (cellOverride != null) { + return cellOverride; } else { - let lines = this.line_magics_overrides.reverse_replace_all( + let lines = this.lineMagicsOverrides.reverse_replace_all( raw_code.split('\n') ); return lines.join('\n'); } } - prepare_code_block( - block: ICodeBlockOptions, - editor_shift: CodeEditor.IPosition = { line: 0, column: 0 } + /** + * Extends parent method to hook cell magics overrides. + */ + prepareCodeBlock( + block: Document.ICodeBlockOptions, + editorShift: CodeEditor.IPosition = { line: 0, column: 0 } ) { let lines: Array; - let skip_inspect: Array>; + let skipInspect: Array>; - let { cell_code_kept, foreign_document_map } = this.extract_foreign_code( + let { cellCodeKept, foreignDocumentsMap } = this.extractForeignCode( block, - editor_shift + editorShift ); - let cell_code = cell_code_kept; + const cellCode = cellCodeKept; // cell magics are replaced if requested and matched - let cell_override = this.cell_magics_overrides.override_for(cell_code); - if (cell_override != null) { - lines = cell_override.split('\n'); - skip_inspect = lines.map(l => [this.id_path]); + const cellOverride = this.cellMagicsOverrides.override_for(cellCode); + if (cellOverride != null) { + lines = cellOverride.split('\n'); + skipInspect = lines.map(l => [this.idPath]); } else { // otherwise, we replace line magics - if any - let result = this.line_magics_overrides.replace_all( - cell_code.split('\n') - ); + let result = this.lineMagicsOverrides.replace_all(cellCode.split('\n')); lines = result.lines; - skip_inspect = result.skip_inspect.map(skip => - skip ? [this.id_path] : [] - ); - } - - return { lines, foreign_document_map, skip_inspect }; - } - - get foreign_document_maps(): ForeignDocumentsMap[] { - let maps = new Set(); - for (let line of this.source_lines.values()) { - maps.add(line.foreign_documents_map); - } - return [...maps.values()]; - } - - append_code_block( - block: ICodeBlockOptions, - editor_shift: CodeEditor.IPosition = { line: 0, column: 0 }, - virtual_shift?: CodeEditor.IPosition - ) { - let cell_code = block.value; - let ce_editor = block.ce_editor; - - if (this.isDisposed) { - console.warn('Cannot append code block: document disposed'); - return; - } - - let source_cell_lines = cell_code.split('\n'); - - let { lines, foreign_document_map, skip_inspect } = this.prepare_code_block( - block, - editor_shift - ); - - for (let i = 0; i < lines.length; i++) { - this.virtual_lines.set(this.last_virtual_line + i, { - skip_inspect: skip_inspect[i], - editor: ce_editor, - // TODO this is incorrect, wont work if something was extracted - source_line: this.last_source_line + i - }); - } - for (let i = 0; i < source_cell_lines.length; i++) { - this.source_lines.set(this.last_source_line + i, { - editor_line: i, - editor_shift: { - line: editor_shift.line - (virtual_shift?.line || 0), - column: - i === 0 ? editor_shift.column - (virtual_shift?.column || 0) : 0 - }, - // TODO: move those to a new abstraction layer (DocumentBlock class) - editor: ce_editor, - foreign_documents_map: foreign_document_map, - // TODO this is incorrect, wont work if something was extracted - virtual_line: this.last_virtual_line + i - }); - } - - this.last_virtual_line += lines.length; - - // one empty line is necessary to separate code blocks, next 'n' lines are to silence linters; - // the final cell does not get the additional lines (thanks to the use of join, see below) - this.line_blocks.push(lines.join('\n') + '\n'); - - // adding the virtual lines for the blank lines - for (let i = 0; i < this.blank_lines_between_cells; i++) { - this.virtual_lines.set(this.last_virtual_line + i, { - skip_inspect: [this.id_path], - editor: ce_editor, - source_line: null - }); - } - - this.last_virtual_line += this.blank_lines_between_cells; - this.last_source_line += source_cell_lines.length; - } - - get value() { - let lines_padding = '\n'.repeat(this.blank_lines_between_cells); - return this.line_blocks.join(lines_padding); - } - - get last_line() { - const lines_in_last_block = - this.line_blocks[this.line_blocks.length - 1].split('\n'); - return lines_in_last_block[lines_in_last_block.length - 1]; - } - - close_expired_documents() { - for (let document of this.unused_documents.values()) { - document.remaining_lifetime -= 1; - if (document.remaining_lifetime <= 0) { - this.close_foreign(document); - } - } - } - - close_foreign(document: VirtualDocument) { - console.log('LSP: closing document', document); - this.foreign_document_closed.emit({ - foreign_document: document, - parent_host: this - }); - // remove it from foreign documents list - this.foreign_documents.delete(document.virtual_id); - // and delete the documents within it - document.close_all_foreign_documents(); - - document.foreign_document_closed.disconnect( - this.forward_closed_signal, - this - ); - document.foreign_document_opened.disconnect( - this.forward_opened_signal, - this - ); - } - - close_all_foreign_documents() { - for (let document of this.foreign_documents.values()) { - this.close_foreign(document); + skipInspect = result.skipInspect.map(skip => (skip ? [this.idPath] : [])); } - } - get virtual_id(): VirtualDocument.virtual_id { - // for easier debugging, the language information is included in the ID: - return this.standalone - ? this.instance_id + '(' + this.language + ')' - : this.language; - } - - get ancestry(): Array { - if (!this.parent) { - return [this]; - } - return this.parent.ancestry.concat([this]); - } - - get id_path(): VirtualDocument.id_path { - if (!this.parent) { - return this.virtual_id; - } - return this.parent.id_path + '-' + this.virtual_id; - } - - get uri(): VirtualDocument.uri { - const encodedPath = encodeURI(this.path); - if (!this.parent) { - return encodedPath; - } - return encodedPath + '.' + this.id_path + '.' + this.file_extension; - } - - transform_source_to_editor(pos: ISourcePosition): IEditorPosition { - let source_line = this.source_lines.get(pos.line)!; - let editor_line = source_line.editor_line; - let editor_shift = source_line.editor_shift; - return { - // only shift column in the line beginning the virtual document (first list of the editor in cell magics, but might be any line of editor in line magics!) - ch: pos.ch + (editor_line === 0 ? editor_shift.column : 0), - line: editor_line + editor_shift.line - // TODO or: - // line: pos.line + editor_shift.line - this.first_line_of_the_block(editor) - } as IEditorPosition; + return { lines, foreignDocumentsMap, skipInspect }; } /** - Can be null because some lines are added as padding/anchors - to the virtual document and those do not exist in the source document - and thus they are absent in the editor. - */ - transform_virtual_to_editor( - virtual_position: IVirtualPosition - ): IEditorPosition | null { - let source_position = this.transform_virtual_to_source(virtual_position); - if (source_position == null) { - return null; - } - return this.transform_source_to_editor(source_position); - } - - /** - Can be null because some lines are added as padding/anchors - to the virtual document and those do not exist in the source document. - */ - transform_virtual_to_source( - position: IVirtualPosition - ): ISourcePosition | null { - const line = this.virtual_lines.get(position.line)!.source_line; - if (line == null) { - return null; - } - return { - ch: position.ch, - line: line - } as ISourcePosition; - } - - get root(): VirtualDocument { - if (this.parent == null) { - return this; - } - return this.parent.root; - } - - get_editor_at_virtual_line(pos: IVirtualPosition): CodeEditor.IEditor { - let line = pos.line; - // tolerate overshot by one (the hanging blank line at the end) - if (!this.virtual_lines.has(line)) { - line -= 1; - } - return this.virtual_lines.get(line)!.editor; - } - - get_editor_at_source_line(pos: ISourcePosition): CodeEditor.IEditor { - return this.source_lines.get(pos.line)!.editor; - } - - /** - * Recursively emits changed signal from the document or any descendant foreign document. + * @experimental */ - maybe_emit_changed() { - if (this.value !== this.previous_value) { - this.changed.emit(this); - } - this.previous_value = this.value; - for (let document of this.foreign_documents.values()) { - document.maybe_emit_changed(); - } + transformVirtualToRoot(position: IVirtualPosition): IRootPosition | null { + // a method which was previously implemented in CodeMirrorIntegration + // but probably should have been in VirtualDocument all along + let editor = this.virtualLines.get(position.line)!.editor; + let editorPosition = this.transformVirtualToEditor(position); + return this.transformFromEditorToRoot(editor, editorPosition!); } -} -export namespace VirtualDocument { - /** - * Identifier composed of `virtual_id`s of a nested structure of documents, - * used to aide assignment of the connection to the virtual document - * handling specific, nested language usage; it will be appended to the file name - * when creating a connection. - */ - export type id_path = string; /** - * Instance identifier for standalone documents (snippets), or language identifier - * for documents which should be interpreted as one when stretched across cells. + * @experimental */ - export type virtual_id = string; - /** - * Identifier composed of the file path and id_path. - */ - export type uri = string; -} - -export function collect_documents( - virtual_document: VirtualDocument -): Set { - let collected = new Set(); - collected.add(virtual_document); - for (let foreign of virtual_document.foreign_documents.values()) { - let foreign_languages = collect_documents(foreign); - foreign_languages.forEach(collected.add, collected); - } - return collected; -} - -export interface IBlockAddedInfo { - virtual_document: VirtualDocument; - block: ICodeBlockOptions; -} - -export class UpdateManager { - console: ILSPLogConsole; - - /** - * Virtual documents update guard. - */ - private is_update_in_progress: boolean = false; - - private update_lock: boolean = false; - - protected isDisposed = false; - - /** - * Signal emitted by the editor that triggered the update, providing the root document of the updated documents. - */ - private document_updated: Signal; - public block_added: Signal; - update_done: Promise = new Promise(resolve => { - resolve(); - }); - update_began: Signal; - update_finished: Signal; - - constructor( - private virtual_document: VirtualDocument, - console: ILSPLogConsole - ) { - this.document_updated = new Signal(this); - this.block_added = new Signal(this); - this.update_began = new Signal(this); - this.update_finished = new Signal(this); - this.document_updated.connect(this.on_updated, this); - this.console = console || new BrowserConsole(); - } - - dispose() { - if (this.isDisposed) { - return; - } - this.document_updated.disconnect(this.on_updated, this); - } - - /** - * Once all the foreign documents were refreshed, the unused documents (and their connections) - * should be terminated if their lifetime has expired. - */ - private on_updated(manager: UpdateManager, root_document: VirtualDocument) { - try { - root_document.close_expired_documents(); - } catch (e) { - this.console.warn('Failed to close expired documents'); - } - } - - private can_update() { - return !this.isDisposed && !this.is_update_in_progress && !this.update_lock; - } - - /** - * Execute provided callback within an update-locked context, which guarantees that: - * - the previous updates must have finished before the callback call, and - * - no update will happen when executing the callback - * @param fn - the callback to execute in update lock - */ - public async with_update_lock(fn: () => void): Promise { - await until_ready(() => this.can_update(), 12, 10).then(() => { - try { - this.update_lock = true; - fn(); - } finally { - this.update_lock = false; + getForeignDocuments(editorAccessor: Document.IEditor): ForeignDocumentsMap[] { + let maps = new Set(); + for (let line of this.sourceLines.values()) { + if (line.editor === editorAccessor) { + maps.add(line.foreignDocumentsMap); } - }); - } - - /** - * Update all the virtual documents, emit documents updated with root document if succeeded, - * and resolve a void promise. The promise does not contain the text value of the root document, - * as to avoid an easy trap of ignoring the changes in the virtual documents. - */ - public async update_documents(blocks: ICodeBlockOptions[]): Promise { - let update = new Promise(async (resolve, reject) => { - // defer the update by up to 50 ms (10 retrials * 5 ms break), - // awaiting for the previous update to complete. - await until_ready(() => this.can_update(), 10, 5).then(() => { - if (this.isDisposed || !this.virtual_document) { - resolve(); - } - try { - this.is_update_in_progress = true; - this.update_began.emit(blocks); - - this.virtual_document.clear(); - - for (let code_block of blocks) { - this.block_added.emit({ - block: code_block, - virtual_document: this.virtual_document - }); - this.virtual_document.append_code_block(code_block); - } - - this.update_finished.emit(blocks); - - if (this.virtual_document) { - this.document_updated.emit(this.virtual_document); - this.virtual_document.maybe_emit_changed(); - } - - resolve(); - } catch (e) { - this.console.warn('Documents update failed:', e); - reject(e); - } finally { - this.is_update_in_progress = false; - } - }); - }); - this.update_done = update; - return update; + } + return [...maps.values()]; } } diff --git a/packages/jupyterlab-lsp/src/virtual/editor.spec.ts b/packages/jupyterlab-lsp/src/virtual/editor.spec.ts deleted file mode 100644 index e547f67de..000000000 --- a/packages/jupyterlab-lsp/src/virtual/editor.spec.ts +++ /dev/null @@ -1,142 +0,0 @@ -import { CodeEditor } from '@jupyterlab/codeeditor'; -import { PageConfig } from '@jupyterlab/coreutils'; -import { expect } from 'chai'; - -import { DocumentConnectionManager } from '../connection_manager'; -import { - FileEditorTestEnvironment, - MockLanguageServerManager, - NotebookTestEnvironment -} from '../editor_integration/testutils'; -import { RegExpForeignCodeExtractor } from '../extractors/regexp'; -import { IForeignCodeExtractorsRegistry } from '../extractors/types'; -import { IRootPosition } from '../positioning'; - -import { BrowserConsole } from './console'; -import { VirtualDocument } from './document'; - -describe('VirtualEditor', () => { - let r_line_extractor = new RegExpForeignCodeExtractor({ - language: 'R', - pattern: '(^|\n)%R (.*)\n?', - foreign_capture_groups: [2], - is_standalone: false, - file_extension: 'R' - }); - - PageConfig.setOption('rootUri', '/home/username/project'); - PageConfig.setOption( - 'virtualDocumentsUri', - '/home/username/project/.virtual_documents' - ); - - const LANGSERVER_MANAGER = new MockLanguageServerManager({ - console: new BrowserConsole() - }); - const CONNECTION_MANAGER = new DocumentConnectionManager({ - language_server_manager: LANGSERVER_MANAGER, - console: new BrowserConsole() - }); - - const DEBUG = false; - - if (DEBUG) { - console.log(CONNECTION_MANAGER); - } - - let notebook_env: NotebookTestEnvironment; - let file_editor_env: FileEditorTestEnvironment; - - const options: Partial = { - foreign_code_extractors: { - python: [r_line_extractor] - } as IForeignCodeExtractorsRegistry - }; - - beforeAll(() => { - notebook_env = new NotebookTestEnvironment(options); - file_editor_env = new FileEditorTestEnvironment(options); - }); - - describe('#has_lsp_supported', () => { - it('gets passed on to the virtual document & used for connection uri base', () => { - const rootUri = PageConfig.getOption('rootUri'); - const virtualDocumentsUri = PageConfig.getOption('virtualDocumentsUri'); - expect(rootUri).to.be.not.equal(virtualDocumentsUri); - - let document = notebook_env.virtual_editor.virtual_document; - let uris = DocumentConnectionManager.solve_uris(document, 'python'); - expect(uris.base.startsWith(virtualDocumentsUri)).to.be.equal(true); - - document = file_editor_env.virtual_editor.virtual_document; - uris = DocumentConnectionManager.solve_uris(document, 'python'); - expect(uris.base.startsWith(virtualDocumentsUri)).to.be.equal(false); - }); - }); - - describe('#document_at_root_position()', () => { - it('returns correct document', () => { - let ce_editor_for_cell_1 = {} as CodeEditor.IEditor; - let ce_editor_for_cell_2 = {} as CodeEditor.IEditor; - let editor = notebook_env.virtual_editor; - - editor.virtual_document.append_code_block({ - value: 'test line in Python 1\n%R test line in R 1', - ce_editor: ce_editor_for_cell_1 - }); - editor.virtual_document.append_code_block({ - value: 'test line in Python 2\n%R test line in R 2', - ce_editor: ce_editor_for_cell_2 - }); - - // The first (Python) line in the first block - let root_position = { line: 0, ch: 0 } as IRootPosition; - let document = editor.document_at_root_position(root_position); - let virtual_position = - editor.root_position_to_virtual_position(root_position); - expect(document).to.equal(editor.virtual_document); - expect(virtual_position.line).to.equal(0); - - // The second (Python | R) line in the first block - Python fragment - root_position = { line: 1, ch: 0 } as IRootPosition; - document = editor.document_at_root_position(root_position); - virtual_position = - editor.root_position_to_virtual_position(root_position); - expect(document).to.equal(editor.virtual_document); - expect(virtual_position.line).to.equal(1); - - // The second (Python | R) line in the first block - R fragment - root_position = { line: 1, ch: 3 } as IRootPosition; - document = editor.document_at_root_position(root_position); - virtual_position = - editor.root_position_to_virtual_position(root_position); - expect(document).to.not.equal(editor.virtual_document); - expect(virtual_position.line).to.equal(0); - - // The first (Python) line in the second block - root_position = { line: 2, ch: 0 } as IRootPosition; - document = editor.document_at_root_position(root_position); - virtual_position = - editor.root_position_to_virtual_position(root_position); - expect(document).to.equal(editor.virtual_document); - expect(virtual_position.line).to.equal(2 + 2); - - // The second (Python | R) line in the second block - Python fragment - root_position = { line: 3, ch: 0 } as IRootPosition; - document = editor.document_at_root_position(root_position); - virtual_position = - editor.root_position_to_virtual_position(root_position); - expect(document).to.equal(editor.virtual_document); - expect(virtual_position.line).to.equal(2 + 2 + 1); - - // The second (Python | R) line in the second block - R fragment - root_position = { line: 3, ch: 3 } as IRootPosition; - document = editor.document_at_root_position(root_position); - virtual_position = - editor.root_position_to_virtual_position(root_position); - expect(document).to.not.equal(editor.virtual_document); - // 0 + 1 (next line) + 2 (between-block spacing) - expect(virtual_position.line).to.equal(1 + 2); - }); - }); -}); diff --git a/packages/jupyterlab-lsp/src/virtual/editor.ts b/packages/jupyterlab-lsp/src/virtual/editor.ts deleted file mode 100644 index 6d4d9863d..000000000 --- a/packages/jupyterlab-lsp/src/virtual/editor.ts +++ /dev/null @@ -1,181 +0,0 @@ -import { JupyterFrontEndPlugin } from '@jupyterlab/application'; -import { CodeEditor } from '@jupyterlab/codeeditor'; -import { IDocumentWidget } from '@jupyterlab/docregistry'; -import { Signal } from '@lumino/signaling'; - -import { WidgetAdapter } from '../adapters/adapter'; -import { IEditorName } from '../feature'; -import { - IEditorPosition, - IRootPosition, - ISourcePosition, - IVirtualPosition -} from '../positioning'; -import { - ILSPVirtualEditorManager, - IVirtualEditorType, - PLUGIN_ID -} from '../tokens'; - -import { VirtualDocument } from './document'; - -import IEditor = CodeEditor.IEditor; - -export interface IWindowCoordinates { - /** - * The number of pixels away from the left edge of the window. - */ - left: number; - /** - * The number of pixels away from the top edge of the window. - */ - top: number; -} - -/** - * This is based on CodeMirror.EditorChange - */ -export interface IEditorChange { - /** Position (in the pre-change coordinate system) where the change started. */ - from: ISourcePosition; - /** Position (in the pre-change coordinate system) where the change ended. */ - to: ISourcePosition; - /** Array of strings representing the text that replaced the changed range (split by line). */ - text: string[]; - /** Text that used to be between from and to, which is overwritten by this change. */ - removed?: string[]; - /** String representing the origin of the change event and whether it can be merged with history */ - origin?: string; -} - -/** - * A virtual editor represents an abstraction of a single editor, - * even when it aggregates multiple underlying editors. It is not - * concerned with how the editors are presented (e.g. as cells or - * tiles) but should be able to pass on the responsibilities to the - * appropriate editor transparently, so that the features do not - * need to know about existence of multiple editors. - */ -export interface IVirtualEditor { - /** - * The root (outermost, with no parent) virtual document - * representing the underlying document. While it is NOT - * being created by the virtual editor (but passed into - * the constructor), the instance stored there is the - * reference for all other objects. - */ - virtual_document: VirtualDocument; - /** - * A signal which will be emitted after each change in the - * value of any of the underlying editors - */ - change: Signal, IEditorChange>; - - /** - * The editor name that will be used by feature-integration layer - * to identify this virtual editor. - */ - readonly editor_name: IEditorName; - - /** - * Remove all handlers, signal connections and dispose any other objects - * created by the virtual editor. - */ - dispose(): void; - - /** - * Get the innermost virtual document present at given root position. - */ - document_at_root_position(position: IRootPosition): VirtualDocument; - - /** - * Transform a root position to a position relative to the innermost virtual document - * corresponding to the same character. - */ - root_position_to_virtual_position(position: IRootPosition): IVirtualPosition; - - /** - * Retrieve a position the text cursor would have if it - * was placed at given window coordinates (screen pixels). - */ - window_coords_to_root_position( - coordinates: IWindowCoordinates - ): IRootPosition | null; - - /** - * Get the token at given root source position. - */ - get_token_at(position: IRootPosition): CodeEditor.IToken; - - /** - * Get the position of the active text cursor in terms of the - * root position. If each editor has a separate cursor, - * the cursor of the active editor should be returned. - */ - get_cursor_position(): IRootPosition; - - /** - * Transform the position within an editor to a root position. - */ - transform_from_editor_to_root( - ce_editor: T, - position: IEditorPosition - ): IRootPosition | null; - - /** - * Get the text from the model of the editor. - */ - get_editor_value(editor: T): string; -} - -export namespace IVirtualEditor { - export interface IOptions { - adapter: WidgetAdapter; - virtual_document: VirtualDocument; - } - - export type Constructor = { - new (options: IVirtualEditor.IOptions): IVirtualEditor; - }; -} - -export class VirtualEditorManager implements ILSPVirtualEditorManager { - private readonly editorTypes: IVirtualEditorType[]; - - constructor() { - this.editorTypes = []; - } - - registerEditorType(options: IVirtualEditorType) { - this.editorTypes.push(options); - } - - findBestImplementation( - editors: CodeEditor.IEditor[] - ): IVirtualEditorType | null { - // for now, we check if all editors are of the same type, - // but it could be good enough if majority of the editors - // had the requested type - for (let editorType of this.editorTypes) { - if (editors.every(editor => editor instanceof editorType.supports)) { - return editorType; - } - } - console.warn( - 'Cold not find a VirtualEditor suitable for the provided set of editors:', - editors - ); - return null; - } -} - -export const VIRTUAL_EDITOR_MANAGER: JupyterFrontEndPlugin = - { - id: PLUGIN_ID + ':ILSPVirtualEditorManager', - requires: [], - activate: app => { - return new VirtualEditorManager(); - }, - provides: ILSPVirtualEditorManager, - autoStart: true - }; diff --git a/packages/jupyterlab-lsp/style/highlight.css b/packages/jupyterlab-lsp/style/highlight.css index 40b26cdb4..2b5dd5e2c 100644 --- a/packages/jupyterlab-lsp/style/highlight.css +++ b/packages/jupyterlab-lsp/style/highlight.css @@ -25,49 +25,6 @@ text-decoration: line-through !important; } -.cm-lsp-diagnostic-Error { - /* - "wavy" would be ideal, but there seems to be a bug in Chrome which makes it - fail to render the last character see: - https://stackoverflow.com/questions/57559588/how-to-make-the-wavy-underline-extend-cover-all-the-characters-in-chrome - an alternative would be to use background image trick to simulate the underline - */ - - text-decoration-style: var( - --jp-editor-mirror-lsp-diagnostic-decoration-style - ); - text-decoration-color: var( - --jp-editor-mirror-lsp-diagnostic-error-decoration-color - ); -} - -.cm-lsp-diagnostic-Warning { - text-decoration-style: var( - --jp-editor-mirror-lsp-diagnostic-decoration-style - ); - text-decoration-color: var( - --jp-editor-mirror-lsp-diagnostic-warning-decoration-color - ); -} - -.cm-lsp-diagnostic-Information { - text-decoration-style: var( - --jp-editor-mirror-lsp-diagnostic-decoration-style - ); - text-decoration-color: var( - --jp-editor-mirror-lsp-diagnostic-information-decoration-color - ); -} - -.cm-lsp-diagnostic-Hint { - text-decoration-style: var( - --jp-editor-mirror-lsp-diagnostic-decoration-style - ); - text-decoration-color: var( - --jp-editor-mirror-lsp-diagnostic-hint-decoration-color - ); -} - /* hover */ .cm-lsp-hover-available { text-decoration: var(--jp-editor-mirror-lsp-hover-decoration-style); @@ -77,6 +34,19 @@ } /* highlight */ -.cm-lsp-highlight { +.cm-lsp-highlight-Read { + /* highlight on places where variable is accessed, e.g. `print(var)` */ + background-color: var(--jp-editor-mirror-lsp-highlight-background-color); + outline: 1px dashed var(--jp-editor-mirror-lsp-highlight-border-color); +} + +.cm-lsp-highlight-Write { + /* highlight on places where variable is defined, e.g. `var = 1` */ + background-color: var(--jp-editor-mirror-lsp-highlight-background-color); + outline: 1px solid var(--jp-editor-mirror-lsp-highlight-border-color); +} + +.cm-lsp-highlight-Text { + /* highlight on places where variable was matched based on text rather than semantics */ background-color: var(--jp-editor-mirror-lsp-highlight-background-color); } diff --git a/packages/jupyterlab-lsp/style/statusbar.css b/packages/jupyterlab-lsp/style/statusbar.css index 0a30acf26..fbdab6c4e 100644 --- a/packages/jupyterlab-lsp/style/statusbar.css +++ b/packages/jupyterlab-lsp/style/statusbar.css @@ -122,7 +122,7 @@ body[data-jp-theme-light='false'] .lsp-status-icon.ready svg g { fill: var(--jp-success-color1); } -.lsp-statusbar-item.jp-mod-selected .jp-icon-selectable[fill] { +.lsp-statusbar-item.jp-mod-clicked .jp-icon-selectable[fill] { fill: #fff; } diff --git a/packages/jupyterlab-lsp/style/variables/base.css b/packages/jupyterlab-lsp/style/variables/base.css index 94c0fe787..7b0ceb37a 100644 --- a/packages/jupyterlab-lsp/style/variables/base.css +++ b/packages/jupyterlab-lsp/style/variables/base.css @@ -1,6 +1,7 @@ :root { /* highlight */ --jp-editor-mirror-lsp-highlight-background-color: var(--jp-layout-color2); + --jp-editor-mirror-lsp-highlight-border-color: var(--jp-layout-color3); /* diagnostics */ --jp-editor-mirror-lsp-diagnostic-decoration-style: dashed; --jp-editor-mirror-lsp-diagnostic-error-decoration-color: var( diff --git a/packages/jupyterlab-lsp/tsconfig.json b/packages/jupyterlab-lsp/tsconfig.json index eae0e7ebe..12b769f6c 100644 --- a/packages/jupyterlab-lsp/tsconfig.json +++ b/packages/jupyterlab-lsp/tsconfig.json @@ -19,9 +19,6 @@ }, { "path": "../theme-material" - }, - { - "path": "../lsp-ws-connection" } ] } diff --git a/packages/lsp-ws-connection/LICENSE b/packages/lsp-ws-connection/LICENSE deleted file mode 100644 index fad08338d..000000000 --- a/packages/lsp-ws-connection/LICENSE +++ /dev/null @@ -1,46 +0,0 @@ -BSD 3-Clause License - -Copyright (c) 2022, jupyter-lsp contributors -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - -* Redistributions of source code must retain the above copyright notice, this - list of conditions and the following disclaimer. - -* Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - -* Neither the name of the copyright holder nor the names of its - contributors may be used to endorse or promote products derived from - this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -Portions of this code derived from: - -ISC License (ISC) -Copyright 2019 William Conlon - -Permission to use, copy, modify, and/or distribute this software for any -purpose with or without fee is hereby granted, provided that the above -copyright notice and this permission notice appear in all copies. - -THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES -WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY -SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER -RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, -NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE -USE OR PERFORMANCE OF THIS SOFTWARE. diff --git a/packages/lsp-ws-connection/README.md b/packages/lsp-ws-connection/README.md deleted file mode 100644 index b19326adc..000000000 --- a/packages/lsp-ws-connection/README.md +++ /dev/null @@ -1,12 +0,0 @@ -# lsp-ws-connection - -> This is a fork of [lsp-editor-adapter](https://github.com/wylieconlon/lsp-editor-adapter), with -> a number of modifications made to make it more easily integrated into [jupyterlab-lsp](https://github.com/jupyter-lsp/jupyterlab-lsp) - -## Installation - -> TBD - -## Developing - -This library is built and tested as part of the [`jupyterlab-lsp` monorepo](https://github.com/jupyter-lsp/jupyterlab-lsp). diff --git a/packages/lsp-ws-connection/package.json b/packages/lsp-ws-connection/package.json deleted file mode 100644 index ad88c1ab2..000000000 --- a/packages/lsp-ws-connection/package.json +++ /dev/null @@ -1,53 +0,0 @@ -{ - "name": "lsp-ws-connection", - "version": "0.7.1", - "description": "Utility for adapting editors to language server protocol", - "main": "dist/index.js", - "module": "dist/index.js", - "files": [ - "dist", - "lib", - "LICENSE" - ], - "types": "lib/index.d.ts", - "scripts": { - "build": "webpack", - "watch": "webpack --watch", - "bundle": "npm pack .", - "clean": "rimraf lib dist" - }, - "author": "Wylie Conlon", - "maintainers": [ - "Michał Krassowski" - ], - "license": "ISC", - "keywords": [ - "lsp", - "languageserver" - ], - "homepage": "https://github.com/jupyter-lsp/jupyterlab-lsp/tree/master/packages/lsp-ws-connection", - "repository": "github:jupyter-lsp/jupyterlab-lsp", - "dependencies": { - "vscode-jsonrpc": "^6.0.0", - "vscode-languageserver-protocol": "^3.16.0", - "vscode-languageserver-types": "^3.16.0", - "vscode-ws-jsonrpc": "~1.0.2" - }, - "devDependencies": { - "@types/chai": "^4.1.7", - "@types/mocha": "^5.2.7", - "@types/node": "^12.0.7", - "@types/sinon": "^7.0.12", - "buffer": "^6.0.3", - "chai": "^4.2.0", - "file-loader": "^6.2.0", - "mocha": "^6.1.4", - "rimraf": "^3.0.2", - "sinon": "^7.3.2", - "stream-browserify": "^3.0.0", - "setimmediate": "^1.0.5", - "typescript": "~4.9.4", - "webpack-cli": "^4.1.0", - "webpack": "^5.54.0" - } -} diff --git a/packages/lsp-ws-connection/src/index.ts b/packages/lsp-ws-connection/src/index.ts deleted file mode 100644 index 584fdfa0b..000000000 --- a/packages/lsp-ws-connection/src/index.ts +++ /dev/null @@ -1,2 +0,0 @@ -export * from './ws-connection'; -export * from './types'; diff --git a/packages/lsp-ws-connection/src/server-capability-registration.ts b/packages/lsp-ws-connection/src/server-capability-registration.ts deleted file mode 100644 index 765612cc3..000000000 --- a/packages/lsp-ws-connection/src/server-capability-registration.ts +++ /dev/null @@ -1,52 +0,0 @@ -import { - Registration, - ServerCapabilities, - Unregistration -} from 'vscode-languageserver-protocol'; - -interface IFlexibleServerCapabilities extends ServerCapabilities { - [key: string]: any; -} - -function registerServerCapability( - serverCapabilities: ServerCapabilities, - registration: Registration -): ServerCapabilities | null { - const serverCapabilitiesCopy = JSON.parse( - JSON.stringify(serverCapabilities) - ) as IFlexibleServerCapabilities; - const { method, registerOptions } = registration; - const providerName = method.substring(13) + 'Provider'; - - if (providerName) { - if (!registerOptions) { - serverCapabilitiesCopy[providerName] = true; - } else { - serverCapabilitiesCopy[providerName] = JSON.parse( - JSON.stringify(registerOptions) - ); - } - } else { - console.warn('Could not register server capability.', registration); - return null; - } - - return serverCapabilitiesCopy; -} - -function unregisterServerCapability( - serverCapabilities: ServerCapabilities, - unregistration: Unregistration -): ServerCapabilities { - const serverCapabilitiesCopy = JSON.parse( - JSON.stringify(serverCapabilities) - ) as IFlexibleServerCapabilities; - const { method } = unregistration; - const providerName = method.substring(13) + 'Provider'; - - delete serverCapabilitiesCopy[providerName]; - - return serverCapabilitiesCopy; -} - -export { registerServerCapability, unregisterServerCapability }; diff --git a/packages/lsp-ws-connection/src/test/connection.test.ts b/packages/lsp-ws-connection/src/test/connection.test.ts deleted file mode 100644 index 91c2beea4..000000000 --- a/packages/lsp-ws-connection/src/test/connection.test.ts +++ /dev/null @@ -1,503 +0,0 @@ -import { expect } from 'chai'; -import * as sinon from 'sinon'; -import * as lsProtocol from 'vscode-languageserver-protocol'; - -import { LspWsConnection } from '..'; - -const serverUri = 'ws://localhost:8080'; - -type Listener = (args: any) => void; - -interface IListeners { - [type: string]: Listener[]; -} - -const mockInfo = { - uri: 'file://' + __dirname, - version: 0, - languageId: 'plaintext', - text: '' -}; - -// There is a library that can be used to mock WebSockets, but the API surface tested here is small -// enough that it is not necessary to use the library. This mock is a simple EventEmitter -class MockSocket implements EventTarget { - set onclose(handler: (ev: CloseEvent) => any) { - if (handler) { - this.listeners.close = [handler]; - } - } - set onerror(handler: (ev: Event) => any) { - if (handler) { - this.listeners.error = [handler]; - } - } - set onmessage(handler: (ev: MessageEvent) => any) { - if (handler) { - this.listeners.message = [handler]; - } - } - set onopen(handler: (ev: Event) => any) { - if (handler) { - this.listeners.open = [handler]; - } - } - public readonly CLOSED: number; - public readonly CLOSING: number; - public readonly CONNECTING: number; - public readonly OPEN: number; - public binaryType: BinaryType; - public readonly bufferedAmount: number; - public readonly extensions: string; - public readonly protocol: string; - public readonly readyState: number; - public readonly url: string; - - public listeners: IListeners = {}; - - /** - * Mocks sending data to the server. The fake implementation needs to respond with some data - */ - public send = sinon.stub(); - public addEventListener = sinon - .mock() - .callsFake((type: keyof WebSocketEventMap, listener: Listener) => { - const listeners: Listener[] = this.listeners[type]; - if (!listeners) { - this.listeners[type] = []; - } - listeners.push(listener); - }); - public removeEventListener = sinon - .mock() - .callsFake((type: keyof WebSocketEventMap, listener: Listener) => { - const index = this.listeners[type].indexOf(l => l === listener); - if (index > -1) { - this.listeners[type].splice(index, 1); - } - }); - public close = sinon.stub(); - - /** - * Sends a synthetic event to the client code, for example to imitate a server response - */ - public dispatchEvent = (event: Event): boolean => { - const listeners: Listener[] = this.listeners[event.type]; - if (!listeners) { - return false; - } - listeners.forEach(listener => listener.call(null, event)); - return true; - }; - - constructor(url: string, protocols?: string[]) { - // nothing here yet - } -} - -describe('LspWsConnection', () => { - let connection: LspWsConnection; - let mockSocket: MockSocket; - - beforeEach(() => { - connection = new LspWsConnection({ - languageId: 'plaintext', - rootUri: 'file://' + __dirname, - serverUri - }); - mockSocket = new MockSocket('ws://localhost:8080'); - }); - - afterEach(() => { - sinon.restore(); - }); - - it('initializes the connection in the right order', done => { - // 1. It sends initialize and expects a response with capabilities - mockSocket.send.onFirstCall().callsFake(str => { - const message = JSON.parse(str); - expect(message.method).equal('initialize'); - - // This is an actual response from the html language server - const data = JSON.stringify({ - jsonrpc: '2.0', - id: message.id, - result: { - capabilities: { - textDocumentSync: 1, - hoverProvider: true, - documentHighlightProvider: true, - documentRangeFormattingProvider: false, - documentLinkProvider: { - resolveProvider: false - }, - documentSymbolProvider: true, - definitionProvider: true, - signatureHelpProvider: { - triggerCharacters: ['('] - }, - typeDefinitionProvider: true, - referencesProvider: true, - colorProvider: {}, - foldingRangeProvider: true, - workspaceSymbolProvider: true, - completionProvider: { - resolveProvider: true, - triggerCharacters: ['.'] - }, - codeActionProvider: true, - renameProvider: true, - executeCommandProvider: { - commands: [] - } - } - } as lsProtocol.InitializeResult - }); - - mockSocket.dispatchEvent(new MessageEvent('message', { data })); - }); - - // 2. After receiving capabilities from the server, it sends more configuration options - mockSocket.send.onSecondCall().callsFake(str => { - const message = JSON.parse(str); - expect(message.method).equal('initialized'); - - setTimeout(() => { - const mock = mockSocket.send; - expect(mock.callCount).equal(3); - - // 3 is sent after initialization - expect(JSON.parse(mock.getCall(2).args[0]).method).equal( - 'workspace/didChangeConfiguration' - ); - - done(); - }, 0); - }); - - connection.connect(mockSocket); - mockSocket.dispatchEvent(new Event('open')); - - // Send the messages - expect(mockSocket.send.callCount).equal(1); - expect(JSON.parse(mockSocket.send.firstCall.args[0]).method).equal( - 'initialize' - ); - }); - - describe('register/unregister capability', () => { - beforeEach(() => { - mockSocket.send.onFirstCall().callsFake(str => { - const data = JSON.stringify({ - jsonrpc: '2.0', - id: 0, - result: { - capabilities: { - definitionProvider: true - } - } as lsProtocol.InitializeResult - }); - - mockSocket.dispatchEvent(new MessageEvent('message', { data })); - }); - }); - - it('registers a new server capability', done => { - mockSocket.send.onSecondCall().callsFake(() => { - expect(connection.isDefinitionSupported()).equal(true); - expect(connection.isImplementationSupported()).equal(false); - - const data = JSON.stringify({ - jsonrpc: '2.0', - id: 1, - method: 'client/registerCapability', - params: { - registrations: [ - { - id: 'id', - method: 'textDocument/implementation' - } as lsProtocol.Registration - ] - } as lsProtocol.RegistrationParams - }); - - mockSocket.dispatchEvent(new MessageEvent('message', { data })); - - setTimeout(() => { - expect(connection.isDefinitionSupported()).equal(true); - expect(connection.isImplementationSupported()).equal(true); - done(); - }, 0); - }); - - connection.connect(mockSocket); - mockSocket.dispatchEvent(new Event('open')); - }); - - it('unregisters a server capability', done => { - mockSocket.send.onSecondCall().callsFake(() => { - expect(connection.isDefinitionSupported()).equal(true); - - const data = JSON.stringify({ - jsonrpc: '2.0', - id: 1, - method: 'client/unregisterCapability', - params: { - unregisterations: [ - { - id: 'id', - method: 'textDocument/definition' - } - ] - } as lsProtocol.UnregistrationParams - }); - - mockSocket.dispatchEvent(new MessageEvent('message', { data })); - - setTimeout(() => { - expect(connection.isDefinitionSupported()).equal(false); - done(); - }); - }); - - connection.connect(mockSocket); - mockSocket.dispatchEvent(new Event('open')); - }); - }); - - describe('hover', () => { - let hoverResponse: lsProtocol.Hover; - - beforeEach(() => { - // Fake response just includes the hover provider - mockSocket.send.onFirstCall().callsFake(str => { - const data = JSON.stringify({ - jsonrpc: '2.0', - id: 0, - result: { - capabilities: { - hoverProvider: true - } - } as lsProtocol.InitializeResult - }); - - mockSocket.dispatchEvent(new MessageEvent('message', { data })); - }); - - // 2. After receiving capabilities from the server, we will send a hover - mockSocket.send.onSecondCall().callsFake(str => { - void connection.getHoverTooltip( - { - line: 1, - ch: 0 - }, - mockInfo - ); - }); - }); - - it('emits a null hover event', done => { - // 3. Fake a server response for the hover - mockSocket.send.onThirdCall().callsFake(str => { - const message = JSON.parse(str); - - const data = JSON.stringify({ - jsonrpc: '2.0', - id: message.id, - result: null - }); - - mockSocket.dispatchEvent(new MessageEvent('message', { data })); - }); - - connection.connect(mockSocket); - mockSocket.dispatchEvent(new Event('open')); - - connection.on('hover', response => { - expect(response).to.be.a('null'); - done(); - }); - }); - - it('emits a complete hover event', done => { - hoverResponse = { - contents: 'Details of hover', - range: { - start: { - line: 1, - character: 0 - }, - end: { - line: 2, - character: 0 - } - } - } as lsProtocol.Hover; - - // 3. Fake a server response for the hover - mockSocket.send.onThirdCall().callsFake(str => { - const message = JSON.parse(str); - - const data = JSON.stringify({ - jsonrpc: '2.0', - id: message.id, - result: hoverResponse - }); - - mockSocket.dispatchEvent(new MessageEvent('message', { data })); - }); - - connection.connect(mockSocket); - mockSocket.dispatchEvent(new Event('open')); - - connection.on('hover', response => { - expect(response).to.deep.equal(hoverResponse); - done(); - }); - }); - }); - - describe('completion', () => { - let completionResponse: lsProtocol.CompletionList; - - beforeEach(() => { - // Fake response just includes the hover provider - mockSocket.send.onFirstCall().callsFake(str => { - const data = JSON.stringify({ - jsonrpc: '2.0', - id: 0, - result: { - capabilities: { - completionProvider: { - triggerCharacters: ['.'], - resolveProvider: false - } - } - } as lsProtocol.InitializeResult - }); - - mockSocket.dispatchEvent(new MessageEvent('message', { data })); - }); - - // 2. After receiving capabilities from the server, we will send a completion - mockSocket.send.onSecondCall().callsFake(str => { - void connection.getCompletion( - { - line: 1, - ch: 8 - }, - { - start: { - line: 1, - ch: 8 - }, - end: { - line: 1, - ch: 9 - }, - text: '.' - }, - mockInfo - ); - }); - }); - - it('emits a null completion event', done => { - // 3. Fake a server response for the hover - mockSocket.send.onThirdCall().callsFake(str => { - const message = JSON.parse(str); - - const data = JSON.stringify({ - jsonrpc: '2.0', - id: message.id, - result: null - }); - - mockSocket.dispatchEvent(new MessageEvent('message', { data })); - }); - - connection.connect(mockSocket); - mockSocket.dispatchEvent(new Event('open')); - - connection.on('completion', response => { - expect(response).to.be.a('null'); - done(); - }); - }); - - it('emits a completion event using CompletionList', done => { - completionResponse = { - isIncomplete: false, - items: [ - { - label: 'log' - }, - { - label: 'info' - } - ] - } as lsProtocol.CompletionList; - - // 3. Fake a server response for the hover - mockSocket.send.onThirdCall().callsFake(str => { - const message = JSON.parse(str); - - const data = JSON.stringify({ - jsonrpc: '2.0', - id: message.id, - result: completionResponse - }); - - mockSocket.dispatchEvent(new MessageEvent('message', { data })); - }); - - connection.connect(mockSocket); - mockSocket.dispatchEvent(new Event('open')); - - connection.on('completion', response => { - expect(response).to.deep.equal(completionResponse.items); - done(); - }); - }); - - it('emits a completion event of CompletionItem[]', done => { - const completion = [ - { - label: 'log' - }, - { - label: 'info' - } - ] as lsProtocol.CompletionItem[]; - - // 3. Fake a server response for the hover - mockSocket.send.onThirdCall().callsFake(str => { - const message = JSON.parse(str); - - const data = JSON.stringify({ - jsonrpc: '2.0', - id: message.id, - result: completion - }); - - mockSocket.dispatchEvent(new MessageEvent('message', { data })); - }); - - connection.connect(mockSocket); - mockSocket.dispatchEvent(new Event('open')); - - connection.on('completion', response => { - expect(response).to.deep.equal(completion); - done(); - }); - }); - }); - - it('closes the socket connection and stops sending messages', () => { - connection.connect(mockSocket); - connection.close(); - - connection.sendChange(mockInfo); - expect(mockSocket.send.callCount).equal(0); - }); -}); diff --git a/packages/lsp-ws-connection/src/test/mock-connection.ts b/packages/lsp-ws-connection/src/test/mock-connection.ts deleted file mode 100644 index 4813eaba4..000000000 --- a/packages/lsp-ws-connection/src/test/mock-connection.ts +++ /dev/null @@ -1,79 +0,0 @@ -import * as sinon from 'sinon'; - -import { ILspConnection } from '..'; - -interface IListeners { - [key: string]: Array<(arg: any) => void>; -} - -// There is a library that can be used to mock WebSockets, but the API surface tested here is small -// enough that it is not necessary to use the library. This mock is a simple EventEmitter -export class MockConnection implements ILspConnection { - public listeners: IListeners = {}; - - /** - * Sends a synthetic event to the client code, for example to imitate a server response - */ - public dispatchEvent = (event: MessageEvent): boolean => { - const listeners = this.listeners[event.type]; - if (!listeners) { - return false; - } - listeners.forEach(listener => listener.call(null, event.data)); - return true; - }; - - public sendInitialize = sinon.stub(); - public sendChange = sinon.stub(); - public sendOpen = sinon.stub(); - public getHoverTooltip = sinon.stub(); - public getCompletion = sinon.stub(); - public getDetailedCompletion = sinon.stub(); - public getSignatureHelp = sinon.stub(); - public getDocumentHighlights = sinon.stub(); - public getDefinition = sinon.stub(); - public getTypeDefinition = sinon.stub(); - public getImplementation = sinon.stub(); - public getReferences = sinon.stub(); - public getDocumentUri = sinon.stub(); - public isDefinitionSupported = sinon.stub(); - public isTypeDefinitionSupported = sinon.stub(); - public isImplementationSupported = sinon.stub(); - public isReferencesSupported = sinon.stub(); - public close = sinon.stub(); - - public completionCharacters: string[]; - public signatureCharacters: string[]; - - constructor() { - this.completionCharacters = ['.', ',']; - this.signatureCharacters = ['(']; - } - - public on(type: string, listener: (...args: any) => void) { - const listeners = this.listeners[type]; - if (!listeners) { - this.listeners[type] = []; - } - this.listeners[type].push(listener); - } - - public off(type: string, listener: (...args: any) => void) { - const listeners = this.listeners[type]; - if (!listeners) { - return; - } - - const index = listeners.findIndex(l => l === listener); - if (index > -1) { - this.listeners[type].splice(index); - } - } - - public getLanguageCompletionCharacters() { - return this.completionCharacters; - } - public getLanguageSignatureCharacters() { - return this.signatureCharacters; - } -} diff --git a/packages/lsp-ws-connection/src/test/server-capability-registration.test.ts b/packages/lsp-ws-connection/src/test/server-capability-registration.test.ts deleted file mode 100644 index 9df18ef58..000000000 --- a/packages/lsp-ws-connection/src/test/server-capability-registration.test.ts +++ /dev/null @@ -1,100 +0,0 @@ -import { expect } from 'chai'; -import { - Registration, - ServerCapabilities, - Unregistration -} from 'vscode-languageserver-protocol'; - -import { - registerServerCapability, - unregisterServerCapability -} from '../server-capability-registration'; - -describe('ServerCapabilities client registration', () => { - const serverCapabilities = { - hoverProvider: true, - completionProvider: { - resolveProvider: true, - triggerCharacters: ['.', ','] - }, - signatureHelpProvider: { - triggerCharacters: ['.', ','] - }, - definitionProvider: true, - typeDefinitionProvider: true, - implementationProvider: true, - referencesProvider: true, - documentHighlightProvider: true, - documentSymbolProvider: true, - workspaceSymbolProvider: true, - codeActionProvider: true, - codeLensProvider: { - resolveProvider: true - }, - documentFormattingProvider: true, - documentRangeFormattingProvider: true, - documentOnTypeFormattingProvider: { - firstTriggerCharacter: '.' - }, - renameProvider: true, - documentLinkProvider: { - resolveProvider: true - }, - colorProvider: true, - foldingRangeProvider: true, - declarationProvider: true, - executeCommandProvider: { - commands: ['not', 'real', 'commands'] - } - }; - - it('registers server capabilities', () => { - Object.keys(serverCapabilities).forEach(capability => { - const capabilityOptions = (serverCapabilities as any)[capability]; - const registration = { - id: 'id', - method: getMethodFromCapability(capability) - } as Registration; - - if (typeof capabilityOptions !== 'boolean') { - registration.registerOptions = capabilityOptions; - } - - const newServerCapabilities = registerServerCapability( - {} as ServerCapabilities, - registration - ); - - if (typeof capabilityOptions === 'boolean') { - // eslint-disable-next-line jest/no-conditional-expect - expect((newServerCapabilities as any)[capability]).equal( - capabilityOptions - ); - } else { - // eslint-disable-next-line jest/no-conditional-expect - expect((newServerCapabilities as any)[capability]).to.deep.equal( - capabilityOptions - ); - } - }); - }); - - it('unregisters server capabilities', () => { - Object.keys(serverCapabilities).forEach(capability => { - const unregistration = { - id: 'some id', - method: getMethodFromCapability(capability) - } as Unregistration; - const newServerCapabilities = unregisterServerCapability( - serverCapabilities, - unregistration - ); - - expect((newServerCapabilities as any)[capability]).equal(void 0); - }); - }); -}); - -function getMethodFromCapability(capability: string): string { - return `textDocument/${capability.split('Provider')[0]}`; -} diff --git a/packages/lsp-ws-connection/src/types.ts b/packages/lsp-ws-connection/src/types.ts deleted file mode 100644 index 6bb0ff1ac..000000000 --- a/packages/lsp-ws-connection/src/types.ts +++ /dev/null @@ -1,204 +0,0 @@ -import type * as lsProtocol from 'vscode-languageserver-protocol'; - -export interface IPosition { - line: number; - ch: number; -} - -export interface ITokenInfo { - start: IPosition; - end: IPosition; - text: string; -} - -export interface IDocumentInfo { - uri: string; - version: number; - text: string; - languageId: string; -} - -export type AnyLocation = - | lsProtocol.Location - | lsProtocol.Location[] - | lsProtocol.LocationLink[] - | undefined - | null; - -export type AnyCompletion = - | lsProtocol.CompletionList - | lsProtocol.CompletionItem[]; - -export enum CompletionTriggerKind { - Invoked = 1, - TriggerCharacter = 2, - TriggerForIncompleteCompletions = 3 -} - -type ConnectionEvent = - | 'completion' - | 'completionResolved' - | 'hover' - | 'diagnostic' - | 'highlight' - | 'signature' - | 'goTo' - | 'error' - | 'logging'; - -export interface ILspConnection { - on( - event: 'completion', - callback: (items: lsProtocol.CompletionItem[]) => void - ): void; - on( - event: 'completionResolved', - callback: (item: lsProtocol.CompletionItem) => void - ): void; - on( - event: 'hover', - callback: (hover: lsProtocol.Hover, documentUri: string) => void - ): void; - on( - event: 'diagnostic', - callback: (diagnostic: lsProtocol.PublishDiagnosticsParams) => void - ): void; - on( - event: 'highlight', - callback: ( - highlights: lsProtocol.DocumentHighlight[], - documentUri: string - ) => void - ): void; - on( - event: 'signature', - callback: (signatures: lsProtocol.SignatureHelp) => void - ): void; - on( - event: 'goTo', - callback: (location: AnyLocation, documentUri: string) => void - ): void; - on( - event: 'rename', - callback: (edit: lsProtocol.WorkspaceEdit | null) => void - ): void; - on(event: 'error', callback: (error: any) => void): void; - on(event: 'logging', callback: (log: any) => void): void; - - off(event: ConnectionEvent, listener: (arg: any) => void): void; - - /** - * Close the connection - */ - close(): void; - - // This should support every method from https://microsoft.github.io/language-server-protocol/specification - /** - * The initialize request tells the server which options the client supports - */ - sendInitialize(): void; - /** - * Inform the server that the document was opened - */ - sendOpen(documentInfo: IDocumentInfo): void; - /** - * Sends the full text of the document to the server - */ - sendChange(documentInfo: IDocumentInfo): void; - /** - * Requests additional information for a particular character - */ - getHoverTooltip(position: IPosition, documentInfo: IDocumentInfo): void; - /** - * Request possible completions from the server - */ - getCompletion( - location: IPosition, - token: ITokenInfo, - documentInfo: IDocumentInfo, - emit?: boolean, - triggerCharacter?: string, - triggerKind?: lsProtocol.CompletionTriggerKind - ): void; - /** - * If the server returns incomplete information for completion items, more information can be requested - */ - getDetailedCompletion(item: lsProtocol.CompletionItem): void; - /** - * Request possible signatures for the current method - */ - getSignatureHelp(position: IPosition, documentInfo: IDocumentInfo): void; - /** - * Request all matching symbols in the document scope - */ - getDocumentHighlights(position: IPosition, documentInfo: IDocumentInfo): void; - /** - * Request a link to the definition of the current symbol. The results will not be displayed - * unless they are within the same file URI - */ - getDefinition(position: IPosition, documentInfo: IDocumentInfo): void; - /** - * Request a link to the type definition of the current symbol. The results will not be displayed - * unless they are within the same file URI - */ - getTypeDefinition(position: IPosition, documentInfo: IDocumentInfo): void; - /** - * Request a link to the implementation of the current symbol. The results will not be displayed - * unless they are within the same file URI - */ - getImplementation(position: IPosition, documentInfo: IDocumentInfo): void; - /** - * Request a link to all references to the current symbol. The results will not be displayed - * unless they are within the same file URI - */ - getReferences(position: IPosition, documentInfo: IDocumentInfo): void; - - // TODO: - // Workspaces: Not in scope - // Text Synchronization: - // willSave - // willSaveWaitUntil - // didSave - // didClose - // Language features: - // getDocumentSymbols - // codeAction - // codeLens - // codeLensResolve - // documentLink - // documentLinkResolve - // documentColor - // colorPresentation - // formatting - // rangeFormatting - // onTypeFormatting - // rename - // prepareRename - // foldingRange - - getLanguageCompletionCharacters(): string[]; - getLanguageSignatureCharacters(): string[]; - - /** - * Does the server support go to definition? - */ - isDefinitionSupported(): boolean; - /** - * Does the server support go to type definition? - */ - isTypeDefinitionSupported(): boolean; - /** - * Does the server support go to implementation? - */ - isImplementationSupported(): boolean; - /** - * Does the server support find all references? - */ - isReferencesSupported(): boolean; -} - -export interface ILspOptions { - serverUri: string; - languageId: string; - rootUri: string; -} diff --git a/packages/lsp-ws-connection/src/ws-connection.ts b/packages/lsp-ws-connection/src/ws-connection.ts deleted file mode 100644 index 920be0a8d..000000000 --- a/packages/lsp-ws-connection/src/ws-connection.ts +++ /dev/null @@ -1,616 +0,0 @@ -import * as events from 'events'; - -import 'setimmediate'; -import type * as protocol from 'vscode-languageserver-protocol'; -import type { LocationLink } from 'vscode-languageserver-types'; -import { ConsoleLogger, MessageConnection, listen } from 'vscode-ws-jsonrpc'; - -import { - registerServerCapability, - unregisterServerCapability -} from './server-capability-registration'; -import { - AnyCompletion, - AnyLocation, - CompletionTriggerKind, - IDocumentInfo, - ILspConnection, - ILspOptions, - IPosition, - ITokenInfo -} from './types'; - -/** - * Changes as compared to upstream: - * - markdown is preferred over plaintext - * - informative members are public and others are protected, not private - * - onServerInitialized() was extracted; it also emits a message once connected - * - initializeParams() was extracted, and can be modified by subclasses - * - typescript 3.7 was adopted to clean up deep references - */ -export class LspWsConnection - extends events.EventEmitter - implements ILspConnection -{ - public isConnected = false; - public isInitialized = false; - public documentInfo: ILspOptions; - public serverCapabilities: protocol.ServerCapabilities; - protected socket: WebSocket; - protected connection: MessageConnection; - protected openedUris = new Map(); - private rootUri: string; - - constructor(options: ILspOptions) { - super(); - this.rootUri = options.rootUri; - } - - get isReady() { - return this.isConnected && this.isInitialized; - } - - /** - * Initialize a connection over a web socket that speaks the LSP protocol - */ - public connect(socket: WebSocket): this { - this.socket = socket; - - listen({ - webSocket: this.socket, - logger: new ConsoleLogger(), - onConnection: (connection: MessageConnection) => { - connection.listen(); - this.isConnected = true; - - this.connection = connection; - this.sendInitialize(); - - this.connection.onNotification( - 'textDocument/publishDiagnostics', - (params: protocol.PublishDiagnosticsParams) => { - this.emit('diagnostic', params); - } - ); - - this.connection.onNotification( - 'window/showMessage', - (params: protocol.ShowMessageParams) => { - this.emit('logging', params); - } - ); - - this.connection.onRequest( - 'client/registerCapability', - (params: protocol.RegistrationParams) => { - params.registrations.forEach( - (capabilityRegistration: protocol.Registration) => { - try { - this.serverCapabilities = registerServerCapability( - this.serverCapabilities, - capabilityRegistration - )!; - } catch (err) { - console.error(err); - } - } - ); - - this.emit('logging', params); - } - ); - - this.connection.onRequest( - 'client/unregisterCapability', - (params: protocol.UnregistrationParams) => { - params.unregisterations.forEach( - (capabilityUnregistration: protocol.Unregistration) => { - this.serverCapabilities = unregisterServerCapability( - this.serverCapabilities, - capabilityUnregistration - ); - } - ); - - this.emit('logging', params); - } - ); - - this.connection.onRequest( - 'window/showMessageRequest', - (params: protocol.ShowMessageRequestParams) => { - this.emit('logging', params); - } - ); - - this.connection.onError(e => { - this.emit('error', e); - }); - - this.connection.onClose(() => { - this.isConnected = false; - }); - } - }); - - return this; - } - - public close() { - if (this.connection) { - this.connection.dispose(); - } - this.openedUris.clear(); - this.socket.close(); - } - - /** - * Initialization parameters to be sent to the language server. - * Subclasses should override this when adding more features. - */ - protected initializeParams(): protocol.InitializeParams { - return { - capabilities: {} as protocol.ClientCapabilities, - processId: null, - rootUri: this.rootUri, - workspaceFolders: null - }; - } - - public sendInitialize() { - if (!this.isConnected) { - return; - } - - this.openedUris.clear(); - - const message: protocol.InitializeParams = this.initializeParams(); - - this.connection - .sendRequest('initialize', message) - .then( - params => { - this.onServerInitialized(params); - }, - e => { - console.warn('lsp-ws-connection initialization failure', e); - } - ); - } - - sendOpen(documentInfo: IDocumentInfo) { - const textDocumentMessage: protocol.DidOpenTextDocumentParams = { - textDocument: { - uri: documentInfo.uri, - languageId: documentInfo.languageId, - text: documentInfo.text, - version: documentInfo.version - } as protocol.TextDocumentItem - }; - void this.connection.sendNotification( - 'textDocument/didOpen', - textDocumentMessage - ); - this.openedUris.set(documentInfo.uri, true); - this.sendChange(documentInfo); - } - - public sendChange(documentInfo: IDocumentInfo) { - if (!this.isReady) { - return; - } - if (!this.openedUris.get(documentInfo.uri)) { - this.sendOpen(documentInfo); - return; - } - const textDocumentChange: protocol.DidChangeTextDocumentParams = { - textDocument: { - uri: documentInfo.uri, - version: documentInfo.version - } as protocol.VersionedTextDocumentIdentifier, - contentChanges: [{ text: documentInfo.text }] - }; - void this.connection.sendNotification( - 'textDocument/didChange', - textDocumentChange - ); - documentInfo.version++; - } - - public sendSaved(documentInfo: IDocumentInfo) { - if (!this.isReady) { - return; - } - - const textDocumentChange: protocol.DidSaveTextDocumentParams = { - textDocument: { - uri: documentInfo.uri, - version: documentInfo.version - } as protocol.VersionedTextDocumentIdentifier, - text: documentInfo.text - }; - void this.connection.sendNotification( - 'textDocument/didSave', - textDocumentChange - ); - } - - public sendConfigurationChange( - settings: protocol.DidChangeConfigurationParams - ) { - if (!this.isReady) { - return; - } - - void this.connection.sendNotification( - 'workspace/didChangeConfiguration', - settings - ); - } - - /** - * @deprecated - */ - public async getHoverTooltip( - location: IPosition, - documentInfo: IDocumentInfo, - emit = true - ) { - if (!(this.isReady && this.serverCapabilities?.hoverProvider)) { - return; - } - - const params: protocol.TextDocumentPositionParams = { - textDocument: { - uri: documentInfo.uri - }, - position: { - line: location.line, - character: location.ch - } - }; - - const hover = await this.connection.sendRequest( - 'textDocument/hover', - params - ); - - if (emit) { - this.emit('hover', hover, documentInfo.uri); - } - - return hover; - } - - /** - * @deprecated - */ - public async getCompletion( - location: IPosition, - token: ITokenInfo, - documentInfo: IDocumentInfo, - emit = true, - triggerCharacter?: string, - triggerKind?: protocol.CompletionTriggerKind - ) { - if (!(this.isReady && this.serverCapabilities?.completionProvider)) { - return; - } - - const params: protocol.CompletionParams = { - textDocument: { - uri: documentInfo.uri - }, - position: { - line: location.line, - character: location.ch - }, - context: { - triggerKind: triggerKind || CompletionTriggerKind.Invoked, - triggerCharacter - } - }; - - const items = await this.connection.sendRequest( - 'textDocument/completion', - params - ); - - const itemList = items && 'items' in items ? items.items : items; - - if (emit) { - this.emit('completion', itemList); - } - return itemList; - } - - public getDetailedCompletion(completionItem: protocol.CompletionItem) { - if (!this.isReady) { - return; - } - void this.connection - .sendRequest( - 'completionItem/resolve', - completionItem - ) - .then(result => { - this.emit('completionResolved', result); - }); - } - - /** - * @deprecated - */ - public async getSignatureHelp( - location: IPosition, - documentInfo: IDocumentInfo, - emit = true - ) { - if (!(this.isReady && this.serverCapabilities?.signatureHelpProvider)) { - return; - } - - const code = documentInfo.text; - const lines = code.split('\n'); - const typedCharacter = lines[location.line][location.ch - 1]; - - const triggers = - this.serverCapabilities?.signatureHelpProvider?.triggerCharacters || []; - if (triggers.indexOf(typedCharacter) === -1) { - // Not a signature character - return; - } - - const params: protocol.TextDocumentPositionParams = { - textDocument: { - uri: documentInfo.uri - }, - position: { - line: location.line, - character: location.ch - } - }; - - const help = await this.connection.sendRequest( - 'textDocument/signatureHelp', - params - ); - - if (emit) { - this.emit('signature', help, documentInfo.uri); - } - - return help; - } - - /** - * Request the locations of all matching document symbols - * @deprecated - */ - public async getDocumentHighlights( - location: IPosition, - documentInfo: IDocumentInfo, - emit = true - ) { - if (!this.isReady || !this.serverCapabilities?.documentHighlightProvider) { - return; - } - - const highlights = await this.connection.sendRequest< - protocol.DocumentHighlight[] - >('textDocument/documentHighlight', { - textDocument: { - uri: documentInfo.uri - }, - position: { - line: location.line, - character: location.ch - } - } as protocol.TextDocumentPositionParams); - - if (emit) { - this.emit('highlight', highlights, documentInfo.uri); - } - - return highlights; - } - - /** - * Request a link to the definition of the current symbol. The results will not be displayed - * unless they are within the same file URI - * @deprecated - */ - public async getDefinition( - location: IPosition, - documentInfo: IDocumentInfo, - emit = true - ) { - if (!(this.isReady && this.isDefinitionSupported())) { - return; - } - - const params: protocol.TextDocumentPositionParams = { - textDocument: { - uri: documentInfo.uri - }, - position: { - line: location.line, - character: location.ch - } - }; - - const targets = await this.connection.sendRequest( - 'textDocument/definition', - params - ); - - if (emit) { - this.emit('goTo', targets, documentInfo.uri); - } - - return targets; - } - - /** - * Request a link to the type definition of the current symbol. The results will not be displayed - * unless they are within the same file URI - * @deprecated - */ - public async getTypeDefinition( - location: IPosition, - documentInfo: IDocumentInfo, - emit = true - ) { - if (!this.isReady || !this.isTypeDefinitionSupported()) { - return; - } - - const params: protocol.TextDocumentPositionParams = { - textDocument: { - uri: documentInfo.uri - }, - position: { - line: location.line, - character: location.ch - } - }; - - const locations = await this.connection.sendRequest( - 'textDocument/typeDefinition', - params - ); - - if (emit) { - this.emit('goTo', locations); - } - - return locations; - } - - /** - * Request a link to the implementation of the current symbol. The results will not be displayed - * unless they are within the same file URI - * @deprecated - */ - public getImplementation(location: IPosition, documentInfo: IDocumentInfo) { - if (!this.isReady || !this.isImplementationSupported()) { - return; - } - - void this.connection - .sendRequest( - 'textDocument/implementation', - { - textDocument: { - uri: documentInfo.uri - }, - position: { - line: location.line, - character: location.ch - } - } as protocol.TextDocumentPositionParams - ) - .then(result => { - this.emit('goTo', result); - }); - } - - /** - * Request a link to all references to the current symbol. The results will not be displayed - * unless they are within the same file URI - * @deprecated - */ - public async getReferences( - location: IPosition, - documentInfo: IDocumentInfo, - emit = false - ) { - if (!this.isReady || !this.isReferencesSupported()) { - return; - } - - const params: protocol.ReferenceParams = { - context: { - includeDeclaration: true - }, - textDocument: { - uri: documentInfo.uri - }, - position: { - line: location.line, - character: location.ch - } - }; - - const locations = await this.connection.sendRequest( - 'textDocument/references', - params - ); - - if (emit) { - this.emit('goTo', locations, documentInfo.uri); - } - - return locations; - } - - /** - * The characters that trigger completion automatically. - * @deprecated - */ - public getLanguageCompletionCharacters(): string[] { - return this.serverCapabilities?.completionProvider?.triggerCharacters || []; - } - - /** - * The characters that trigger signature help automatically. - * @deprecated - */ - public getLanguageSignatureCharacters(): string[] { - return ( - this.serverCapabilities?.signatureHelpProvider?.triggerCharacters || [] - ); - } - - /** - * Does the server support go to definition? - * @deprecated - */ - public isDefinitionSupported() { - return !!this.serverCapabilities?.definitionProvider; - } - - /** - * Does the server support go to type definition? - * @deprecated - */ - public isTypeDefinitionSupported() { - return !!this.serverCapabilities?.typeDefinitionProvider; - } - - /** - * Does the server support go to implementation? - * @deprecated - */ - public isImplementationSupported() { - return !!this.serverCapabilities?.implementationProvider; - } - - /** - * Does the server support find all references? - * @deprecated - */ - public isReferencesSupported() { - return !!this.serverCapabilities?.referencesProvider; - } - - protected onServerInitialized(params: protocol.InitializeResult) { - this.isInitialized = true; - this.serverCapabilities = params.capabilities; - void this.connection.sendNotification('initialized', {}); - void this.connection.sendNotification('workspace/didChangeConfiguration', { - settings: {} - }); - this.emit('serverInitialized', this.serverCapabilities); - } -} diff --git a/packages/lsp-ws-connection/tsconfig.json b/packages/lsp-ws-connection/tsconfig.json deleted file mode 100644 index f380f9daa..000000000 --- a/packages/lsp-ws-connection/tsconfig.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "extends": "../tsconfigbase", - "compilerOptions": { - "rootDir": "src", - "outDir": "lib", - "lib": ["es6", "dom", "scripthost"], - "tsBuildInfoFile": "lib/.tsbuildinfo", - "types": ["mocha", "node"], - "target": "es5" - }, - "include": ["src"], - "exclude": ["node_modules"] -} diff --git a/packages/lsp-ws-connection/webpack.config.js b/packages/lsp-ws-connection/webpack.config.js deleted file mode 100644 index edc5e88e2..000000000 --- a/packages/lsp-ws-connection/webpack.config.js +++ /dev/null @@ -1,44 +0,0 @@ -const path = require('path'); - -const webpack = require('webpack'); - -module.exports = { - mode: 'production', - devtool: 'source-map', - entry: { - index: './lib/index.js' - }, - target: 'web', - resolve: { - extensions: ['.js'], - fallback: { - net: false, - path: false, - crypto: false, - stream: require.resolve('stream-browserify'), - buffer: require.resolve('buffer') - } - }, - output: { - filename: '[name].js', - path: path.resolve(__dirname, 'dist'), - library: 'lsp-ws-connection', - libraryTarget: 'umd' - }, - module: { - rules: [ - { - test: /\.js$/, - use: ['source-map-loader'] - } - ] - }, - plugins: [ - new webpack.ProvidePlugin({ - Buffer: ['buffer', 'Buffer'] - }), - new webpack.ProvidePlugin({ - process: 'process/browser' - }) - ] -}; diff --git a/packages/metapackage/package.json b/packages/metapackage/package.json index c5d9e64a2..e8410b52b 100644 --- a/packages/metapackage/package.json +++ b/packages/metapackage/package.json @@ -1,6 +1,6 @@ { "name": "@jupyter-lsp/jupyterlab-lsp-metapackage", - "version": "4.2.0", + "version": "5.0.0-alpha.0", "description": "JupyterLab LSP - Meta Package. All of the packages used by JupyterLab LSP", "homepage": "https://github.com/jupyter-lsp/jupyterlab-lsp", "bugs": { @@ -27,20 +27,17 @@ "watch": "tsc -b --watch --preserveWatchOutput" }, "dependencies": { - "@jupyter-lsp/code-jumpers": "file:../code-jumpers", - "@jupyter-lsp/completion-theme": "file:../completion-theme", - "@jupyter-lsp/jupyterlab-lsp": "file:../jupyterlab-lsp", - "@jupyter-lsp/jupyterlab-lsp-example-extractor": "file:../_example-extractor", - "@jupyter-lsp/jupyterlab-lsp-klingon-integration": "file:../_klingon-integration", - "@jupyter-lsp/theme-material": "file:../theme-material", - "@jupyter-lsp/theme-vscode": "file:../theme-vscode", - "lsp-ws-connection": "file:../lsp-ws-connection" + "@jupyter-lsp/code-jumpers": "workspace:*", + "@jupyter-lsp/completion-theme": "workspace:*", + "@jupyter-lsp/jupyterlab-lsp": "workspace:*", + "@jupyter-lsp/jupyterlab-lsp-example-extractor": "workspace:*", + "@jupyter-lsp/jupyterlab-lsp-klingon-integration": "workspace:*", + "@jupyter-lsp/theme-material": "workspace:*", + "@jupyter-lsp/theme-vscode": "workspace:*" }, "devDependencies": { - "fs-extra": "^8.0.1", - "rimraf": "^3.0.2", - "typedoc": "^0.22.13", - "typescript": "~4.9.4" + "rimraf": "^3.0.0", + "typescript": "~5.0.4" }, "publishConfig": { "access": "public" diff --git a/packages/metapackage/src/index.ts b/packages/metapackage/src/index.ts index 9ce38b9b2..183002661 100644 --- a/packages/metapackage/src/index.ts +++ b/packages/metapackage/src/index.ts @@ -5,4 +5,3 @@ import '@jupyter-lsp/jupyterlab-lsp-example-extractor'; import '@jupyter-lsp/jupyterlab-lsp-klingon-integration'; import '@jupyter-lsp/theme-material'; import '@jupyter-lsp/theme-vscode'; -import 'lsp-ws-connection'; diff --git a/packages/metapackage/tsconfig.json b/packages/metapackage/tsconfig.json index 71b84cc5c..6443cb352 100644 --- a/packages/metapackage/tsconfig.json +++ b/packages/metapackage/tsconfig.json @@ -3,7 +3,7 @@ "compilerOptions": { "outDir": "lib", "rootDir": "src", - "types": ["jest"], + "skipLibCheck": true, "tsBuildInfoFile": "lib/.tsbuildinfo" }, "include": ["src/**/*"], @@ -20,9 +20,6 @@ { "path": "../theme-vscode" }, - { - "path": "../lsp-ws-connection" - }, { "path": "../code-jumpers" }, diff --git a/packages/theme-material/package.json b/packages/theme-material/package.json index b4f2e5b62..cc448da90 100644 --- a/packages/theme-material/package.json +++ b/packages/theme-material/package.json @@ -36,8 +36,6 @@ "dependencies": { "@jupyter-lsp/completion-theme": "^3.0.0" }, - "devDependencies": {}, - "peerDependencies": {}, "jupyterlab": { "extension": true, "schemaDir": "schema", diff --git a/packages/theme-vscode/package.json b/packages/theme-vscode/package.json index cfcb6e482..613f48437 100644 --- a/packages/theme-vscode/package.json +++ b/packages/theme-vscode/package.json @@ -36,8 +36,6 @@ "dependencies": { "@jupyter-lsp/completion-theme": "^3.0.0" }, - "devDependencies": {}, - "peerDependencies": {}, "jupyterlab": { "extension": true, "schemaDir": "schema", diff --git a/packages/tsconfigbase.json b/packages/tsconfigbase.json index 3689fec8e..49680d157 100644 --- a/packages/tsconfigbase.json +++ b/packages/tsconfigbase.json @@ -14,7 +14,7 @@ "preserveWatchOutput": true, "resolveJsonModule": true, "sourceMap": true, - "target": "es2017", + "target": "es2019", "skipLibCheck": true, "strictNullChecks": true, "noImplicitThis": true, diff --git a/python_packages/jupyterlab_lsp/setup.cfg b/python_packages/jupyterlab_lsp/setup.cfg index 0bf2d3f12..e1af2c659 100644 --- a/python_packages/jupyterlab_lsp/setup.cfg +++ b/python_packages/jupyterlab_lsp/setup.cfg @@ -15,12 +15,12 @@ keywords = Language Server LSP JupyterLab - JupyterLab3 + JupyterLab4 license_file = LICENSE classifiers = Framework :: Jupyter Framework :: Jupyter :: JupyterLab - Framework :: Jupyter :: JupyterLab :: 3 + Framework :: Jupyter :: JupyterLab :: 4 Framework :: Jupyter :: JupyterLab :: Extensions Framework :: Jupyter :: JupyterLab :: Extensions :: Prebuilt Intended Audience :: Developers @@ -37,4 +37,4 @@ python_requires = >=3.8 install_requires = jupyter_lsp >=2.0.0 - jupyterlab >=3.6.0,<4.0.0a0 + jupyterlab >=4.0.5,<5.0.0a0 diff --git a/requirements/github-actions.yml b/requirements/github-actions.yml index c68c4d76c..e01cfff56 100644 --- a/requirements/github-actions.yml +++ b/requirements/github-actions.yml @@ -50,3 +50,5 @@ dependencies: - firefox - geckodriver - robotframework-seleniumlibrary + # temp pin see https://github.com/jupyter-lsp/jupyterlab-lsp/issues/956 + - selenium <4.10 diff --git a/requirements/lab.txt b/requirements/lab.txt index d6f6af556..a2d2631aa 100644 --- a/requirements/lab.txt +++ b/requirements/lab.txt @@ -1,3 +1,3 @@ # the version of jupyterlab -r ./prod.txt -jupyterlab >=3.6.0,<4.0.0a0 +jupyterlab >=4.0.5,<5.0.0a0 diff --git a/scripts/bump_versions.py b/scripts/bump_versions.py index 1fdf925ae..a70c73f38 100755 --- a/scripts/bump_versions.py +++ b/scripts/bump_versions.py @@ -156,6 +156,10 @@ def update_versions(dry: bool): path=Path("python_packages/jupyterlab_lsp/setup.cfg"), template="jupyterlab {version}", ), + VersionLocation( + path=Path(".github/workflows/job.test.yml"), + template="lab: ['{version}']", + ), ], ), ] diff --git a/scripts/utest.py b/scripts/utest.py index 6e758010c..5032b230f 100644 --- a/scripts/utest.py +++ b/scripts/utest.py @@ -29,7 +29,7 @@ def run_tests(): "--no-cov-on-fail", "-p", "no:warnings", - "--flake8", + # "--flake8", "-vv", *OS_PY_ARGS.get((OS, PY), DEFAULT_ARGS), ] + list(sys.argv[1:]) diff --git a/yarn.lock b/yarn.lock index ddfc5dfb0..fc4d344db 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1,14408 +1,16601 @@ -# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. -# yarn lockfile v1 - - -"@actions/core@^1.2.0": - version "1.10.0" - resolved "https://registry.yarnpkg.com/@actions/core/-/core-1.10.0.tgz#44551c3c71163949a2f06e94d9ca2157a0cfac4f" - integrity sha512-2aZDDa3zrrZbP5ZYg159sNoLRb61nQ7awl5pSvIq5Qpj81vwDzdMRKzkWJGJuwVvWpvZKx7vspJALyvaaIQyug== - dependencies: - "@actions/http-client" "^2.0.1" - uuid "^8.3.2" - -"@actions/http-client@^2.0.1": - version "2.1.0" - resolved "https://registry.yarnpkg.com/@actions/http-client/-/http-client-2.1.0.tgz#b6d8c3934727d6a50d10d19f00a711a964599a9f" - integrity sha512-BonhODnXr3amchh4qkmjPMUO8mFi/zLaaCeCAJZqch8iQqyDnVIkySjB38VHAC8IJ+bnlgfOqlhpyCUZHlQsqw== - dependencies: - tunnel "^0.0.6" - -"@ampproject/remapping@^2.2.0": - version "2.2.0" - resolved "https://registry.yarnpkg.com/@ampproject/remapping/-/remapping-2.2.0.tgz#56c133824780de3174aed5ab6834f3026790154d" - integrity sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w== - dependencies: - "@jridgewell/gen-mapping" "^0.1.0" - "@jridgewell/trace-mapping" "^0.3.9" - -"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.18.6.tgz#3b25d38c89600baa2dcc219edfa88a74eb2c427a" - integrity sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q== - dependencies: - "@babel/highlight" "^7.18.6" - -"@babel/compat-data@^7.13.11", "@babel/compat-data@^7.17.10", "@babel/compat-data@^7.20.5": - version "7.21.0" - resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.21.0.tgz#c241dc454e5b5917e40d37e525e2f4530c399298" - integrity sha512-gMuZsmsgxk/ENC3O/fRw5QY8A9/uxQbbCEypnLIiYYc/qVJtEV7ouxC3EllIIwNzMqAQee5tanFabWsUOutS7g== - -"@babel/core@^7.1.0", "@babel/core@^7.12.3", "@babel/core@^7.7.5": - version "7.21.0" - resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.21.0.tgz#1341aefdcc14ccc7553fcc688dd8986a2daffc13" - integrity sha512-PuxUbxcW6ZYe656yL3EAhpy7qXKq0DmYsrJLpbB8XrsCP9Nm+XCg9XFMb5vIDliPD7+U/+M+QJlH17XOcB7eXA== - dependencies: - "@ampproject/remapping" "^2.2.0" - "@babel/code-frame" "^7.18.6" - "@babel/generator" "^7.21.0" - "@babel/helper-compilation-targets" "^7.20.7" - "@babel/helper-module-transforms" "^7.21.0" - "@babel/helpers" "^7.21.0" - "@babel/parser" "^7.21.0" - "@babel/template" "^7.20.7" - "@babel/traverse" "^7.21.0" - "@babel/types" "^7.21.0" - convert-source-map "^1.7.0" - debug "^4.1.0" - gensync "^1.0.0-beta.2" - json5 "^2.2.2" - semver "^6.3.0" - -"@babel/generator@^7.21.0", "@babel/generator@^7.21.1": - version "7.21.1" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.21.1.tgz#951cc626057bc0af2c35cd23e9c64d384dea83dd" - integrity sha512-1lT45bAYlQhFn/BHivJs43AiW2rg3/UbLyShGfF3C0KmHvO5fSghWd5kBJy30kpRRucGzXStvnnCFniCR2kXAA== - dependencies: - "@babel/types" "^7.21.0" - "@jridgewell/gen-mapping" "^0.3.2" - "@jridgewell/trace-mapping" "^0.3.17" - jsesc "^2.5.1" - -"@babel/helper-annotate-as-pure@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.16.7.tgz#bb2339a7534a9c128e3102024c60760a3a7f3862" - integrity sha512-s6t2w/IPQVTAET1HitoowRGXooX8mCgtuP5195wD/QJPV6wYjpujCGF7JuMODVX2ZAJOf1GT6DT9MHEZvLOFSw== - dependencies: - "@babel/types" "^7.16.7" - -"@babel/helper-builder-binary-assignment-operator-visitor@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.16.7.tgz#38d138561ea207f0f69eb1626a418e4f7e6a580b" - integrity sha512-C6FdbRaxYjwVu/geKW4ZeQ0Q31AftgRcdSnZ5/jsH6BzCJbtvXvhpfkbkThYSuutZA7nCXpPR6AD9zd1dprMkA== - dependencies: - "@babel/helper-explode-assignable-expression" "^7.16.7" - "@babel/types" "^7.16.7" - -"@babel/helper-compilation-targets@^7.13.0", "@babel/helper-compilation-targets@^7.16.7", "@babel/helper-compilation-targets@^7.17.10", "@babel/helper-compilation-targets@^7.18.2", "@babel/helper-compilation-targets@^7.20.7": - version "7.20.7" - resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.20.7.tgz#a6cd33e93629f5eb473b021aac05df62c4cd09bb" - integrity sha512-4tGORmfQcrc+bvrjb5y3dG9Mx1IOZjsHqQVUz7XCNHO+iTmqxWnVg3KRygjGmpRLJGdQSKuvFinbIb0CnZwHAQ== - dependencies: - "@babel/compat-data" "^7.20.5" - "@babel/helper-validator-option" "^7.18.6" - browserslist "^4.21.3" - lru-cache "^5.1.1" - semver "^6.3.0" - -"@babel/helper-create-class-features-plugin@^7.17.12", "@babel/helper-create-class-features-plugin@^7.18.0": - version "7.18.0" - resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.18.0.tgz#fac430912606331cb075ea8d82f9a4c145a4da19" - integrity sha512-Kh8zTGR9de3J63e5nS0rQUdRs/kbtwoeQQ0sriS0lItjC96u8XXZN6lKpuyWd2coKSU13py/y+LTmThLuVX0Pg== - dependencies: - "@babel/helper-annotate-as-pure" "^7.16.7" - "@babel/helper-environment-visitor" "^7.16.7" - "@babel/helper-function-name" "^7.17.9" - "@babel/helper-member-expression-to-functions" "^7.17.7" - "@babel/helper-optimise-call-expression" "^7.16.7" - "@babel/helper-replace-supers" "^7.16.7" - "@babel/helper-split-export-declaration" "^7.16.7" - -"@babel/helper-create-regexp-features-plugin@^7.16.7", "@babel/helper-create-regexp-features-plugin@^7.17.12": - version "7.17.12" - resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.17.12.tgz#bb37ca467f9694bbe55b884ae7a5cc1e0084e4fd" - integrity sha512-b2aZrV4zvutr9AIa6/gA3wsZKRwTKYoDxYiFKcESS3Ug2GTXzwBEvMuuFLhCQpEnRXs1zng4ISAXSUxxKBIcxw== - dependencies: - "@babel/helper-annotate-as-pure" "^7.16.7" - regexpu-core "^5.0.1" - -"@babel/helper-define-polyfill-provider@^0.3.1": - version "0.3.1" - resolved "https://registry.yarnpkg.com/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.3.1.tgz#52411b445bdb2e676869e5a74960d2d3826d2665" - integrity sha512-J9hGMpJQmtWmj46B3kBHmL38UhJGhYX7eqkcq+2gsstyYt341HmPeWspihX43yVRA0mS+8GGk2Gckc7bY/HCmA== - dependencies: - "@babel/helper-compilation-targets" "^7.13.0" - "@babel/helper-module-imports" "^7.12.13" - "@babel/helper-plugin-utils" "^7.13.0" - "@babel/traverse" "^7.13.0" - debug "^4.1.1" - lodash.debounce "^4.0.8" - resolve "^1.14.2" - semver "^6.1.2" - -"@babel/helper-environment-visitor@^7.16.7", "@babel/helper-environment-visitor@^7.18.2", "@babel/helper-environment-visitor@^7.18.9": - version "7.18.9" - resolved "https://registry.yarnpkg.com/@babel/helper-environment-visitor/-/helper-environment-visitor-7.18.9.tgz#0c0cee9b35d2ca190478756865bb3528422f51be" - integrity sha512-3r/aACDJ3fhQ/EVgFy0hpj8oHyHpQc+LPtJoY9SzTThAsStm4Ptegq92vqKoE3vD706ZVFWITnMnxucw+S9Ipg== - -"@babel/helper-explode-assignable-expression@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.16.7.tgz#12a6d8522fdd834f194e868af6354e8650242b7a" - integrity sha512-KyUenhWMC8VrxzkGP0Jizjo4/Zx+1nNZhgocs+gLzyZyB8SHidhoq9KK/8Ato4anhwsivfkBLftky7gvzbZMtQ== - dependencies: - "@babel/types" "^7.16.7" - -"@babel/helper-function-name@^7.16.7", "@babel/helper-function-name@^7.17.9", "@babel/helper-function-name@^7.21.0": - version "7.21.0" - resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.21.0.tgz#d552829b10ea9f120969304023cd0645fa00b1b4" - integrity sha512-HfK1aMRanKHpxemaY2gqBmL04iAPOPRj7DxtNbiDOrJK+gdwkiNRVpCpUJYbUT+aZyemKN8brqTOxzCaG6ExRg== - dependencies: - "@babel/template" "^7.20.7" - "@babel/types" "^7.21.0" - -"@babel/helper-hoist-variables@^7.16.7", "@babel/helper-hoist-variables@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.18.6.tgz#d4d2c8fb4baeaa5c68b99cc8245c56554f926678" - integrity sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q== - dependencies: - "@babel/types" "^7.18.6" - -"@babel/helper-member-expression-to-functions@^7.17.7": - version "7.17.7" - resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.17.7.tgz#a34013b57d8542a8c4ff8ba3f747c02452a4d8c4" - integrity sha512-thxXgnQ8qQ11W2wVUObIqDL4p148VMxkt5T/qpN5k2fboRyzFGFmKsTGViquyM5QHKUy48OZoca8kw4ajaDPyw== - dependencies: - "@babel/types" "^7.17.0" - -"@babel/helper-module-imports@^7.12.13", "@babel/helper-module-imports@^7.16.7", "@babel/helper-module-imports@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.18.6.tgz#1e3ebdbbd08aad1437b428c50204db13c5a3ca6e" - integrity sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA== - dependencies: - "@babel/types" "^7.18.6" - -"@babel/helper-module-transforms@^7.18.0", "@babel/helper-module-transforms@^7.21.0": - version "7.21.2" - resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.21.2.tgz#160caafa4978ac8c00ac66636cb0fa37b024e2d2" - integrity sha512-79yj2AR4U/Oqq/WOV7Lx6hUjau1Zfo4cI+JLAVYeMV5XIlbOhmjEk5ulbTc9fMpmlojzZHkUUxAiK+UKn+hNQQ== - dependencies: - "@babel/helper-environment-visitor" "^7.18.9" - "@babel/helper-module-imports" "^7.18.6" - "@babel/helper-simple-access" "^7.20.2" - "@babel/helper-split-export-declaration" "^7.18.6" - "@babel/helper-validator-identifier" "^7.19.1" - "@babel/template" "^7.20.7" - "@babel/traverse" "^7.21.2" - "@babel/types" "^7.21.2" - -"@babel/helper-optimise-call-expression@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.16.7.tgz#a34e3560605abbd31a18546bd2aad3e6d9a174f2" - integrity sha512-EtgBhg7rd/JcnpZFXpBy0ze1YRfdm7BnBX4uKMBd3ixa3RGAE002JZB66FJyNH7g0F38U05pXmA5P8cBh7z+1w== - dependencies: - "@babel/types" "^7.16.7" - -"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.12.13", "@babel/helper-plugin-utils@^7.13.0", "@babel/helper-plugin-utils@^7.14.5", "@babel/helper-plugin-utils@^7.16.7", "@babel/helper-plugin-utils@^7.17.12", "@babel/helper-plugin-utils@^7.8.0", "@babel/helper-plugin-utils@^7.8.3": - version "7.20.2" - resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.20.2.tgz#d1b9000752b18d0877cff85a5c376ce5c3121629" - integrity sha512-8RvlJG2mj4huQ4pZ+rU9lqKi9ZKiRmuvGuM2HlWmkmgOhbs6zEAw6IEiJ5cQqGbDzGZOhwuOQNtZMi/ENLjZoQ== - -"@babel/helper-remap-async-to-generator@^7.16.8": - version "7.16.8" - resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.16.8.tgz#29ffaade68a367e2ed09c90901986918d25e57e3" - integrity sha512-fm0gH7Flb8H51LqJHy3HJ3wnE1+qtYR2A99K06ahwrawLdOFsCEWjZOrYricXJHoPSudNKxrMBUPEIPxiIIvBw== - dependencies: - "@babel/helper-annotate-as-pure" "^7.16.7" - "@babel/helper-wrap-function" "^7.16.8" - "@babel/types" "^7.16.8" - -"@babel/helper-replace-supers@^7.16.7", "@babel/helper-replace-supers@^7.18.2": - version "7.18.2" - resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.18.2.tgz#41fdfcc9abaf900e18ba6e5931816d9062a7b2e0" - integrity sha512-XzAIyxx+vFnrOxiQrToSUOzUOn0e1J2Li40ntddek1Y69AXUTXoDJ40/D5RdjFu7s7qHiaeoTiempZcbuVXh2Q== - dependencies: - "@babel/helper-environment-visitor" "^7.18.2" - "@babel/helper-member-expression-to-functions" "^7.17.7" - "@babel/helper-optimise-call-expression" "^7.16.7" - "@babel/traverse" "^7.18.2" - "@babel/types" "^7.18.2" - -"@babel/helper-simple-access@^7.18.2", "@babel/helper-simple-access@^7.20.2": - version "7.20.2" - resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.20.2.tgz#0ab452687fe0c2cfb1e2b9e0015de07fc2d62dd9" - integrity sha512-+0woI/WPq59IrqDYbVGfshjT5Dmk/nnbdpcF8SnMhhXObpTq2KNBdLFRFrkVdbDOyUmHBCxzm5FHV1rACIkIbA== - dependencies: - "@babel/types" "^7.20.2" - -"@babel/helper-skip-transparent-expression-wrappers@^7.16.0": - version "7.16.0" - resolved "https://registry.yarnpkg.com/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.16.0.tgz#0ee3388070147c3ae051e487eca3ebb0e2e8bb09" - integrity sha512-+il1gTy0oHwUsBQZyJvukbB4vPMdcYBrFHa0Uc4AizLxbq6BOYC51Rv4tWocX9BLBDLZ4kc6qUFpQ6HRgL+3zw== - dependencies: - "@babel/types" "^7.16.0" - -"@babel/helper-split-export-declaration@^7.16.7", "@babel/helper-split-export-declaration@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.18.6.tgz#7367949bc75b20c6d5a5d4a97bba2824ae8ef075" - integrity sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA== - dependencies: - "@babel/types" "^7.18.6" - -"@babel/helper-string-parser@^7.19.4": - version "7.19.4" - resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.19.4.tgz#38d3acb654b4701a9b77fb0615a96f775c3a9e63" - integrity sha512-nHtDoQcuqFmwYNYPz3Rah5ph2p8PFeFCsZk9A/48dPc/rGocJ5J3hAAZ7pb76VWX3fZKu+uEr/FhH5jLx7umrw== - -"@babel/helper-validator-identifier@^7.16.7", "@babel/helper-validator-identifier@^7.18.6", "@babel/helper-validator-identifier@^7.19.1": - version "7.19.1" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz#7eea834cf32901ffdc1a7ee555e2f9c27e249ca2" - integrity sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w== - -"@babel/helper-validator-option@^7.16.7", "@babel/helper-validator-option@^7.18.6": - version "7.21.0" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.21.0.tgz#8224c7e13ace4bafdc4004da2cf064ef42673180" - integrity sha512-rmL/B8/f0mKS2baE9ZpyTcTavvEuWhTTW8amjzXNvYG4AwBsqTLikfXsEofsJEfKHf+HQVQbFOHy6o+4cnC/fQ== - -"@babel/helper-wrap-function@^7.16.8": - version "7.16.8" - resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.16.8.tgz#58afda087c4cd235de92f7ceedebca2c41274200" - integrity sha512-8RpyRVIAW1RcDDGTA+GpPAwV22wXCfKOoM9bet6TLkGIFTkRQSkH1nMQ5Yet4MpoXe1ZwHPVtNasc2w0uZMqnw== - dependencies: - "@babel/helper-function-name" "^7.16.7" - "@babel/template" "^7.16.7" - "@babel/traverse" "^7.16.8" - "@babel/types" "^7.16.8" - -"@babel/helpers@^7.21.0": - version "7.21.0" - resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.21.0.tgz#9dd184fb5599862037917cdc9eecb84577dc4e7e" - integrity sha512-XXve0CBtOW0pd7MRzzmoyuSj0e3SEzj8pgyFxnTT1NJZL38BD1MK7yYrm8yefRPIDvNNe14xR4FdbHwpInD4rA== - dependencies: - "@babel/template" "^7.20.7" - "@babel/traverse" "^7.21.0" - "@babel/types" "^7.21.0" - -"@babel/highlight@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.18.6.tgz#81158601e93e2563795adcbfbdf5d64be3f2ecdf" - integrity sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g== - dependencies: - "@babel/helper-validator-identifier" "^7.18.6" - chalk "^2.0.0" - js-tokens "^4.0.0" - -"@babel/parser@^7.1.0", "@babel/parser@^7.14.7", "@babel/parser@^7.20.7", "@babel/parser@^7.21.0", "@babel/parser@^7.21.2": - version "7.21.2" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.21.2.tgz#dacafadfc6d7654c3051a66d6fe55b6cb2f2a0b3" - integrity sha512-URpaIJQwEkEC2T9Kn+Ai6Xe/02iNaVCuT/PtoRz3GPVJVDpPd7mLo+VddTbhCRU9TXqW5mSrQfXZyi8kDKOVpQ== - -"@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@^7.17.12": - version "7.17.12" - resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.17.12.tgz#1dca338caaefca368639c9ffb095afbd4d420b1e" - integrity sha512-xCJQXl4EeQ3J9C4yOmpTrtVGmzpm2iSzyxbkZHw7UCnZBftHpF/hpII80uWVyVrc40ytIClHjgWGTG1g/yB+aw== - dependencies: - "@babel/helper-plugin-utils" "^7.17.12" - -"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@^7.17.12": - version "7.17.12" - resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.17.12.tgz#0d498ec8f0374b1e2eb54b9cb2c4c78714c77753" - integrity sha512-/vt0hpIw0x4b6BLKUkwlvEoiGZYYLNZ96CzyHYPbtG2jZGz6LBe7/V+drYrc/d+ovrF9NBi0pmtvmNb/FsWtRQ== - dependencies: - "@babel/helper-plugin-utils" "^7.17.12" - "@babel/helper-skip-transparent-expression-wrappers" "^7.16.0" - "@babel/plugin-proposal-optional-chaining" "^7.17.12" - -"@babel/plugin-proposal-async-generator-functions@^7.17.12": - version "7.17.12" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.17.12.tgz#094a417e31ce7e692d84bab06c8e2a607cbeef03" - integrity sha512-RWVvqD1ooLKP6IqWTA5GyFVX2isGEgC5iFxKzfYOIy/QEFdxYyCybBDtIGjipHpb9bDWHzcqGqFakf+mVmBTdQ== - dependencies: - "@babel/helper-plugin-utils" "^7.17.12" - "@babel/helper-remap-async-to-generator" "^7.16.8" - "@babel/plugin-syntax-async-generators" "^7.8.4" - -"@babel/plugin-proposal-class-properties@^7.17.12": - version "7.17.12" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.17.12.tgz#84f65c0cc247d46f40a6da99aadd6438315d80a4" - integrity sha512-U0mI9q8pW5Q9EaTHFPwSVusPMV/DV9Mm8p7csqROFLtIE9rBF5piLqyrBGigftALrBcsBGu4m38JneAe7ZDLXw== - dependencies: - "@babel/helper-create-class-features-plugin" "^7.17.12" - "@babel/helper-plugin-utils" "^7.17.12" - -"@babel/plugin-proposal-class-static-block@^7.18.0": - version "7.18.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.18.0.tgz#7d02253156e3c3793bdb9f2faac3a1c05f0ba710" - integrity sha512-t+8LsRMMDE74c6sV7KShIw13sqbqd58tlqNrsWoWBTIMw7SVQ0cZ905wLNS/FBCy/3PyooRHLFFlfrUNyyz5lA== - dependencies: - "@babel/helper-create-class-features-plugin" "^7.18.0" - "@babel/helper-plugin-utils" "^7.17.12" - "@babel/plugin-syntax-class-static-block" "^7.14.5" - -"@babel/plugin-proposal-dynamic-import@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.16.7.tgz#c19c897eaa46b27634a00fee9fb7d829158704b2" - integrity sha512-I8SW9Ho3/8DRSdmDdH3gORdyUuYnk1m4cMxUAdu5oy4n3OfN8flDEH+d60iG7dUfi0KkYwSvoalHzzdRzpWHTg== - dependencies: - "@babel/helper-plugin-utils" "^7.16.7" - "@babel/plugin-syntax-dynamic-import" "^7.8.3" - -"@babel/plugin-proposal-export-namespace-from@^7.17.12": - version "7.17.12" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.17.12.tgz#b22864ccd662db9606edb2287ea5fd1709f05378" - integrity sha512-j7Ye5EWdwoXOpRmo5QmRyHPsDIe6+u70ZYZrd7uz+ebPYFKfRcLcNu3Ro0vOlJ5zuv8rU7xa+GttNiRzX56snQ== - dependencies: - "@babel/helper-plugin-utils" "^7.17.12" - "@babel/plugin-syntax-export-namespace-from" "^7.8.3" - -"@babel/plugin-proposal-json-strings@^7.17.12": - version "7.17.12" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.17.12.tgz#f4642951792437233216d8c1af370bb0fbff4664" - integrity sha512-rKJ+rKBoXwLnIn7n6o6fulViHMrOThz99ybH+hKHcOZbnN14VuMnH9fo2eHE69C8pO4uX1Q7t2HYYIDmv8VYkg== - dependencies: - "@babel/helper-plugin-utils" "^7.17.12" - "@babel/plugin-syntax-json-strings" "^7.8.3" - -"@babel/plugin-proposal-logical-assignment-operators@^7.17.12": - version "7.17.12" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.17.12.tgz#c64a1bcb2b0a6d0ed2ff674fd120f90ee4b88a23" - integrity sha512-EqFo2s1Z5yy+JeJu7SFfbIUtToJTVlC61/C7WLKDntSw4Sz6JNAIfL7zQ74VvirxpjB5kz/kIx0gCcb+5OEo2Q== - dependencies: - "@babel/helper-plugin-utils" "^7.17.12" - "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" - -"@babel/plugin-proposal-nullish-coalescing-operator@^7.17.12": - version "7.17.12" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.17.12.tgz#1e93079bbc2cbc756f6db6a1925157c4a92b94be" - integrity sha512-ws/g3FSGVzv+VH86+QvgtuJL/kR67xaEIF2x0iPqdDfYW6ra6JF3lKVBkWynRLcNtIC1oCTfDRVxmm2mKzy+ag== - dependencies: - "@babel/helper-plugin-utils" "^7.17.12" - "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" - -"@babel/plugin-proposal-numeric-separator@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.16.7.tgz#d6b69f4af63fb38b6ca2558442a7fb191236eba9" - integrity sha512-vQgPMknOIgiuVqbokToyXbkY/OmmjAzr/0lhSIbG/KmnzXPGwW/AdhdKpi+O4X/VkWiWjnkKOBiqJrTaC98VKw== - dependencies: - "@babel/helper-plugin-utils" "^7.16.7" - "@babel/plugin-syntax-numeric-separator" "^7.10.4" - -"@babel/plugin-proposal-object-rest-spread@^7.18.0": - version "7.18.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.18.0.tgz#79f2390c892ba2a68ec112eb0d895cfbd11155e8" - integrity sha512-nbTv371eTrFabDfHLElkn9oyf9VG+VKK6WMzhY2o4eHKaG19BToD9947zzGMO6I/Irstx9d8CwX6njPNIAR/yw== - dependencies: - "@babel/compat-data" "^7.17.10" - "@babel/helper-compilation-targets" "^7.17.10" - "@babel/helper-plugin-utils" "^7.17.12" - "@babel/plugin-syntax-object-rest-spread" "^7.8.3" - "@babel/plugin-transform-parameters" "^7.17.12" - -"@babel/plugin-proposal-optional-catch-binding@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.16.7.tgz#c623a430674ffc4ab732fd0a0ae7722b67cb74cf" - integrity sha512-eMOH/L4OvWSZAE1VkHbr1vckLG1WUcHGJSLqqQwl2GaUqG6QjddvrOaTUMNYiv77H5IKPMZ9U9P7EaHwvAShfA== - dependencies: - "@babel/helper-plugin-utils" "^7.16.7" - "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" - -"@babel/plugin-proposal-optional-chaining@^7.17.12": - version "7.17.12" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.17.12.tgz#f96949e9bacace3a9066323a5cf90cfb9de67174" - integrity sha512-7wigcOs/Z4YWlK7xxjkvaIw84vGhDv/P1dFGQap0nHkc8gFKY/r+hXc8Qzf5k1gY7CvGIcHqAnOagVKJJ1wVOQ== - dependencies: - "@babel/helper-plugin-utils" "^7.17.12" - "@babel/helper-skip-transparent-expression-wrappers" "^7.16.0" - "@babel/plugin-syntax-optional-chaining" "^7.8.3" - -"@babel/plugin-proposal-private-methods@^7.17.12": - version "7.17.12" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.17.12.tgz#c2ca3a80beb7539289938da005ad525a038a819c" - integrity sha512-SllXoxo19HmxhDWm3luPz+cPhtoTSKLJE9PXshsfrOzBqs60QP0r8OaJItrPhAj0d7mZMnNF0Y1UUggCDgMz1A== - dependencies: - "@babel/helper-create-class-features-plugin" "^7.17.12" - "@babel/helper-plugin-utils" "^7.17.12" - -"@babel/plugin-proposal-private-property-in-object@^7.17.12": - version "7.17.12" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.17.12.tgz#b02efb7f106d544667d91ae97405a9fd8c93952d" - integrity sha512-/6BtVi57CJfrtDNKfK5b66ydK2J5pXUKBKSPD2G1whamMuEnZWgoOIfO8Vf9F/DoD4izBLD/Au4NMQfruzzykg== - dependencies: - "@babel/helper-annotate-as-pure" "^7.16.7" - "@babel/helper-create-class-features-plugin" "^7.17.12" - "@babel/helper-plugin-utils" "^7.17.12" - "@babel/plugin-syntax-private-property-in-object" "^7.14.5" - -"@babel/plugin-proposal-unicode-property-regex@^7.17.12", "@babel/plugin-proposal-unicode-property-regex@^7.4.4": - version "7.17.12" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.17.12.tgz#3dbd7a67bd7f94c8238b394da112d86aaf32ad4d" - integrity sha512-Wb9qLjXf3ZazqXA7IvI7ozqRIXIGPtSo+L5coFmEkhTQK18ao4UDDD0zdTGAarmbLj2urpRwrc6893cu5Bfh0A== - dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.17.12" - "@babel/helper-plugin-utils" "^7.17.12" - -"@babel/plugin-syntax-async-generators@^7.8.4": - version "7.8.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz#a983fb1aeb2ec3f6ed042a210f640e90e786fe0d" - integrity sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw== - dependencies: - "@babel/helper-plugin-utils" "^7.8.0" - -"@babel/plugin-syntax-bigint@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz#4c9a6f669f5d0cdf1b90a1671e9a146be5300cea" - integrity sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg== - dependencies: - "@babel/helper-plugin-utils" "^7.8.0" - -"@babel/plugin-syntax-class-properties@^7.12.13", "@babel/plugin-syntax-class-properties@^7.8.3": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz#b5c987274c4a3a82b89714796931a6b53544ae10" - integrity sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA== - dependencies: - "@babel/helper-plugin-utils" "^7.12.13" - -"@babel/plugin-syntax-class-static-block@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz#195df89b146b4b78b3bf897fd7a257c84659d406" - integrity sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw== - dependencies: - "@babel/helper-plugin-utils" "^7.14.5" - -"@babel/plugin-syntax-dynamic-import@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz#62bf98b2da3cd21d626154fc96ee5b3cb68eacb3" - integrity sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ== - dependencies: - "@babel/helper-plugin-utils" "^7.8.0" - -"@babel/plugin-syntax-export-namespace-from@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz#028964a9ba80dbc094c915c487ad7c4e7a66465a" - integrity sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q== - dependencies: - "@babel/helper-plugin-utils" "^7.8.3" - -"@babel/plugin-syntax-import-assertions@^7.17.12": - version "7.17.12" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.17.12.tgz#58096a92b11b2e4e54b24c6a0cc0e5e607abcedd" - integrity sha512-n/loy2zkq9ZEM8tEOwON9wTQSTNDTDEz6NujPtJGLU7qObzT1N4c4YZZf8E6ATB2AjNQg/Ib2AIpO03EZaCehw== - dependencies: - "@babel/helper-plugin-utils" "^7.17.12" - -"@babel/plugin-syntax-import-meta@^7.8.3": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz#ee601348c370fa334d2207be158777496521fd51" - integrity sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g== - dependencies: - "@babel/helper-plugin-utils" "^7.10.4" - -"@babel/plugin-syntax-json-strings@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz#01ca21b668cd8218c9e640cb6dd88c5412b2c96a" - integrity sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA== - dependencies: - "@babel/helper-plugin-utils" "^7.8.0" - -"@babel/plugin-syntax-logical-assignment-operators@^7.10.4", "@babel/plugin-syntax-logical-assignment-operators@^7.8.3": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz#ca91ef46303530448b906652bac2e9fe9941f699" - integrity sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig== - dependencies: - "@babel/helper-plugin-utils" "^7.10.4" - -"@babel/plugin-syntax-nullish-coalescing-operator@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz#167ed70368886081f74b5c36c65a88c03b66d1a9" - integrity sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ== - dependencies: - "@babel/helper-plugin-utils" "^7.8.0" - -"@babel/plugin-syntax-numeric-separator@^7.10.4", "@babel/plugin-syntax-numeric-separator@^7.8.3": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz#b9b070b3e33570cd9fd07ba7fa91c0dd37b9af97" - integrity sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug== - dependencies: - "@babel/helper-plugin-utils" "^7.10.4" - -"@babel/plugin-syntax-object-rest-spread@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz#60e225edcbd98a640332a2e72dd3e66f1af55871" - integrity sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA== - dependencies: - "@babel/helper-plugin-utils" "^7.8.0" - -"@babel/plugin-syntax-optional-catch-binding@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz#6111a265bcfb020eb9efd0fdfd7d26402b9ed6c1" - integrity sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q== - dependencies: - "@babel/helper-plugin-utils" "^7.8.0" - -"@babel/plugin-syntax-optional-chaining@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz#4f69c2ab95167e0180cd5336613f8c5788f7d48a" - integrity sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg== - dependencies: - "@babel/helper-plugin-utils" "^7.8.0" - -"@babel/plugin-syntax-private-property-in-object@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz#0dc6671ec0ea22b6e94a1114f857970cd39de1ad" - integrity sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg== - dependencies: - "@babel/helper-plugin-utils" "^7.14.5" - -"@babel/plugin-syntax-top-level-await@^7.14.5", "@babel/plugin-syntax-top-level-await@^7.8.3": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz#c1cfdadc35a646240001f06138247b741c34d94c" - integrity sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw== - dependencies: - "@babel/helper-plugin-utils" "^7.14.5" - -"@babel/plugin-transform-arrow-functions@^7.17.12": - version "7.17.12" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.17.12.tgz#dddd783b473b1b1537ef46423e3944ff24898c45" - integrity sha512-PHln3CNi/49V+mza4xMwrg+WGYevSF1oaiXaC2EQfdp4HWlSjRsrDXWJiQBKpP7749u6vQ9mcry2uuFOv5CXvA== - dependencies: - "@babel/helper-plugin-utils" "^7.17.12" - -"@babel/plugin-transform-async-to-generator@^7.17.12": - version "7.17.12" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.17.12.tgz#dbe5511e6b01eee1496c944e35cdfe3f58050832" - integrity sha512-J8dbrWIOO3orDzir57NRsjg4uxucvhby0L/KZuGsWDj0g7twWK3g7JhJhOrXtuXiw8MeiSdJ3E0OW9H8LYEzLQ== - dependencies: - "@babel/helper-module-imports" "^7.16.7" - "@babel/helper-plugin-utils" "^7.17.12" - "@babel/helper-remap-async-to-generator" "^7.16.8" - -"@babel/plugin-transform-block-scoped-functions@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.16.7.tgz#4d0d57d9632ef6062cdf354bb717102ee042a620" - integrity sha512-JUuzlzmF40Z9cXyytcbZEZKckgrQzChbQJw/5PuEHYeqzCsvebDx0K0jWnIIVcmmDOAVctCgnYs0pMcrYj2zJg== - dependencies: - "@babel/helper-plugin-utils" "^7.16.7" - -"@babel/plugin-transform-block-scoping@^7.17.12": - version "7.18.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.18.4.tgz#7988627b3e9186a13e4d7735dc9c34a056613fb9" - integrity sha512-+Hq10ye+jlvLEogSOtq4mKvtk7qwcUQ1f0Mrueai866C82f844Yom2cttfJdMdqRLTxWpsbfbkIkOIfovyUQXw== - dependencies: - "@babel/helper-plugin-utils" "^7.17.12" - -"@babel/plugin-transform-classes@^7.17.12": - version "7.18.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.18.4.tgz#51310b812a090b846c784e47087fa6457baef814" - integrity sha512-e42NSG2mlKWgxKUAD9EJJSkZxR67+wZqzNxLSpc51T8tRU5SLFHsPmgYR5yr7sdgX4u+iHA1C5VafJ6AyImV3A== - dependencies: - "@babel/helper-annotate-as-pure" "^7.16.7" - "@babel/helper-environment-visitor" "^7.18.2" - "@babel/helper-function-name" "^7.17.9" - "@babel/helper-optimise-call-expression" "^7.16.7" - "@babel/helper-plugin-utils" "^7.17.12" - "@babel/helper-replace-supers" "^7.18.2" - "@babel/helper-split-export-declaration" "^7.16.7" - globals "^11.1.0" - -"@babel/plugin-transform-computed-properties@^7.17.12": - version "7.17.12" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.17.12.tgz#bca616a83679698f3258e892ed422546e531387f" - integrity sha512-a7XINeplB5cQUWMg1E/GI1tFz3LfK021IjV1rj1ypE+R7jHm+pIHmHl25VNkZxtx9uuYp7ThGk8fur1HHG7PgQ== - dependencies: - "@babel/helper-plugin-utils" "^7.17.12" - -"@babel/plugin-transform-destructuring@^7.18.0": - version "7.18.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.18.0.tgz#dc4f92587e291b4daa78aa20cc2d7a63aa11e858" - integrity sha512-Mo69klS79z6KEfrLg/1WkmVnB8javh75HX4pi2btjvlIoasuxilEyjtsQW6XPrubNd7AQy0MMaNIaQE4e7+PQw== - dependencies: - "@babel/helper-plugin-utils" "^7.17.12" - -"@babel/plugin-transform-dotall-regex@^7.16.7", "@babel/plugin-transform-dotall-regex@^7.4.4": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.16.7.tgz#6b2d67686fab15fb6a7fd4bd895d5982cfc81241" - integrity sha512-Lyttaao2SjZF6Pf4vk1dVKv8YypMpomAbygW+mU5cYP3S5cWTfCJjG8xV6CFdzGFlfWK81IjL9viiTvpb6G7gQ== - dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.16.7" - "@babel/helper-plugin-utils" "^7.16.7" - -"@babel/plugin-transform-duplicate-keys@^7.17.12": - version "7.17.12" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.17.12.tgz#a09aa709a3310013f8e48e0e23bc7ace0f21477c" - integrity sha512-EA5eYFUG6xeerdabina/xIoB95jJ17mAkR8ivx6ZSu9frKShBjpOGZPn511MTDTkiCO+zXnzNczvUM69YSf3Zw== - dependencies: - "@babel/helper-plugin-utils" "^7.17.12" - -"@babel/plugin-transform-exponentiation-operator@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.16.7.tgz#efa9862ef97e9e9e5f653f6ddc7b665e8536fe9b" - integrity sha512-8UYLSlyLgRixQvlYH3J2ekXFHDFLQutdy7FfFAMm3CPZ6q9wHCwnUyiXpQCe3gVVnQlHc5nsuiEVziteRNTXEA== - dependencies: - "@babel/helper-builder-binary-assignment-operator-visitor" "^7.16.7" - "@babel/helper-plugin-utils" "^7.16.7" - -"@babel/plugin-transform-for-of@^7.18.1": - version "7.18.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.18.1.tgz#ed14b657e162b72afbbb2b4cdad277bf2bb32036" - integrity sha512-+TTB5XwvJ5hZbO8xvl2H4XaMDOAK57zF4miuC9qQJgysPNEAZZ9Z69rdF5LJkozGdZrjBIUAIyKUWRMmebI7vg== - dependencies: - "@babel/helper-plugin-utils" "^7.17.12" - -"@babel/plugin-transform-function-name@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.16.7.tgz#5ab34375c64d61d083d7d2f05c38d90b97ec65cf" - integrity sha512-SU/C68YVwTRxqWj5kgsbKINakGag0KTgq9f2iZEXdStoAbOzLHEBRYzImmA6yFo8YZhJVflvXmIHUO7GWHmxxA== - dependencies: - "@babel/helper-compilation-targets" "^7.16.7" - "@babel/helper-function-name" "^7.16.7" - "@babel/helper-plugin-utils" "^7.16.7" - -"@babel/plugin-transform-literals@^7.17.12": - version "7.17.12" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.17.12.tgz#97131fbc6bbb261487105b4b3edbf9ebf9c830ae" - integrity sha512-8iRkvaTjJciWycPIZ9k9duu663FT7VrBdNqNgxnVXEFwOIp55JWcZd23VBRySYbnS3PwQ3rGiabJBBBGj5APmQ== - dependencies: - "@babel/helper-plugin-utils" "^7.17.12" - -"@babel/plugin-transform-member-expression-literals@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.16.7.tgz#6e5dcf906ef8a098e630149d14c867dd28f92384" - integrity sha512-mBruRMbktKQwbxaJof32LT9KLy2f3gH+27a5XSuXo6h7R3vqltl0PgZ80C8ZMKw98Bf8bqt6BEVi3svOh2PzMw== - dependencies: - "@babel/helper-plugin-utils" "^7.16.7" - -"@babel/plugin-transform-modules-amd@^7.18.0": - version "7.18.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.18.0.tgz#7ef1002e67e36da3155edc8bf1ac9398064c02ed" - integrity sha512-h8FjOlYmdZwl7Xm2Ug4iX2j7Qy63NANI+NQVWQzv6r25fqgg7k2dZl03p95kvqNclglHs4FZ+isv4p1uXMA+QA== - dependencies: - "@babel/helper-module-transforms" "^7.18.0" - "@babel/helper-plugin-utils" "^7.17.12" - babel-plugin-dynamic-import-node "^2.3.3" - -"@babel/plugin-transform-modules-commonjs@^7.18.2": - version "7.18.2" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.18.2.tgz#1aa8efa2e2a6e818b6a7f2235fceaf09bdb31e9e" - integrity sha512-f5A865gFPAJAEE0K7F/+nm5CmAE3y8AWlMBG9unu5j9+tk50UQVK0QS8RNxSp7MJf0wh97uYyLWt3Zvu71zyOQ== - dependencies: - "@babel/helper-module-transforms" "^7.18.0" - "@babel/helper-plugin-utils" "^7.17.12" - "@babel/helper-simple-access" "^7.18.2" - babel-plugin-dynamic-import-node "^2.3.3" - -"@babel/plugin-transform-modules-systemjs@^7.18.0": - version "7.18.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.18.5.tgz#87f11c44fbfd3657be000d4897e192d9cb535996" - integrity sha512-SEewrhPpcqMF1V7DhnEbhVJLrC+nnYfe1E0piZMZXBpxi9WvZqWGwpsk7JYP7wPWeqaBh4gyKlBhHJu3uz5g4Q== - dependencies: - "@babel/helper-hoist-variables" "^7.16.7" - "@babel/helper-module-transforms" "^7.18.0" - "@babel/helper-plugin-utils" "^7.17.12" - "@babel/helper-validator-identifier" "^7.16.7" - babel-plugin-dynamic-import-node "^2.3.3" - -"@babel/plugin-transform-modules-umd@^7.18.0": - version "7.18.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.18.0.tgz#56aac64a2c2a1922341129a4597d1fd5c3ff020f" - integrity sha512-d/zZ8I3BWli1tmROLxXLc9A6YXvGK8egMxHp+E/rRwMh1Kip0AP77VwZae3snEJ33iiWwvNv2+UIIhfalqhzZA== - dependencies: - "@babel/helper-module-transforms" "^7.18.0" - "@babel/helper-plugin-utils" "^7.17.12" - -"@babel/plugin-transform-named-capturing-groups-regex@^7.17.12": - version "7.17.12" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.17.12.tgz#9c4a5a5966e0434d515f2675c227fd8cc8606931" - integrity sha512-vWoWFM5CKaTeHrdUJ/3SIOTRV+MBVGybOC9mhJkaprGNt5demMymDW24yC74avb915/mIRe3TgNb/d8idvnCRA== - dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.17.12" - "@babel/helper-plugin-utils" "^7.17.12" - -"@babel/plugin-transform-new-target@^7.17.12": - version "7.18.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.18.5.tgz#8c228c4a07501dd12c95c5f23d1622131cc23931" - integrity sha512-TuRL5uGW4KXU6OsRj+mLp9BM7pO8e7SGNTEokQRRxHFkXYMFiy2jlKSZPFtI/mKORDzciH+hneskcSOp0gU8hg== - dependencies: - "@babel/helper-plugin-utils" "^7.17.12" - -"@babel/plugin-transform-object-super@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.16.7.tgz#ac359cf8d32cf4354d27a46867999490b6c32a94" - integrity sha512-14J1feiQVWaGvRxj2WjyMuXS2jsBkgB3MdSN5HuC2G5nRspa5RK9COcs82Pwy5BuGcjb+fYaUj94mYcOj7rCvw== - dependencies: - "@babel/helper-plugin-utils" "^7.16.7" - "@babel/helper-replace-supers" "^7.16.7" - -"@babel/plugin-transform-parameters@^7.17.12": - version "7.17.12" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.17.12.tgz#eb467cd9586ff5ff115a9880d6fdbd4a846b7766" - integrity sha512-6qW4rWo1cyCdq1FkYri7AHpauchbGLXpdwnYsfxFb+KtddHENfsY5JZb35xUwkK5opOLcJ3BNd2l7PhRYGlwIA== - dependencies: - "@babel/helper-plugin-utils" "^7.17.12" - -"@babel/plugin-transform-property-literals@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.16.7.tgz#2dadac85155436f22c696c4827730e0fe1057a55" - integrity sha512-z4FGr9NMGdoIl1RqavCqGG+ZuYjfZ/hkCIeuH6Do7tXmSm0ls11nYVSJqFEUOSJbDab5wC6lRE/w6YjVcr6Hqw== - dependencies: - "@babel/helper-plugin-utils" "^7.16.7" - -"@babel/plugin-transform-regenerator@^7.18.0": - version "7.18.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.18.0.tgz#44274d655eb3f1af3f3a574ba819d3f48caf99d5" - integrity sha512-C8YdRw9uzx25HSIzwA7EM7YP0FhCe5wNvJbZzjVNHHPGVcDJ3Aie+qGYYdS1oVQgn+B3eAIJbWFLrJ4Jipv7nw== - dependencies: - "@babel/helper-plugin-utils" "^7.17.12" - regenerator-transform "^0.15.0" - -"@babel/plugin-transform-reserved-words@^7.17.12": - version "7.17.12" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.17.12.tgz#7dbd349f3cdffba751e817cf40ca1386732f652f" - integrity sha512-1KYqwbJV3Co03NIi14uEHW8P50Md6KqFgt0FfpHdK6oyAHQVTosgPuPSiWud1HX0oYJ1hGRRlk0fP87jFpqXZA== - dependencies: - "@babel/helper-plugin-utils" "^7.17.12" - -"@babel/plugin-transform-shorthand-properties@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.16.7.tgz#e8549ae4afcf8382f711794c0c7b6b934c5fbd2a" - integrity sha512-hah2+FEnoRoATdIb05IOXf+4GzXYTq75TVhIn1PewihbpyrNWUt2JbudKQOETWw6QpLe+AIUpJ5MVLYTQbeeUg== - dependencies: - "@babel/helper-plugin-utils" "^7.16.7" - -"@babel/plugin-transform-spread@^7.17.12": - version "7.17.12" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.17.12.tgz#c112cad3064299f03ea32afed1d659223935d1f5" - integrity sha512-9pgmuQAtFi3lpNUstvG9nGfk9DkrdmWNp9KeKPFmuZCpEnxRzYlS8JgwPjYj+1AWDOSvoGN0H30p1cBOmT/Svg== - dependencies: - "@babel/helper-plugin-utils" "^7.17.12" - "@babel/helper-skip-transparent-expression-wrappers" "^7.16.0" - -"@babel/plugin-transform-sticky-regex@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.16.7.tgz#c84741d4f4a38072b9a1e2e3fd56d359552e8660" - integrity sha512-NJa0Bd/87QV5NZZzTuZG5BPJjLYadeSZ9fO6oOUoL4iQx+9EEuw/eEM92SrsT19Yc2jgB1u1hsjqDtH02c3Drw== - dependencies: - "@babel/helper-plugin-utils" "^7.16.7" - -"@babel/plugin-transform-template-literals@^7.18.2": - version "7.18.2" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.18.2.tgz#31ed6915721864847c48b656281d0098ea1add28" - integrity sha512-/cmuBVw9sZBGZVOMkpAEaVLwm4JmK2GZ1dFKOGGpMzEHWFmyZZ59lUU0PdRr8YNYeQdNzTDwuxP2X2gzydTc9g== - dependencies: - "@babel/helper-plugin-utils" "^7.17.12" - -"@babel/plugin-transform-typeof-symbol@^7.17.12": - version "7.17.12" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.17.12.tgz#0f12f57ac35e98b35b4ed34829948d42bd0e6889" - integrity sha512-Q8y+Jp7ZdtSPXCThB6zjQ74N3lj0f6TDh1Hnf5B+sYlzQ8i5Pjp8gW0My79iekSpT4WnI06blqP6DT0OmaXXmw== - dependencies: - "@babel/helper-plugin-utils" "^7.17.12" - -"@babel/plugin-transform-unicode-escapes@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.16.7.tgz#da8717de7b3287a2c6d659750c964f302b31ece3" - integrity sha512-TAV5IGahIz3yZ9/Hfv35TV2xEm+kaBDaZQCn2S/hG9/CZ0DktxJv9eKfPc7yYCvOYR4JGx1h8C+jcSOvgaaI/Q== - dependencies: - "@babel/helper-plugin-utils" "^7.16.7" - -"@babel/plugin-transform-unicode-regex@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.16.7.tgz#0f7aa4a501198976e25e82702574c34cfebe9ef2" - integrity sha512-oC5tYYKw56HO75KZVLQ+R/Nl3Hro9kf8iG0hXoaHP7tjAyCpvqBiSNe6vGrZni1Z6MggmUOC6A7VP7AVmw225Q== - dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.16.7" - "@babel/helper-plugin-utils" "^7.16.7" - -"@babel/preset-env@^7.4.3": - version "7.18.2" - resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.18.2.tgz#f47d3000a098617926e674c945d95a28cb90977a" - integrity sha512-PfpdxotV6afmXMU47S08F9ZKIm2bJIQ0YbAAtDfIENX7G1NUAXigLREh69CWDjtgUy7dYn7bsMzkgdtAlmS68Q== - dependencies: - "@babel/compat-data" "^7.17.10" - "@babel/helper-compilation-targets" "^7.18.2" - "@babel/helper-plugin-utils" "^7.17.12" - "@babel/helper-validator-option" "^7.16.7" - "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression" "^7.17.12" - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining" "^7.17.12" - "@babel/plugin-proposal-async-generator-functions" "^7.17.12" - "@babel/plugin-proposal-class-properties" "^7.17.12" - "@babel/plugin-proposal-class-static-block" "^7.18.0" - "@babel/plugin-proposal-dynamic-import" "^7.16.7" - "@babel/plugin-proposal-export-namespace-from" "^7.17.12" - "@babel/plugin-proposal-json-strings" "^7.17.12" - "@babel/plugin-proposal-logical-assignment-operators" "^7.17.12" - "@babel/plugin-proposal-nullish-coalescing-operator" "^7.17.12" - "@babel/plugin-proposal-numeric-separator" "^7.16.7" - "@babel/plugin-proposal-object-rest-spread" "^7.18.0" - "@babel/plugin-proposal-optional-catch-binding" "^7.16.7" - "@babel/plugin-proposal-optional-chaining" "^7.17.12" - "@babel/plugin-proposal-private-methods" "^7.17.12" - "@babel/plugin-proposal-private-property-in-object" "^7.17.12" - "@babel/plugin-proposal-unicode-property-regex" "^7.17.12" - "@babel/plugin-syntax-async-generators" "^7.8.4" - "@babel/plugin-syntax-class-properties" "^7.12.13" - "@babel/plugin-syntax-class-static-block" "^7.14.5" - "@babel/plugin-syntax-dynamic-import" "^7.8.3" - "@babel/plugin-syntax-export-namespace-from" "^7.8.3" - "@babel/plugin-syntax-import-assertions" "^7.17.12" - "@babel/plugin-syntax-json-strings" "^7.8.3" - "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" - "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" - "@babel/plugin-syntax-numeric-separator" "^7.10.4" - "@babel/plugin-syntax-object-rest-spread" "^7.8.3" - "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" - "@babel/plugin-syntax-optional-chaining" "^7.8.3" - "@babel/plugin-syntax-private-property-in-object" "^7.14.5" - "@babel/plugin-syntax-top-level-await" "^7.14.5" - "@babel/plugin-transform-arrow-functions" "^7.17.12" - "@babel/plugin-transform-async-to-generator" "^7.17.12" - "@babel/plugin-transform-block-scoped-functions" "^7.16.7" - "@babel/plugin-transform-block-scoping" "^7.17.12" - "@babel/plugin-transform-classes" "^7.17.12" - "@babel/plugin-transform-computed-properties" "^7.17.12" - "@babel/plugin-transform-destructuring" "^7.18.0" - "@babel/plugin-transform-dotall-regex" "^7.16.7" - "@babel/plugin-transform-duplicate-keys" "^7.17.12" - "@babel/plugin-transform-exponentiation-operator" "^7.16.7" - "@babel/plugin-transform-for-of" "^7.18.1" - "@babel/plugin-transform-function-name" "^7.16.7" - "@babel/plugin-transform-literals" "^7.17.12" - "@babel/plugin-transform-member-expression-literals" "^7.16.7" - "@babel/plugin-transform-modules-amd" "^7.18.0" - "@babel/plugin-transform-modules-commonjs" "^7.18.2" - "@babel/plugin-transform-modules-systemjs" "^7.18.0" - "@babel/plugin-transform-modules-umd" "^7.18.0" - "@babel/plugin-transform-named-capturing-groups-regex" "^7.17.12" - "@babel/plugin-transform-new-target" "^7.17.12" - "@babel/plugin-transform-object-super" "^7.16.7" - "@babel/plugin-transform-parameters" "^7.17.12" - "@babel/plugin-transform-property-literals" "^7.16.7" - "@babel/plugin-transform-regenerator" "^7.18.0" - "@babel/plugin-transform-reserved-words" "^7.17.12" - "@babel/plugin-transform-shorthand-properties" "^7.16.7" - "@babel/plugin-transform-spread" "^7.17.12" - "@babel/plugin-transform-sticky-regex" "^7.16.7" - "@babel/plugin-transform-template-literals" "^7.18.2" - "@babel/plugin-transform-typeof-symbol" "^7.17.12" - "@babel/plugin-transform-unicode-escapes" "^7.16.7" - "@babel/plugin-transform-unicode-regex" "^7.16.7" - "@babel/preset-modules" "^0.1.5" - "@babel/types" "^7.18.2" - babel-plugin-polyfill-corejs2 "^0.3.0" - babel-plugin-polyfill-corejs3 "^0.5.0" - babel-plugin-polyfill-regenerator "^0.3.0" - core-js-compat "^3.22.1" - semver "^6.3.0" - -"@babel/preset-modules@^0.1.5": - version "0.1.5" - resolved "https://registry.yarnpkg.com/@babel/preset-modules/-/preset-modules-0.1.5.tgz#ef939d6e7f268827e1841638dc6ff95515e115d9" - integrity sha512-A57th6YRG7oR3cq/yt/Y84MvGgE0eJG2F1JLhKuyG+jFxEgrd/HAMJatiFtmOiZurz+0DkrvbheCLaV5f2JfjA== - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/plugin-proposal-unicode-property-regex" "^7.4.4" - "@babel/plugin-transform-dotall-regex" "^7.4.4" - "@babel/types" "^7.4.4" - esutils "^2.0.2" - -"@babel/runtime@^7.1.2", "@babel/runtime@^7.8.4": - version "7.21.0" - resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.21.0.tgz#5b55c9d394e5fcf304909a8b00c07dc217b56673" - integrity sha512-xwII0//EObnq89Ji5AKYQaRYiW/nZ3llSv29d49IuxPhKbtJoLP+9QUUZ4nVragQVtaVGeZrpB+ZtG/Pdy/POw== - dependencies: - regenerator-runtime "^0.13.11" - -"@babel/template@^7.16.7", "@babel/template@^7.20.7", "@babel/template@^7.3.3": - version "7.20.7" - resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.20.7.tgz#a15090c2839a83b02aa996c0b4994005841fd5a8" - integrity sha512-8SegXApWe6VoNw0r9JHpSteLKTpTiLZ4rMlGIm9JQ18KiCtyQiAMEazujAHrUS5flrcqYZa75ukev3P6QmUwUw== - dependencies: - "@babel/code-frame" "^7.18.6" - "@babel/parser" "^7.20.7" - "@babel/types" "^7.20.7" - -"@babel/traverse@^7.1.0", "@babel/traverse@^7.13.0", "@babel/traverse@^7.16.8", "@babel/traverse@^7.18.2", "@babel/traverse@^7.21.0", "@babel/traverse@^7.21.2": - version "7.21.2" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.21.2.tgz#ac7e1f27658750892e815e60ae90f382a46d8e75" - integrity sha512-ts5FFU/dSUPS13tv8XiEObDu9K+iagEKME9kAbaP7r0Y9KtZJZ+NGndDvWoRAYNpeWafbpFeki3q9QoMD6gxyw== - dependencies: - "@babel/code-frame" "^7.18.6" - "@babel/generator" "^7.21.1" - "@babel/helper-environment-visitor" "^7.18.9" - "@babel/helper-function-name" "^7.21.0" - "@babel/helper-hoist-variables" "^7.18.6" - "@babel/helper-split-export-declaration" "^7.18.6" - "@babel/parser" "^7.21.2" - "@babel/types" "^7.21.2" - debug "^4.1.0" - globals "^11.1.0" - -"@babel/types@^7.0.0", "@babel/types@^7.16.0", "@babel/types@^7.16.7", "@babel/types@^7.16.8", "@babel/types@^7.17.0", "@babel/types@^7.18.2", "@babel/types@^7.18.6", "@babel/types@^7.20.2", "@babel/types@^7.20.7", "@babel/types@^7.21.0", "@babel/types@^7.21.2", "@babel/types@^7.3.0", "@babel/types@^7.3.3", "@babel/types@^7.4.4": - version "7.21.2" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.21.2.tgz#92246f6e00f91755893c2876ad653db70c8310d1" - integrity sha512-3wRZSs7jiFaB8AjxiiD+VqN5DTG2iRvJGQ+qYFrs/654lg6kGTQWIOFjlBo5RaXuAZjBmP3+OQH4dmhqiiyYxw== - dependencies: - "@babel/helper-string-parser" "^7.19.4" - "@babel/helper-validator-identifier" "^7.19.1" - to-fast-properties "^2.0.0" - -"@bcoe/v8-coverage@^0.2.3": - version "0.2.3" - resolved "https://registry.yarnpkg.com/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz#75a2e8b51cb758a7553d6804a5932d7aace75c39" - integrity sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw== - -"@blueprintjs/colors@^4.0.0-alpha.3": - version "4.1.19" - resolved "https://registry.yarnpkg.com/@blueprintjs/colors/-/colors-4.1.19.tgz#364d4d5d23ecee48002d6b29c71a8a24af5512ae" - integrity sha512-x5mDo4Ue9rAdbMHvOm0dNru9MSZqgs9Dd/l/2rgjzottthjsq1XjkiVae6evX4EGNM0I/bZKjTT8ccvqCqn4yw== - -"@blueprintjs/core@^3.36.0", "@blueprintjs/core@^3.54.0": - version "3.54.0" - resolved "https://registry.yarnpkg.com/@blueprintjs/core/-/core-3.54.0.tgz#7269f34eccdf0d2874377c5ad973ca2a31562221" - integrity sha512-u2c1s6MNn0ocxhnC6CuiG5g3KV6b4cKUvSobznepA9SC3/AL1s3XOvT7DLWoHRv2B/vBOHFYEDzLw2/vlcGGZg== - dependencies: - "@blueprintjs/colors" "^4.0.0-alpha.3" - "@blueprintjs/icons" "^3.33.0" - "@juggle/resize-observer" "^3.3.1" - "@types/dom4" "^2.0.1" - classnames "^2.2" - dom4 "^2.1.5" - normalize.css "^8.0.1" - popper.js "^1.16.1" - react-lifecycles-compat "^3.0.4" - react-popper "^1.3.7" - react-transition-group "^2.9.0" - tslib "~2.3.1" - -"@blueprintjs/icons@^3.33.0": - version "3.33.0" - resolved "https://registry.yarnpkg.com/@blueprintjs/icons/-/icons-3.33.0.tgz#4dacdb7731abdf08d1ab240f3a23a185df60918b" - integrity sha512-Q6qoSDIm0kRYQZISm59UUcDCpV3oeHulkLuh3bSlw0HhcSjvEQh2PSYbtaifM60Q4aK4PCd6bwJHg7lvF1x5fQ== - dependencies: - classnames "^2.2" - tslib "~2.3.1" - -"@blueprintjs/select@^3.15.0": - version "3.19.1" - resolved "https://registry.yarnpkg.com/@blueprintjs/select/-/select-3.19.1.tgz#b5e8baa6f182a0647651a57fde8d1d97eaa1e997" - integrity sha512-8UJIZMaWXRMQHr14wbmzJc/CklcSKxOU5JUux0xXKQz/hDW/g1a650tlwJmnxufvRdShbGinlVfHupCs0EL6sw== - dependencies: - "@blueprintjs/core" "^3.54.0" - classnames "^2.2" - tslib "~2.3.1" - -"@cnakazawa/watch@^1.0.3": - version "1.0.4" - resolved "https://registry.yarnpkg.com/@cnakazawa/watch/-/watch-1.0.4.tgz#f864ae85004d0fcab6f50be9141c4da368d1656a" - integrity sha512-v9kIhKwjeZThiWrLmj0y17CWoyddASLj9O2yvbZkbvw/N3rWOYy9zkV66ursAoVr0mV15bL8g0c4QZUE6cdDoQ== - dependencies: - exec-sh "^0.3.2" - minimist "^1.2.0" - -"@discoveryjs/json-ext@^0.5.0": - version "0.5.7" - resolved "https://registry.yarnpkg.com/@discoveryjs/json-ext/-/json-ext-0.5.7.tgz#1d572bfbbe14b7704e0ba0f39b74815b84870d70" - integrity sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw== - -"@eslint/eslintrc@^1.3.3": - version "1.3.3" - resolved "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.3.3.tgz#2b044ab39fdfa75b4688184f9e573ce3c5b0ff95" - integrity sha512-uj3pT6Mg+3t39fvLrj8iuCIJ38zKO9FpGtJ4BBJebJhEwjoT+KLVNCcHT5QC9NGRIEi7fZ0ZR8YRb884auB4Lg== - dependencies: - ajv "^6.12.4" - debug "^4.3.2" - espree "^9.4.0" - globals "^13.15.0" - ignore "^5.2.0" - import-fresh "^3.2.1" - js-yaml "^4.1.0" - minimatch "^3.1.2" - strip-json-comments "^3.1.1" - -"@fortawesome/fontawesome-free@^5.12.0": - version "5.15.4" - resolved "https://registry.yarnpkg.com/@fortawesome/fontawesome-free/-/fontawesome-free-5.15.4.tgz#ecda5712b61ac852c760d8b3c79c96adca5554e5" - integrity sha512-eYm8vijH/hpzr/6/1CJ/V/Eb1xQFW2nnUKArb3z+yUWv7HTwj6M7SP957oMjfZjAHU6qpoNc2wQvIxBLWYa/Jg== - -"@gar/promisify@^1.0.1", "@gar/promisify@^1.1.3": - version "1.1.3" - resolved "https://registry.yarnpkg.com/@gar/promisify/-/promisify-1.1.3.tgz#555193ab2e3bb3b6adc3d551c9c030d9e860daf6" - integrity sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw== - -"@google-cloud/bigquery@^5.9.0": - version "5.12.0" - resolved "https://registry.yarnpkg.com/@google-cloud/bigquery/-/bigquery-5.12.0.tgz#11158b940d1086f7b98af426249e10ae053694a0" - integrity sha512-UaIvvuKpyJhCRBkxEJXnJwvxOxkGoZHvSs9IsS0MNUS4YphcbWYOyzRMufV5gxdsr7XNSd+36Nj/n/7vyZiCqQ== - dependencies: - "@google-cloud/common" "^3.9.0" - "@google-cloud/paginator" "^3.0.0" - "@google-cloud/promisify" "^2.0.0" - arrify "^2.0.1" - big.js "^6.0.0" - duplexify "^4.0.0" - extend "^3.0.2" - is "^3.3.0" - p-event "^4.1.0" - readable-stream "^3.6.0" - stream-events "^1.0.5" - uuid "^8.0.0" - -"@google-cloud/common@^3.9.0": - version "3.10.0" - resolved "https://registry.yarnpkg.com/@google-cloud/common/-/common-3.10.0.tgz#454d1155bb512109cd83c6183aabbd39f9aabda7" - integrity sha512-XMbJYMh/ZSaZnbnrrOFfR/oQrb0SxG4qh6hDisWCoEbFcBHV0qHQo4uXfeMCzolx2Mfkh6VDaOGg+hyJsmxrlw== - dependencies: - "@google-cloud/projectify" "^2.0.0" - "@google-cloud/promisify" "^2.0.0" - arrify "^2.0.1" - duplexify "^4.1.1" - ent "^2.2.0" - extend "^3.0.2" - google-auth-library "^7.14.0" - retry-request "^4.2.2" - teeny-request "^7.0.0" - -"@google-cloud/paginator@^3.0.0": - version "3.0.7" - resolved "https://registry.yarnpkg.com/@google-cloud/paginator/-/paginator-3.0.7.tgz#fb6f8e24ec841f99defaebf62c75c2e744dd419b" - integrity sha512-jJNutk0arIQhmpUUQJPJErsojqo834KcyB6X7a1mxuic8i1tKXxde8E69IZxNZawRIlZdIK2QY4WALvlK5MzYQ== - dependencies: - arrify "^2.0.0" - extend "^3.0.2" - -"@google-cloud/projectify@^2.0.0": - version "2.1.1" - resolved "https://registry.yarnpkg.com/@google-cloud/projectify/-/projectify-2.1.1.tgz#ae6af4fee02d78d044ae434699a630f8df0084ef" - integrity sha512-+rssMZHnlh0twl122gXY4/aCrk0G1acBqkHFfYddtsqpYXGxA29nj9V5V9SfC+GyOG00l650f6lG9KL+EpFEWQ== - -"@google-cloud/promisify@^2.0.0": - version "2.0.4" - resolved "https://registry.yarnpkg.com/@google-cloud/promisify/-/promisify-2.0.4.tgz#9d8705ecb2baa41b6b2673f3a8e9b7b7e1abc52a" - integrity sha512-j8yRSSqswWi1QqUGKVEKOG03Q7qOoZP6/h2zN2YO+F5h2+DHU0bSrHCK9Y7lo2DI9fBd8qGAw795sf+3Jva4yA== - -"@humanwhocodes/config-array@^0.11.6": - version "0.11.7" - resolved "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.7.tgz#38aec044c6c828f6ed51d5d7ae3d9b9faf6dbb0f" - integrity sha512-kBbPWzN8oVMLb0hOUYXhmxggL/1cJE6ydvjDIGi9EnAGUyA7cLVKQg+d/Dsm+KZwx2czGHrCmMVLiyg8s5JPKw== - dependencies: - "@humanwhocodes/object-schema" "^1.2.1" - debug "^4.1.1" - minimatch "^3.0.5" - -"@humanwhocodes/module-importer@^1.0.1": - version "1.0.1" - resolved "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz#af5b2691a22b44be847b0ca81641c5fb6ad0172c" - integrity sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA== - -"@humanwhocodes/object-schema@^1.2.1": - version "1.2.1" - resolved "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz#b520529ec21d8e5945a1851dfd1c32e94e39ff45" - integrity sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA== - -"@hutson/parse-repository-url@^3.0.0": - version "3.0.2" - resolved "https://registry.yarnpkg.com/@hutson/parse-repository-url/-/parse-repository-url-3.0.2.tgz#98c23c950a3d9b6c8f0daed06da6c3af06981340" - integrity sha512-H9XAx3hc0BQHY6l+IFSWHDySypcXsvsuLhgYLUGywmJ5pswRVQJUHpOsobnLYp2ZUaUlKiKDrgWWhosOwAEM8Q== - -"@hypnosphi/create-react-context@^0.3.1": - version "0.3.1" - resolved "https://registry.yarnpkg.com/@hypnosphi/create-react-context/-/create-react-context-0.3.1.tgz#f8bfebdc7665f5d426cba3753e0e9c7d3154d7c6" - integrity sha512-V1klUed202XahrWJLLOT3EXNeCpFHCcJntdFGI15ntCwau+jfT386w7OFTMaCqOgXUH1fa0w/I1oZs+i/Rfr0A== - dependencies: - gud "^1.0.0" - warning "^4.0.3" - -"@isaacs/string-locale-compare@^1.1.0": - version "1.1.0" - resolved "https://registry.yarnpkg.com/@isaacs/string-locale-compare/-/string-locale-compare-1.1.0.tgz#291c227e93fd407a96ecd59879a35809120e432b" - integrity sha512-SQ7Kzhh9+D+ZW9MA0zkYv3VXhIDNx+LzM6EJ+/65I3QY+enU6Itte7E5XX7EWrqLW2FN4n06GWzBnPoC3th2aQ== - -"@istanbuljs/load-nyc-config@^1.0.0": - version "1.1.0" - resolved "https://registry.yarnpkg.com/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz#fd3db1d59ecf7cf121e80650bb86712f9b55eced" - integrity sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ== - 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" - -"@istanbuljs/schema@^0.1.2": - version "0.1.3" - resolved "https://registry.yarnpkg.com/@istanbuljs/schema/-/schema-0.1.3.tgz#e45e384e4b8ec16bce2fd903af78450f6bf7ec98" - integrity sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA== - -"@jest/console@^26.6.2": - version "26.6.2" - resolved "https://registry.yarnpkg.com/@jest/console/-/console-26.6.2.tgz#4e04bc464014358b03ab4937805ee36a0aeb98f2" - integrity sha512-IY1R2i2aLsLr7Id3S6p2BA82GNWryt4oSvEXLAKc+L2zdi89dSkE8xC1C+0kpATG4JhBJREnQOH7/zmccM2B0g== - dependencies: - "@jest/types" "^26.6.2" - "@types/node" "*" - chalk "^4.0.0" - jest-message-util "^26.6.2" - jest-util "^26.6.2" - slash "^3.0.0" - -"@jest/core@^26.6.3": - version "26.6.3" - resolved "https://registry.yarnpkg.com/@jest/core/-/core-26.6.3.tgz#7639fcb3833d748a4656ada54bde193051e45fad" - integrity sha512-xvV1kKbhfUqFVuZ8Cyo+JPpipAHHAV3kcDBftiduK8EICXmTFddryy3P7NfZt8Pv37rA9nEJBKCCkglCPt/Xjw== - dependencies: - "@jest/console" "^26.6.2" - "@jest/reporters" "^26.6.2" - "@jest/test-result" "^26.6.2" - "@jest/transform" "^26.6.2" - "@jest/types" "^26.6.2" - "@types/node" "*" - ansi-escapes "^4.2.1" - chalk "^4.0.0" - exit "^0.1.2" - graceful-fs "^4.2.4" - jest-changed-files "^26.6.2" - jest-config "^26.6.3" - jest-haste-map "^26.6.2" - jest-message-util "^26.6.2" - jest-regex-util "^26.0.0" - jest-resolve "^26.6.2" - jest-resolve-dependencies "^26.6.3" - jest-runner "^26.6.3" - jest-runtime "^26.6.3" - jest-snapshot "^26.6.2" - jest-util "^26.6.2" - jest-validate "^26.6.2" - jest-watcher "^26.6.2" - micromatch "^4.0.2" - p-each-series "^2.1.0" - rimraf "^3.0.0" - slash "^3.0.0" - strip-ansi "^6.0.0" - -"@jest/environment@^26.6.2": - version "26.6.2" - resolved "https://registry.yarnpkg.com/@jest/environment/-/environment-26.6.2.tgz#ba364cc72e221e79cc8f0a99555bf5d7577cf92c" - integrity sha512-nFy+fHl28zUrRsCeMB61VDThV1pVTtlEokBRgqPrcT1JNq4yRNIyTHfyht6PqtUvY9IsuLGTrbG8kPXjSZIZwA== - dependencies: - "@jest/fake-timers" "^26.6.2" - "@jest/types" "^26.6.2" - "@types/node" "*" - jest-mock "^26.6.2" - -"@jest/fake-timers@^26.6.2": - version "26.6.2" - resolved "https://registry.yarnpkg.com/@jest/fake-timers/-/fake-timers-26.6.2.tgz#459c329bcf70cee4af4d7e3f3e67848123535aad" - integrity sha512-14Uleatt7jdzefLPYM3KLcnUl1ZNikaKq34enpb5XG9i81JpppDb5muZvonvKyrl7ftEHkKS5L5/eB/kxJ+bvA== - dependencies: - "@jest/types" "^26.6.2" - "@sinonjs/fake-timers" "^6.0.1" - "@types/node" "*" - jest-message-util "^26.6.2" - jest-mock "^26.6.2" - jest-util "^26.6.2" - -"@jest/globals@^26.6.2": - version "26.6.2" - resolved "https://registry.yarnpkg.com/@jest/globals/-/globals-26.6.2.tgz#5b613b78a1aa2655ae908eba638cc96a20df720a" - integrity sha512-85Ltnm7HlB/KesBUuALwQ68YTU72w9H2xW9FjZ1eL1U3lhtefjjl5c2MiUbpXt/i6LaPRvoOFJ22yCBSfQ0JIA== - dependencies: - "@jest/environment" "^26.6.2" - "@jest/types" "^26.6.2" - expect "^26.6.2" - -"@jest/reporters@^26.6.2": - version "26.6.2" - resolved "https://registry.yarnpkg.com/@jest/reporters/-/reporters-26.6.2.tgz#1f518b99637a5f18307bd3ecf9275f6882a667f6" - integrity sha512-h2bW53APG4HvkOnVMo8q3QXa6pcaNt1HkwVsOPMBV6LD/q9oSpxNSYZQYkAnjdMjrJ86UuYeLo+aEZClV6opnw== - dependencies: - "@bcoe/v8-coverage" "^0.2.3" - "@jest/console" "^26.6.2" - "@jest/test-result" "^26.6.2" - "@jest/transform" "^26.6.2" - "@jest/types" "^26.6.2" - chalk "^4.0.0" - collect-v8-coverage "^1.0.0" - exit "^0.1.2" - glob "^7.1.2" - graceful-fs "^4.2.4" - istanbul-lib-coverage "^3.0.0" - istanbul-lib-instrument "^4.0.3" - istanbul-lib-report "^3.0.0" - istanbul-lib-source-maps "^4.0.0" - istanbul-reports "^3.0.2" - jest-haste-map "^26.6.2" - jest-resolve "^26.6.2" - jest-util "^26.6.2" - jest-worker "^26.6.2" - slash "^3.0.0" - source-map "^0.6.0" - string-length "^4.0.1" - terminal-link "^2.0.0" - v8-to-istanbul "^7.0.0" - optionalDependencies: - node-notifier "^8.0.0" - -"@jest/source-map@^26.6.2": - version "26.6.2" - resolved "https://registry.yarnpkg.com/@jest/source-map/-/source-map-26.6.2.tgz#29af5e1e2e324cafccc936f218309f54ab69d535" - integrity sha512-YwYcCwAnNmOVsZ8mr3GfnzdXDAl4LaenZP5z+G0c8bzC9/dugL8zRmxZzdoTl4IaS3CryS1uWnROLPFmb6lVvA== - dependencies: - callsites "^3.0.0" - graceful-fs "^4.2.4" - source-map "^0.6.0" - -"@jest/test-result@^26.6.2": - version "26.6.2" - resolved "https://registry.yarnpkg.com/@jest/test-result/-/test-result-26.6.2.tgz#55da58b62df134576cc95476efa5f7949e3f5f18" - integrity sha512-5O7H5c/7YlojphYNrK02LlDIV2GNPYisKwHm2QTKjNZeEzezCbwYs9swJySv2UfPMyZ0VdsmMv7jIlD/IKYQpQ== - dependencies: - "@jest/console" "^26.6.2" - "@jest/types" "^26.6.2" - "@types/istanbul-lib-coverage" "^2.0.0" - collect-v8-coverage "^1.0.0" - -"@jest/test-sequencer@^26.6.3": - version "26.6.3" - resolved "https://registry.yarnpkg.com/@jest/test-sequencer/-/test-sequencer-26.6.3.tgz#98e8a45100863886d074205e8ffdc5a7eb582b17" - integrity sha512-YHlVIjP5nfEyjlrSr8t/YdNfU/1XEt7c5b4OxcXCjyRhjzLYu/rO69/WHPuYcbCWkz8kAeZVZp2N2+IOLLEPGw== - dependencies: - "@jest/test-result" "^26.6.2" - graceful-fs "^4.2.4" - jest-haste-map "^26.6.2" - jest-runner "^26.6.3" - jest-runtime "^26.6.3" - -"@jest/transform@^26.6.2": - version "26.6.2" - resolved "https://registry.yarnpkg.com/@jest/transform/-/transform-26.6.2.tgz#5ac57c5fa1ad17b2aae83e73e45813894dcf2e4b" - integrity sha512-E9JjhUgNzvuQ+vVAL21vlyfy12gP0GhazGgJC4h6qUt1jSdUXGWJ1wfu/X7Sd8etSgxV4ovT1pb9v5D6QW4XgA== - dependencies: - "@babel/core" "^7.1.0" - "@jest/types" "^26.6.2" - babel-plugin-istanbul "^6.0.0" - chalk "^4.0.0" - convert-source-map "^1.4.0" - fast-json-stable-stringify "^2.0.0" - graceful-fs "^4.2.4" - jest-haste-map "^26.6.2" - jest-regex-util "^26.0.0" - jest-util "^26.6.2" - micromatch "^4.0.2" - pirates "^4.0.1" - slash "^3.0.0" - source-map "^0.6.1" - write-file-atomic "^3.0.0" - -"@jest/types@^24.9.0": - version "24.9.0" - resolved "https://registry.yarnpkg.com/@jest/types/-/types-24.9.0.tgz#63cb26cb7500d069e5a389441a7c6ab5e909fc59" - integrity sha512-XKK7ze1apu5JWQ5eZjHITP66AX+QsLlbaJRBGYr8pNzwcAE2JVkwnf0yqjHTsDRcjR0mujy/NmZMXw5kl+kGBw== - dependencies: - "@types/istanbul-lib-coverage" "^2.0.0" - "@types/istanbul-reports" "^1.1.1" - "@types/yargs" "^13.0.0" - -"@jest/types@^26.6.2": - version "26.6.2" - resolved "https://registry.yarnpkg.com/@jest/types/-/types-26.6.2.tgz#bef5a532030e1d88a2f5a6d933f84e97226ed48e" - integrity sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ== - dependencies: - "@types/istanbul-lib-coverage" "^2.0.0" - "@types/istanbul-reports" "^3.0.0" - "@types/node" "*" - "@types/yargs" "^15.0.0" - chalk "^4.0.0" - -"@joe-re/sql-parser@^1.2.1": - version "1.2.1" - resolved "https://registry.yarnpkg.com/@joe-re/sql-parser/-/sql-parser-1.2.1.tgz#22aba5b4544f10d72a79bbcd50425b4d401a75a0" - integrity sha512-rOKu7geeeKGkbs9bbN5EQpAXfsbHevDQ6gqa8OpLGUVX8eM21oOIfneH/Arge7PFRYD9OLRKaeUwZSH3rthDyA== - -"@jridgewell/gen-mapping@^0.1.0": - version "0.1.1" - resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.1.1.tgz#e5d2e450306a9491e3bd77e323e38d7aff315996" - integrity sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w== - dependencies: - "@jridgewell/set-array" "^1.0.0" - "@jridgewell/sourcemap-codec" "^1.4.10" - -"@jridgewell/gen-mapping@^0.3.0", "@jridgewell/gen-mapping@^0.3.2": - version "0.3.2" - resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz#c1aedc61e853f2bb9f5dfe6d4442d3b565b253b9" - integrity sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A== - dependencies: - "@jridgewell/set-array" "^1.0.1" - "@jridgewell/sourcemap-codec" "^1.4.10" - "@jridgewell/trace-mapping" "^0.3.9" - -"@jridgewell/resolve-uri@3.1.0": - version "3.1.0" - resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz#2203b118c157721addfe69d47b70465463066d78" - integrity sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w== - -"@jridgewell/set-array@^1.0.0", "@jridgewell/set-array@^1.0.1": - version "1.1.2" - resolved "https://registry.yarnpkg.com/@jridgewell/set-array/-/set-array-1.1.2.tgz#7c6cf998d6d20b914c0a55a91ae928ff25965e72" - integrity sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw== - -"@jridgewell/source-map@^0.3.2": - version "0.3.2" - resolved "https://registry.yarnpkg.com/@jridgewell/source-map/-/source-map-0.3.2.tgz#f45351aaed4527a298512ec72f81040c998580fb" - integrity sha512-m7O9o2uR8k2ObDysZYzdfhb08VuEml5oWGiosa1VdaPZ/A6QyPkAJuwN0Q1lhULOf6B7MtQmHENS743hWtCrgw== - dependencies: - "@jridgewell/gen-mapping" "^0.3.0" - "@jridgewell/trace-mapping" "^0.3.9" - -"@jridgewell/sourcemap-codec@1.4.14", "@jridgewell/sourcemap-codec@^1.4.10": - version "1.4.14" - resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz#add4c98d341472a289190b424efbdb096991bb24" - integrity sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw== - -"@jridgewell/trace-mapping@^0.3.17", "@jridgewell/trace-mapping@^0.3.9": - version "0.3.17" - resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.17.tgz#793041277af9073b0951a7fe0f0d8c4c98c36985" - integrity sha512-MCNzAp77qzKca9+W/+I0+sEpaUnZoeasnghNeVc41VZCEKaCH73Vq3BZZ/SzWIgrqE4H4ceI+p+b6C0mHf9T4g== - dependencies: - "@jridgewell/resolve-uri" "3.1.0" - "@jridgewell/sourcemap-codec" "1.4.14" - -"@juggle/resize-observer@^3.3.1": - version "3.4.0" - resolved "https://registry.yarnpkg.com/@juggle/resize-observer/-/resize-observer-3.4.0.tgz#08d6c5e20cf7e4cc02fd181c4b0c225cd31dbb60" - integrity sha512-dfLbk+PwWvFzSxwk3n5ySL0hfBog779o8h68wK/7/APo/7cgyWp5jcXockbxdk5kFRkbeXWm4Fbi9FrdN381sA== - -"@jupyter-lsp/code-jumpers@file:packages/code-jumpers": - version "1.2.0" - -"@jupyter-lsp/completion-theme@file:packages/completion-theme": - version "3.3.0" - -"@jupyter-lsp/jupyterlab-lsp-example-extractor@file:packages/_example-extractor": - version "0.0.0" - dependencies: - "@jupyter-lsp/jupyterlab-lsp" "^4.0.0-alpha.0" - -"@jupyter-lsp/jupyterlab-lsp-klingon-integration@file:packages/_klingon-integration": - version "0.0.0" - dependencies: - "@jupyterlab/application" "^3.3.0" - -"@jupyter-lsp/jupyterlab-lsp@file:packages/jupyterlab-lsp": - version "4.1.0" - dependencies: - "@jupyter-lsp/code-jumpers" "~1.2.0" - "@jupyter-lsp/completion-theme" "~3.3.0" - "@jupyter-lsp/theme-material" "~2.1.1" - "@jupyter-lsp/theme-vscode" "~2.1.1" - lodash.mergewith "^4.6.1" - lsp-ws-connection "~0.7.0" - -"@jupyter-lsp/theme-material@file:packages/theme-material": - version "2.1.1" - dependencies: - "@jupyter-lsp/completion-theme" "^3.0.0" - -"@jupyter-lsp/theme-vscode@file:packages/theme-vscode": - version "2.1.1" - dependencies: - "@jupyter-lsp/completion-theme" "^3.0.0" - -"@jupyter/ydoc@~0.2.0": - version "0.2.3" - resolved "https://registry.yarnpkg.com/@jupyter/ydoc/-/ydoc-0.2.3.tgz#468a88d0250c5d59800a5cc15a33df211b4b2141" - integrity sha512-mwmlzOYXr4StXL1ijrSkt6+Bu4cF5nZQAep2zULa5IDe/PVDBqDtMrLqZyKQOgB3IT/sLJidU1P3wTdb8bwmww== - dependencies: - "@jupyterlab/nbformat" "^3.0.0 || ^4.0.0-alpha.15" - "@lumino/coreutils" "^1.11.0 || ^2.0.0-alpha.6" - "@lumino/disposable" "^1.10.0 || ^2.0.0-alpha.6" - "@lumino/signaling" "^1.10.0 || ^2.0.0-alpha.6" - y-protocols "^1.0.5" - yjs "^13.5.40" - -"@jupyterlab/application@^3.0.0", "@jupyterlab/application@^3.3.0", "@jupyterlab/application@^3.6.0": - version "3.6.1" - resolved "https://registry.yarnpkg.com/@jupyterlab/application/-/application-3.6.1.tgz#41b897a809847fcd9426fe12ab0415c4373d24ed" - integrity sha512-EpZ5pByXqiNwX9Kj6H5UepYJ9nNI3uU0ule7vCHhLmvJTM9+ARUKT9a52qp2uAyZSjdihl1cHfVKONEM9Xn8fA== - dependencies: - "@fortawesome/fontawesome-free" "^5.12.0" - "@jupyterlab/apputils" "^3.6.1" - "@jupyterlab/coreutils" "^5.6.1" - "@jupyterlab/docregistry" "^3.6.1" - "@jupyterlab/rendermime" "^3.6.1" - "@jupyterlab/rendermime-interfaces" "^3.6.1" - "@jupyterlab/services" "^6.6.1" - "@jupyterlab/statedb" "^3.6.1" - "@jupyterlab/translation" "^3.6.1" - "@jupyterlab/ui-components" "^3.6.1" - "@lumino/algorithm" "^1.9.0" - "@lumino/application" "^1.31.3" - "@lumino/commands" "^1.19.0" - "@lumino/coreutils" "^1.11.0" - "@lumino/disposable" "^1.10.0" - "@lumino/messaging" "^1.10.0" - "@lumino/polling" "^1.9.0" - "@lumino/properties" "^1.8.0" - "@lumino/signaling" "^1.10.0" - "@lumino/widgets" "^1.37.1" - -"@jupyterlab/apputils@^3.3.0", "@jupyterlab/apputils@^3.6.1": - version "3.6.1" - resolved "https://registry.yarnpkg.com/@jupyterlab/apputils/-/apputils-3.6.1.tgz#c547886300e67c5eea0b9ee349e6e1acb0576e64" - integrity sha512-/kvncjPLuBnq8unPEVxI/iwUVCVPFw9bmpnYenOdoAlbdrDD8nJwsiFi4xpk1d4VittPZ6vJaAMvXA0X2QGYlQ== - dependencies: - "@jupyterlab/coreutils" "^5.6.1" - "@jupyterlab/observables" "^4.6.1" - "@jupyterlab/services" "^6.6.1" - "@jupyterlab/settingregistry" "^3.6.1" - "@jupyterlab/statedb" "^3.6.1" - "@jupyterlab/translation" "^3.6.1" - "@jupyterlab/ui-components" "^3.6.1" - "@lumino/algorithm" "^1.9.0" - "@lumino/commands" "^1.19.0" - "@lumino/coreutils" "^1.11.0" - "@lumino/disposable" "^1.10.0" - "@lumino/domutils" "^1.8.0" - "@lumino/messaging" "^1.10.0" - "@lumino/polling" "^1.9.0" - "@lumino/properties" "^1.8.0" - "@lumino/signaling" "^1.10.0" - "@lumino/virtualdom" "^1.14.0" - "@lumino/widgets" "^1.37.1" - "@types/react" "^17.0.0" - react "^17.0.1" - react-dom "^17.0.1" - sanitize-html "~2.7.3" - url "^0.11.0" - -"@jupyterlab/attachments@^3.6.1": - version "3.6.1" - resolved "https://registry.yarnpkg.com/@jupyterlab/attachments/-/attachments-3.6.1.tgz#af3b3baa0f4150d412a874121b15029e9761c3a8" - integrity sha512-0RA8H0pR3apvqHmkzuFJcJrNXXVDa5GG2Y2Nb5QDtOj+IFRMxEa/8Q4rXtiC7p+fDIgKC/B8xa4CTQlfDCEjaw== - dependencies: - "@jupyterlab/nbformat" "^3.6.1" - "@jupyterlab/observables" "^4.6.1" - "@jupyterlab/rendermime" "^3.6.1" - "@jupyterlab/rendermime-interfaces" "^3.6.1" - "@lumino/disposable" "^1.10.0" - "@lumino/signaling" "^1.10.0" - -"@jupyterlab/builder@^3.5.0": - version "3.6.1" - resolved "https://registry.npmjs.org/@jupyterlab/builder/-/builder-3.6.1.tgz#a04bf0312e8679d1f452c27fee2554ba4a6af3f5" - integrity sha512-LvHQe6InEXJisEcvAdvSFbEEl8OhTjxBSNz7MrjRB+Ur+Qs898dg8QhDH9Ad5mgK3uh4nEN1BDq9W7C/NomqoA== - dependencies: - "@lumino/algorithm" "^1.9.0" - "@lumino/application" "^1.31.3" - "@lumino/commands" "^1.19.0" - "@lumino/coreutils" "^1.11.0" - "@lumino/disposable" "^1.10.0" - "@lumino/domutils" "^1.8.0" - "@lumino/dragdrop" "^1.13.0" - "@lumino/messaging" "^1.10.0" - "@lumino/properties" "^1.8.0" - "@lumino/signaling" "^1.10.0" - "@lumino/virtualdom" "^1.14.0" - "@lumino/widgets" "^1.37.1" - ajv "^6.12.3" - commander "~6.0.0" - css-loader "^5.0.1" - duplicate-package-checker-webpack-plugin "^3.0.0" - file-loader "~6.0.0" - fs-extra "^9.0.1" - glob "~7.1.6" - license-webpack-plugin "^2.3.14" - mini-css-extract-plugin "~1.3.2" - path-browserify "^1.0.0" - process "^0.11.10" - raw-loader "~4.0.0" - source-map-loader "~1.0.2" - style-loader "~2.0.0" - supports-color "^7.2.0" - svg-url-loader "~6.0.0" - terser-webpack-plugin "^4.1.0" - to-string-loader "^1.1.6" - url-loader "~4.1.0" - webpack "^5.41.1" - webpack-cli "^4.1.0" - webpack-merge "^5.1.2" - worker-loader "^3.0.2" - -"@jupyterlab/cells@^3.3.0", "@jupyterlab/cells@^3.6.1": - version "3.6.1" - resolved "https://registry.yarnpkg.com/@jupyterlab/cells/-/cells-3.6.1.tgz#84c4a43cb66e94a934bcf25172b6ded64d87bba6" - integrity sha512-Ojep4Sw83c4uzYSDMQcECW7wuan/dkerimKkb/5cm277ryHL51IgjZTEpJKaW8AeEjNxtAwjlo4cl/5KIwKvQw== - dependencies: - "@jupyter/ydoc" "~0.2.0" - "@jupyterlab/apputils" "^3.6.1" - "@jupyterlab/attachments" "^3.6.1" - "@jupyterlab/codeeditor" "^3.6.1" - "@jupyterlab/codemirror" "^3.6.1" - "@jupyterlab/coreutils" "^5.6.1" - "@jupyterlab/filebrowser" "^3.6.1" - "@jupyterlab/nbformat" "^3.6.1" - "@jupyterlab/observables" "^4.6.1" - "@jupyterlab/outputarea" "^3.6.1" - "@jupyterlab/rendermime" "^3.6.1" - "@jupyterlab/services" "^6.6.1" - "@jupyterlab/ui-components" "^3.6.1" - "@lumino/algorithm" "^1.9.0" - "@lumino/coreutils" "^1.11.0" - "@lumino/domutils" "^1.8.0" - "@lumino/dragdrop" "^1.13.0" - "@lumino/messaging" "^1.10.0" - "@lumino/polling" "^1.9.0" - "@lumino/signaling" "^1.10.0" - "@lumino/virtualdom" "^1.14.0" - "@lumino/widgets" "^1.37.1" - marked "^4.0.17" - react "^17.0.1" - -"@jupyterlab/codeeditor@^3.3.0", "@jupyterlab/codeeditor@^3.6.1": - version "3.6.1" - resolved "https://registry.yarnpkg.com/@jupyterlab/codeeditor/-/codeeditor-3.6.1.tgz#9643e9f4f594f6cc3f02a2d5a192d8e2bc844284" - integrity sha512-KIALB/PHY9LheZ0zGYMHnDGVUO5xReiG+u0Gb+658xYET148a/pU4kp47GzTYB2bsQRrmOmtMqda1/Nhn/c0xw== - dependencies: - "@jupyter/ydoc" "~0.2.0" - "@jupyterlab/coreutils" "^5.6.1" - "@jupyterlab/nbformat" "^3.6.1" - "@jupyterlab/observables" "^4.6.1" - "@jupyterlab/translation" "^3.6.1" - "@jupyterlab/ui-components" "^3.6.1" - "@lumino/coreutils" "^1.11.0" - "@lumino/disposable" "^1.10.0" - "@lumino/dragdrop" "^1.13.0" - "@lumino/messaging" "^1.10.0" - "@lumino/signaling" "^1.10.0" - "@lumino/widgets" "^1.37.1" - -"@jupyterlab/codemirror@^3.3.0", "@jupyterlab/codemirror@^3.6.1": - version "3.6.1" - resolved "https://registry.yarnpkg.com/@jupyterlab/codemirror/-/codemirror-3.6.1.tgz#e21134b02d8ae5b6d971549a689b8462987d30c7" - integrity sha512-hEjdAm1bSsBNuzjhnCJrphVdl8HZSGh/+q2MioyF7zRK+VbFarx7DKoYdAtaunHu5MkYA9NGf7mjLVyg17dK9g== - dependencies: - "@jupyter/ydoc" "~0.2.0" - "@jupyterlab/apputils" "^3.6.1" - "@jupyterlab/codeeditor" "^3.6.1" - "@jupyterlab/coreutils" "^5.6.1" - "@jupyterlab/nbformat" "^3.6.1" - "@jupyterlab/observables" "^4.6.1" - "@jupyterlab/statusbar" "^3.6.1" - "@jupyterlab/translation" "^3.6.1" - "@lumino/algorithm" "^1.9.0" - "@lumino/commands" "^1.19.0" - "@lumino/coreutils" "^1.11.0" - "@lumino/disposable" "^1.10.0" - "@lumino/polling" "^1.9.0" - "@lumino/signaling" "^1.10.0" - "@lumino/widgets" "^1.37.1" - codemirror "~5.61.0" - react "^17.0.1" - y-codemirror "^3.0.1" - -"@jupyterlab/completer@^3.3.0": - version "3.6.1" - resolved "https://registry.yarnpkg.com/@jupyterlab/completer/-/completer-3.6.1.tgz#a4d002d953b308033cd373b3463a497d8aa89b9d" - integrity sha512-1uM4/GOuferl+5WlIQKSHMZmQOD7WInTZEg7B6K7XWgMhGNvS7dLfTkYIenVUPN3yqaeHUGG3tPIy5oAZEpSSw== - dependencies: - "@jupyterlab/apputils" "^3.6.1" - "@jupyterlab/codeeditor" "^3.6.1" - "@jupyterlab/coreutils" "^5.6.1" - "@jupyterlab/services" "^6.6.1" - "@jupyterlab/statedb" "^3.6.1" - "@jupyterlab/ui-components" "^3.6.1" - "@lumino/algorithm" "^1.9.0" - "@lumino/coreutils" "^1.11.0" - "@lumino/disposable" "^1.10.0" - "@lumino/domutils" "^1.8.0" - "@lumino/messaging" "^1.10.0" - "@lumino/signaling" "^1.10.0" - "@lumino/widgets" "^1.37.1" - -"@jupyterlab/coreutils@^5.0.0", "@jupyterlab/coreutils@^5.3.0", "@jupyterlab/coreutils@^5.6.1": - version "5.6.1" - resolved "https://registry.yarnpkg.com/@jupyterlab/coreutils/-/coreutils-5.6.1.tgz#da6c2fe28298ffcad09f1ec5ad4202bdaf1c07c8" - integrity sha512-nS4ixC9H53lFzdszOfZfDhlM2hlXfOtQAn6TnA/0Ra/gTBQ+LEbFIWdAp588iKuv8eKX39O/Us53T4oq24A31g== - dependencies: - "@lumino/coreutils" "^1.11.0" - "@lumino/disposable" "^1.10.0" - "@lumino/signaling" "^1.10.0" - minimist "~1.2.0" - moment "^2.24.0" - path-browserify "^1.0.0" - url-parse "~1.5.1" - -"@jupyterlab/docmanager@^3.3.0", "@jupyterlab/docmanager@^3.6.1": - version "3.6.1" - resolved "https://registry.yarnpkg.com/@jupyterlab/docmanager/-/docmanager-3.6.1.tgz#2f62aabb9dc3f8007f5f54b61473274f784b1972" - integrity sha512-olDFoXq2H6TsnCk4OMJus4PcmXCtc2uewZy66XcLD7igDxKvQ50h9uF2wnrxohlgvXxZV9HTMyDyLD7layt82g== - dependencies: - "@jupyterlab/apputils" "^3.6.1" - "@jupyterlab/coreutils" "^5.6.1" - "@jupyterlab/docprovider" "^3.6.1" - "@jupyterlab/docregistry" "^3.6.1" - "@jupyterlab/services" "^6.6.1" - "@jupyterlab/statusbar" "^3.6.1" - "@jupyterlab/translation" "^3.6.1" - "@lumino/algorithm" "^1.9.0" - "@lumino/coreutils" "^1.11.0" - "@lumino/disposable" "^1.10.0" - "@lumino/messaging" "^1.10.0" - "@lumino/properties" "^1.8.0" - "@lumino/signaling" "^1.10.0" - "@lumino/widgets" "^1.37.1" - react "^17.0.1" - -"@jupyterlab/docprovider@^3.6.1": - version "3.6.1" - resolved "https://registry.yarnpkg.com/@jupyterlab/docprovider/-/docprovider-3.6.1.tgz#8be66a419d595b490d6ca3f79238fd160d1cd53e" - integrity sha512-YeqLMPlC2jEWBvxgIVfhxbeYXWKb5DGEkv+WJp11S6oFgSNqAHZ1zqH1BB/+UgYWwwkafADwAjepaGFhnr2pPw== - dependencies: - "@jupyter/ydoc" "~0.2.0" - "@jupyterlab/coreutils" "^5.6.1" - "@jupyterlab/services" "^6.6.1" - "@lumino/coreutils" "^1.11.0" - "@lumino/disposable" "^1.10.0" - "@lumino/signaling" "^1.10.0" - y-protocols "^1.0.5" - y-websocket "^1.3.15" - yjs "^13.5.17" - -"@jupyterlab/docregistry@^3.0.0", "@jupyterlab/docregistry@^3.3.0", "@jupyterlab/docregistry@^3.6.1": - version "3.6.1" - resolved "https://registry.yarnpkg.com/@jupyterlab/docregistry/-/docregistry-3.6.1.tgz#942b76ea7c59ab9ee375dce4a7bb9377d28d7f61" - integrity sha512-uQsmw1LpvcRC8CZ/cjmFnQKB+E+kWqJQDGwtzBDjZm4UcADVs1mwvSwPpAZvTBb0gmYBcS09mTZt7WgVv1Nj8A== - dependencies: - "@jupyter/ydoc" "~0.2.0" - "@jupyterlab/apputils" "^3.6.1" - "@jupyterlab/codeeditor" "^3.6.1" - "@jupyterlab/codemirror" "^3.6.1" - "@jupyterlab/coreutils" "^5.6.1" - "@jupyterlab/docprovider" "^3.6.1" - "@jupyterlab/observables" "^4.6.1" - "@jupyterlab/rendermime" "^3.6.1" - "@jupyterlab/rendermime-interfaces" "^3.6.1" - "@jupyterlab/services" "^6.6.1" - "@jupyterlab/translation" "^3.6.1" - "@jupyterlab/ui-components" "^3.6.1" - "@lumino/algorithm" "^1.9.0" - "@lumino/coreutils" "^1.11.0" - "@lumino/disposable" "^1.10.0" - "@lumino/messaging" "^1.10.0" - "@lumino/signaling" "^1.10.0" - "@lumino/widgets" "^1.37.1" - -"@jupyterlab/filebrowser@^3.6.1": - version "3.6.1" - resolved "https://registry.yarnpkg.com/@jupyterlab/filebrowser/-/filebrowser-3.6.1.tgz#8fe44d03545fd9318fe8014edd5c4ddbf705bcb5" - integrity sha512-brd5PQQ1m9HK+53opahoi6SaEO0oweRloE1GJEA9t9CHKklpiZ18/3QXF+WDgHtV2UU3ZDmND7Fq5YCets2lBg== - dependencies: - "@jupyterlab/apputils" "^3.6.1" - "@jupyterlab/coreutils" "^5.6.1" - "@jupyterlab/docmanager" "^3.6.1" - "@jupyterlab/docregistry" "^3.6.1" - "@jupyterlab/services" "^6.6.1" - "@jupyterlab/statedb" "^3.6.1" - "@jupyterlab/statusbar" "^3.6.1" - "@jupyterlab/translation" "^3.6.1" - "@jupyterlab/ui-components" "^3.6.1" - "@lumino/algorithm" "^1.9.0" - "@lumino/coreutils" "^1.11.0" - "@lumino/disposable" "^1.10.0" - "@lumino/domutils" "^1.8.0" - "@lumino/dragdrop" "^1.13.0" - "@lumino/messaging" "^1.10.0" - "@lumino/polling" "^1.9.0" - "@lumino/signaling" "^1.10.0" - "@lumino/virtualdom" "^1.14.0" - "@lumino/widgets" "^1.37.1" - react "^17.0.1" - -"@jupyterlab/fileeditor@^3.3.0": - version "3.6.1" - resolved "https://registry.yarnpkg.com/@jupyterlab/fileeditor/-/fileeditor-3.6.1.tgz#095aeefe0d6bafcd9349cd2419bd8db1127652c4" - integrity sha512-OzlC9XWkpWttRRWgWjLtgogIh/Cprx4n3aI9Rmz1Fo3b2jLMqcoC/dS4B0VGcIuHi5Py8sGqz0sMrc23KnrfCQ== - dependencies: - "@jupyterlab/apputils" "^3.6.1" - "@jupyterlab/codeeditor" "^3.6.1" - "@jupyterlab/docregistry" "^3.6.1" - "@jupyterlab/statusbar" "^3.6.1" - "@jupyterlab/translation" "^3.6.1" - "@jupyterlab/ui-components" "^3.6.1" - "@lumino/coreutils" "^1.11.0" - "@lumino/messaging" "^1.10.0" - "@lumino/widgets" "^1.37.1" - react "^17.0.1" - -"@jupyterlab/logconsole@^3.3.0": - version "3.6.1" - resolved "https://registry.yarnpkg.com/@jupyterlab/logconsole/-/logconsole-3.6.1.tgz#c696b69f015a0ecdb3a71ae03703814e09801cd7" - integrity sha512-276Bl+yt6Y4gc91K03m7YgltIAIZGnLjEXh3HmBO9iLq3gb37+hFV7o5zIKWBLNFY/sqQmTufiX6ALNDPTTFgg== - dependencies: - "@jupyterlab/coreutils" "^5.6.1" - "@jupyterlab/nbformat" "^3.6.1" - "@jupyterlab/outputarea" "^3.6.1" - "@jupyterlab/rendermime" "^3.6.1" - "@jupyterlab/services" "^6.6.1" - "@jupyterlab/translation" "^3.6.1" - "@lumino/coreutils" "^1.11.0" - "@lumino/disposable" "^1.10.0" - "@lumino/messaging" "^1.10.0" - "@lumino/signaling" "^1.10.0" - "@lumino/widgets" "^1.37.1" - -"@jupyterlab/nbformat@^3.0.0 || ^4.0.0-alpha.15", "@jupyterlab/nbformat@^3.6.1": - version "3.6.1" - resolved "https://registry.yarnpkg.com/@jupyterlab/nbformat/-/nbformat-3.6.1.tgz#84f1239ff0a54d693beed21534aef1baeaa93518" - integrity sha512-fLJTAwnQZ/5H9dBV/noqlkbGmGBbcsgd0FHWyMVIq+efKFX6CW1MOk61uM76rfahkke3XgYgvlXsw7i7lEIhcA== - dependencies: - "@lumino/coreutils" "^1.11.0" - -"@jupyterlab/notebook@^3.3.0", "@jupyterlab/notebook@^3.6.1": - version "3.6.1" - resolved "https://registry.yarnpkg.com/@jupyterlab/notebook/-/notebook-3.6.1.tgz#9bb7d78c694f403b1b5d59889737e56c787348d2" - integrity sha512-wkc0/HcnLhYSMtF1y5pf2ngvuhU0UE6tmIjCWl4rP0aC4aAjZZzkRNXV4EwNfY73fLT4EGB149l8Jv4vKUVGdQ== - dependencies: - "@jupyter/ydoc" "~0.2.0" - "@jupyterlab/apputils" "^3.6.1" - "@jupyterlab/cells" "^3.6.1" - "@jupyterlab/codeeditor" "^3.6.1" - "@jupyterlab/coreutils" "^5.6.1" - "@jupyterlab/docregistry" "^3.6.1" - "@jupyterlab/nbformat" "^3.6.1" - "@jupyterlab/observables" "^4.6.1" - "@jupyterlab/rendermime" "^3.6.1" - "@jupyterlab/services" "^6.6.1" - "@jupyterlab/settingregistry" "^3.6.1" - "@jupyterlab/statusbar" "^3.6.1" - "@jupyterlab/translation" "^3.6.1" - "@jupyterlab/ui-components" "^3.6.1" - "@lumino/algorithm" "^1.9.0" - "@lumino/coreutils" "^1.11.0" - "@lumino/domutils" "^1.8.0" - "@lumino/dragdrop" "^1.13.0" - "@lumino/messaging" "^1.10.0" - "@lumino/properties" "^1.8.0" - "@lumino/signaling" "^1.10.0" - "@lumino/virtualdom" "^1.14.0" - "@lumino/widgets" "^1.37.1" - react "^17.0.1" - -"@jupyterlab/observables@^4.3.0", "@jupyterlab/observables@^4.6.1": - version "4.6.1" - resolved "https://registry.yarnpkg.com/@jupyterlab/observables/-/observables-4.6.1.tgz#7d05b60192e85732db29de5f9e8525798a08aee6" - integrity sha512-ez+fxyE3qwQ9grZ0nj2fpgcPIGySs/cNfojfcQatziV2rbFZzrBJJsWFSBhPO55vJd1Mue21aPw1eEK3ok4Wfw== - dependencies: - "@lumino/algorithm" "^1.9.0" - "@lumino/coreutils" "^1.11.0" - "@lumino/disposable" "^1.10.0" - "@lumino/messaging" "^1.10.0" - "@lumino/signaling" "^1.10.0" - -"@jupyterlab/outputarea@^3.6.1": - version "3.6.1" - resolved "https://registry.yarnpkg.com/@jupyterlab/outputarea/-/outputarea-3.6.1.tgz#904d0933d4e8c4bedb6e4179da8d4b6cfd32630d" - integrity sha512-/OWU9LvKeRUk5mzQskhPQtWY6/NIiRy3bzhbFesSJ1+3f+L1pk7mXCHmRxiG6FSw2ujeCV3vO4uFTXGLxoqiAw== - dependencies: - "@jupyterlab/apputils" "^3.6.1" - "@jupyterlab/nbformat" "^3.6.1" - "@jupyterlab/observables" "^4.6.1" - "@jupyterlab/rendermime" "^3.6.1" - "@jupyterlab/rendermime-interfaces" "^3.6.1" - "@jupyterlab/services" "^6.6.1" - "@lumino/algorithm" "^1.9.0" - "@lumino/coreutils" "^1.11.0" - "@lumino/disposable" "^1.10.0" - "@lumino/messaging" "^1.10.0" - "@lumino/properties" "^1.8.0" - "@lumino/signaling" "^1.10.0" - "@lumino/widgets" "^1.37.1" - resize-observer-polyfill "^1.5.1" - -"@jupyterlab/rendermime-interfaces@^3.0.0", "@jupyterlab/rendermime-interfaces@^3.6.1": - version "3.6.1" - resolved "https://registry.yarnpkg.com/@jupyterlab/rendermime-interfaces/-/rendermime-interfaces-3.6.1.tgz#d531a6ba228df83b581aee0df5041f7f9a1b4495" - integrity sha512-IB0rFBTRpguGbAF/WmNPa//UfXcZLRur5DuSwP5tRz2iUZIu/dAFeLDq3j8NL2POz1+yeXyQSQyp2Xu9w8CrFw== - dependencies: - "@jupyterlab/translation" "^3.6.1" - "@lumino/coreutils" "^1.11.0" - "@lumino/widgets" "^1.37.1" - -"@jupyterlab/rendermime@^3.3.0", "@jupyterlab/rendermime@^3.6.1": - version "3.6.1" - resolved "https://registry.yarnpkg.com/@jupyterlab/rendermime/-/rendermime-3.6.1.tgz#ebeef56293cf83f6aa8eb8f12edcd16c4eaafae7" - integrity sha512-v4YHIxSd+0foqyzTaloBPevdYUBgZ4Tk1uuXzTdCVIdceS9MG76UfjBu8EPl86AZI8R2ihlHh01pxpgLX0Smdw== - dependencies: - "@jupyterlab/apputils" "^3.6.1" - "@jupyterlab/codemirror" "^3.6.1" - "@jupyterlab/coreutils" "^5.6.1" - "@jupyterlab/nbformat" "^3.6.1" - "@jupyterlab/observables" "^4.6.1" - "@jupyterlab/rendermime-interfaces" "^3.6.1" - "@jupyterlab/services" "^6.6.1" - "@jupyterlab/translation" "^3.6.1" - "@lumino/algorithm" "^1.9.0" - "@lumino/coreutils" "^1.11.0" - "@lumino/messaging" "^1.10.0" - "@lumino/signaling" "^1.10.0" - "@lumino/widgets" "^1.37.1" - lodash.escape "^4.0.1" - marked "^4.0.17" - -"@jupyterlab/services@^6.3.0", "@jupyterlab/services@^6.6.1": - version "6.6.1" - resolved "https://registry.yarnpkg.com/@jupyterlab/services/-/services-6.6.1.tgz#5fd96574bb1eee2e4217a6d039b4dcdeb51bb66f" - integrity sha512-4YIwTsfx7+JO7Lz9YFTpUvniA3aHdR5dDQJfdo9TsCMxs+NDVfjNAvp9VHa1xNJWYll4Ay31lYWbvuN/SI+KEA== - dependencies: - "@jupyterlab/coreutils" "^5.6.1" - "@jupyterlab/nbformat" "^3.6.1" - "@jupyterlab/observables" "^4.6.1" - "@jupyterlab/settingregistry" "^3.6.1" - "@jupyterlab/statedb" "^3.6.1" - "@lumino/algorithm" "^1.9.0" - "@lumino/coreutils" "^1.11.0" - "@lumino/disposable" "^1.10.0" - "@lumino/polling" "^1.9.0" - "@lumino/signaling" "^1.10.0" - node-fetch "^2.6.0" - ws "^7.4.6" - -"@jupyterlab/settingregistry@^3.6.1": - version "3.6.1" - resolved "https://registry.yarnpkg.com/@jupyterlab/settingregistry/-/settingregistry-3.6.1.tgz#cd04e64d598598950c64aa99e1fc8a2c962d8c31" - integrity sha512-zNCYIK6/oWG6JnhmwRGE/Zvn5Xhj0kovcJgTlOSHGyIiHqLfJA9TzHZDNUDANqqxAg4+H9fYdh1+agi4XWGL8A== - dependencies: - "@jupyterlab/statedb" "^3.6.1" - "@lumino/commands" "^1.19.0" - "@lumino/coreutils" "^1.11.0" - "@lumino/disposable" "^1.10.0" - "@lumino/signaling" "^1.10.0" - ajv "^6.12.3" - json5 "^2.1.1" - -"@jupyterlab/statedb@^3.6.1": - version "3.6.1" - resolved "https://registry.yarnpkg.com/@jupyterlab/statedb/-/statedb-3.6.1.tgz#3f64bfee22ff7779404835fa87b08c67e66716c3" - integrity sha512-6+fGzKUCaWBKX/fZDdXR++WgfvYE+Dv5ma8gkgcHaS2vEup2snkmgZ8fBUJXm5xVpU4KhXjTUb7dafLfG7BL3Q== - dependencies: - "@lumino/commands" "^1.19.0" - "@lumino/coreutils" "^1.11.0" - "@lumino/disposable" "^1.10.0" - "@lumino/properties" "^1.8.0" - "@lumino/signaling" "^1.10.0" - -"@jupyterlab/statusbar@^3.3.0", "@jupyterlab/statusbar@^3.6.1": - version "3.6.1" - resolved "https://registry.yarnpkg.com/@jupyterlab/statusbar/-/statusbar-3.6.1.tgz#382c32eb6599973176d5ac0497e4a0c9dfa8df37" - integrity sha512-rpQa6G6agR+lu3Djt/YTroQ4W3ZasfGmtmO24IXsm3C5418nPIl2oQeEJTc7OsXRvsdoCoAK7c/Rh9TeyhBhug== - dependencies: - "@jupyterlab/apputils" "^3.6.1" - "@jupyterlab/codeeditor" "^3.6.1" - "@jupyterlab/services" "^6.6.1" - "@jupyterlab/translation" "^3.6.1" - "@jupyterlab/ui-components" "^3.6.1" - "@lumino/algorithm" "^1.9.0" - "@lumino/coreutils" "^1.11.0" - "@lumino/disposable" "^1.10.0" - "@lumino/messaging" "^1.10.0" - "@lumino/signaling" "^1.10.0" - "@lumino/widgets" "^1.37.1" - csstype "~3.0.3" - react "^17.0.1" - typestyle "^2.0.4" - -"@jupyterlab/testutils@^3.3.0": - version "3.6.1" - resolved "https://registry.yarnpkg.com/@jupyterlab/testutils/-/testutils-3.6.1.tgz#d9bfe4e1fbc2bceea19489e97d5f77341e4a9345" - integrity sha512-7gQD8xAPTjgAZhR20af4vKUUDCYujaBwee1Ub1hVfP0ehMc/R6PumX0z71jM58cNq/5d9P9xVK0wlQQkHKbrDA== - dependencies: - "@jupyterlab/apputils" "^3.6.1" - "@jupyterlab/cells" "^3.6.1" - "@jupyterlab/codeeditor" "^3.6.1" - "@jupyterlab/codemirror" "^3.6.1" - "@jupyterlab/coreutils" "^5.6.1" - "@jupyterlab/docregistry" "^3.6.1" - "@jupyterlab/nbformat" "^3.6.1" - "@jupyterlab/notebook" "^3.6.1" - "@jupyterlab/rendermime" "^3.6.1" - "@jupyterlab/services" "^6.6.1" - "@lumino/algorithm" "^1.9.0" - "@lumino/coreutils" "^1.11.0" - "@lumino/properties" "^1.8.0" - "@lumino/signaling" "^1.10.0" - child_process "~1.0.2" - deepmerge "^4.2.2" - fs-extra "^9.0.1" - identity-obj-proxy "^3.0.0" - jest "^26.4.2" - jest-junit "^11.1.0" - jest-raw-loader "^1.0.1" - jest-summary-reporter "^0.0.2" - json-to-html "~0.1.2" - markdown-loader-jest "^0.1.1" - node-fetch "^2.6.0" - simulate-event "~1.4.0" - ts-jest "^26.3.0" - -"@jupyterlab/tooltip@^3.3.0": - version "3.6.1" - resolved "https://registry.yarnpkg.com/@jupyterlab/tooltip/-/tooltip-3.6.1.tgz#9b628aa511fc72e2355be320f400f3d82c1a6c72" - integrity sha512-s0Dgq21UAQVX54wP/xAIEOCqCQAjImixNhgrECnLryN6ZcJLU84smQwma96MpnM0lgcw873ngm4ZkAFJbj9KLg== - dependencies: - "@jupyterlab/apputils" "^3.6.1" - "@jupyterlab/codeeditor" "^3.6.1" - "@jupyterlab/rendermime" "^3.6.1" - "@jupyterlab/services" "^6.6.1" - "@lumino/coreutils" "^1.11.0" - "@lumino/messaging" "^1.10.0" - "@lumino/widgets" "^1.37.1" - -"@jupyterlab/translation@^3.3.0", "@jupyterlab/translation@^3.6.1": - version "3.6.1" - resolved "https://registry.yarnpkg.com/@jupyterlab/translation/-/translation-3.6.1.tgz#db1380c349f2e8645b58a9eac4986f3f1c6b320b" - integrity sha512-+I1zzQnYNVnU9rrr7ceHPexiyMFavfK0t6I3qdgAHQ1TTLsLVQMp5m/T7S2SaJjPK7/GtRml5DgmErRyy5becA== - dependencies: - "@jupyterlab/coreutils" "^5.6.1" - "@jupyterlab/services" "^6.6.1" - "@jupyterlab/statedb" "^3.6.1" - "@lumino/coreutils" "^1.11.0" - -"@jupyterlab/ui-components@^3.0.0", "@jupyterlab/ui-components@^3.3.0", "@jupyterlab/ui-components@^3.6.1": - version "3.6.1" - resolved "https://registry.yarnpkg.com/@jupyterlab/ui-components/-/ui-components-3.6.1.tgz#1e12b23614288a1c45fda50c2d141483b879bebf" - integrity sha512-p9wH9iidGuuKSm2yXFGhHs6gzpoBpsHRCiOJw9bmj2PBsDKEGjh65Rh0YBv0d7TD6VVgAwMmokaT01KqjUmY+g== - dependencies: - "@blueprintjs/core" "^3.36.0" - "@blueprintjs/select" "^3.15.0" - "@jupyterlab/coreutils" "^5.6.1" - "@jupyterlab/translation" "^3.6.1" - "@lumino/algorithm" "^1.9.0" - "@lumino/commands" "^1.19.0" - "@lumino/coreutils" "^1.11.0" - "@lumino/disposable" "^1.10.0" - "@lumino/signaling" "^1.10.0" - "@lumino/virtualdom" "^1.14.0" - "@lumino/widgets" "^1.37.1" - "@rjsf/core" "^3.1.0" - react "^17.0.1" - react-dom "^17.0.1" - typestyle "^2.0.4" - -"@lerna/add@6.1.0": - version "6.1.0" - resolved "https://registry.npmjs.org/@lerna/add/-/add-6.1.0.tgz#0f09495c5e1af4c4f316344af34b6d1a91b15b19" - integrity sha512-f2cAeS1mE/p7QvSRn5TCgdUXw6QVbu8PeRxaTOxTThhTdJIWdXZfY00QjAsU6jw1PdYXK1qGUSwWOPkdR16mBg== - dependencies: - "@lerna/bootstrap" "6.1.0" - "@lerna/command" "6.1.0" - "@lerna/filter-options" "6.1.0" - "@lerna/npm-conf" "6.1.0" - "@lerna/validation-error" "6.1.0" - dedent "^0.7.0" - npm-package-arg "8.1.1" - p-map "^4.0.0" - pacote "^13.6.1" - semver "^7.3.4" - -"@lerna/bootstrap@6.1.0": - version "6.1.0" - resolved "https://registry.npmjs.org/@lerna/bootstrap/-/bootstrap-6.1.0.tgz#81738f32cd431814c9943dfffe28752587d90830" - integrity sha512-aDxKqgxexVj/Z0B1aPu7P1iPbPqhk1FPkl/iayCmPlkAh90pYEH0uVytGzi1hFB5iXEfG7Pa6azGQywUodx/1g== - dependencies: - "@lerna/command" "6.1.0" - "@lerna/filter-options" "6.1.0" - "@lerna/has-npm-version" "6.1.0" - "@lerna/npm-install" "6.1.0" - "@lerna/package-graph" "6.1.0" - "@lerna/pulse-till-done" "6.1.0" - "@lerna/rimraf-dir" "6.1.0" - "@lerna/run-lifecycle" "6.1.0" - "@lerna/run-topologically" "6.1.0" - "@lerna/symlink-binary" "6.1.0" - "@lerna/symlink-dependencies" "6.1.0" - "@lerna/validation-error" "6.1.0" - "@npmcli/arborist" "5.3.0" - dedent "^0.7.0" - get-port "^5.1.1" - multimatch "^5.0.0" - npm-package-arg "8.1.1" - npmlog "^6.0.2" - p-map "^4.0.0" - p-map-series "^2.1.0" - p-waterfall "^2.1.1" - semver "^7.3.4" - -"@lerna/changed@6.1.0": - version "6.1.0" - resolved "https://registry.npmjs.org/@lerna/changed/-/changed-6.1.0.tgz#4fa480cbb0e7106ea9dad30d315e953975118d06" - integrity sha512-p7C2tf1scmvoUC1Osck/XIKVKXAQ8m8neL8/rfgKSYsvUVjsOB1LbF5HH1VUZntE6S4OxkRxUQGkAHVf5xrGqw== - dependencies: - "@lerna/collect-updates" "6.1.0" - "@lerna/command" "6.1.0" - "@lerna/listable" "6.1.0" - "@lerna/output" "6.1.0" - -"@lerna/check-working-tree@6.1.0": - version "6.1.0" - resolved "https://registry.npmjs.org/@lerna/check-working-tree/-/check-working-tree-6.1.0.tgz#b8970fd27a26449b12456d5d0ece60477aa54e15" - integrity sha512-hSciDmRqsNPevMhAD+SYbnhjatdb7UUu9W8vTyGtUXkrq2xtRZU0vAOgqovV8meirRkbC41pZePYKqyQtF0y3w== - dependencies: - "@lerna/collect-uncommitted" "6.1.0" - "@lerna/describe-ref" "6.1.0" - "@lerna/validation-error" "6.1.0" - -"@lerna/child-process@6.1.0": - version "6.1.0" - resolved "https://registry.npmjs.org/@lerna/child-process/-/child-process-6.1.0.tgz#6361f7945cd5b36e983f819de3cd91c315707302" - integrity sha512-jhr3sCFeps6Y15SCrWEPvqE64i+QLOTSh+OzxlziCBf7ZEUu7sF0yA4n5bAqw8j43yCKhhjkf/ZLYxZe+pnl3Q== - dependencies: - chalk "^4.1.0" - execa "^5.0.0" - strong-log-transformer "^2.1.0" - -"@lerna/clean@6.1.0": - version "6.1.0" - resolved "https://registry.npmjs.org/@lerna/clean/-/clean-6.1.0.tgz#1114fd90ad82438123726e2493d3550e73abebbc" - integrity sha512-LRK2hiNUiBhPe5tmJiefOVpkaX2Yob0rp15IFNIbuteRWUJg0oERFQo62WvnxwElfzKSOhr8OGuEq/vN4bMrRA== - dependencies: - "@lerna/command" "6.1.0" - "@lerna/filter-options" "6.1.0" - "@lerna/prompt" "6.1.0" - "@lerna/pulse-till-done" "6.1.0" - "@lerna/rimraf-dir" "6.1.0" - p-map "^4.0.0" - p-map-series "^2.1.0" - p-waterfall "^2.1.1" - -"@lerna/cli@6.1.0": - version "6.1.0" - resolved "https://registry.npmjs.org/@lerna/cli/-/cli-6.1.0.tgz#41214331fa4c1ea5f41125befdd81b009fe12640" - integrity sha512-p4G/OSPIrHiNkEl8bXrQdFOh4ORAZp2+ljvbXmAxpdf2qmopaUdr+bZYtIAxd+Z42SxRnDNz9IEyR0kOsARRQQ== - dependencies: - "@lerna/global-options" "6.1.0" - dedent "^0.7.0" - npmlog "^6.0.2" - yargs "^16.2.0" - -"@lerna/collect-uncommitted@6.1.0": - version "6.1.0" - resolved "https://registry.npmjs.org/@lerna/collect-uncommitted/-/collect-uncommitted-6.1.0.tgz#b6ffd7adda24d73b70304210967d3518caa3529d" - integrity sha512-VvWvqDZG+OiF4PwV4Ro695r3+8ty4w+11Bnq8tbsbu5gq8qZiam8Fkc/TQLuNNqP0SPi4qmMPaIzWvSze3SmDg== - dependencies: - "@lerna/child-process" "6.1.0" - chalk "^4.1.0" - npmlog "^6.0.2" - -"@lerna/collect-updates@6.1.0": - version "6.1.0" - resolved "https://registry.npmjs.org/@lerna/collect-updates/-/collect-updates-6.1.0.tgz#75fcc0733b5a9ac318a6484b890aa4061b7859c2" - integrity sha512-dgH7kgstwCXFctylQ4cxuCmhwSIE6VJZfHdh2bOaLuncs6ATMErKWN/mVuFHuUWEqPDRyy5Ky40Cu9S40nUq5w== - dependencies: - "@lerna/child-process" "6.1.0" - "@lerna/describe-ref" "6.1.0" - minimatch "^3.0.4" - npmlog "^6.0.2" - slash "^3.0.0" - -"@lerna/command@6.1.0": - version "6.1.0" - resolved "https://registry.npmjs.org/@lerna/command/-/command-6.1.0.tgz#bcb12516f2c181822b3b5be46c18eadc9b61e885" - integrity sha512-OnMqBDaEBY0C8v9CXIWFbGGKgsiUtZrnKVvQRbupMSZDKMpVGWIUd3X98Is9j9MAmk1ynhBMWE9Fwai5ML/mcA== - dependencies: - "@lerna/child-process" "6.1.0" - "@lerna/package-graph" "6.1.0" - "@lerna/project" "6.1.0" - "@lerna/validation-error" "6.1.0" - "@lerna/write-log-file" "6.1.0" - clone-deep "^4.0.1" - dedent "^0.7.0" - execa "^5.0.0" - is-ci "^2.0.0" - npmlog "^6.0.2" - -"@lerna/conventional-commits@6.1.0": - version "6.1.0" - resolved "https://registry.npmjs.org/@lerna/conventional-commits/-/conventional-commits-6.1.0.tgz#1157bb66d84d48880dc5c5026d743cedf0f47094" - integrity sha512-Tipo3cVr8mNVca4btzrCIzct59ZJWERT8/ZCZ/TQWuI4huUJZs6LRofLtB0xsGJAVZ7Vz2WRXAeH4XYgeUxutQ== - dependencies: - "@lerna/validation-error" "6.1.0" - conventional-changelog-angular "^5.0.12" - conventional-changelog-core "^4.2.4" - conventional-recommended-bump "^6.1.0" - fs-extra "^9.1.0" - get-stream "^6.0.0" - npm-package-arg "8.1.1" - npmlog "^6.0.2" - pify "^5.0.0" - semver "^7.3.4" - -"@lerna/create-symlink@6.1.0": - version "6.1.0" - resolved "https://registry.npmjs.org/@lerna/create-symlink/-/create-symlink-6.1.0.tgz#d4260831f5d10abc0c70f0a8f39bea91db87e640" - integrity sha512-ulMa5OUJEwEWBHSgCUNGxrcsJllq1YMYWqhufvIigmMPJ0Zv3TV1Hha5i2MsqLJAakxtW0pNuwdutkUTtUdgxQ== - dependencies: - cmd-shim "^5.0.0" - fs-extra "^9.1.0" - npmlog "^6.0.2" - -"@lerna/create@6.1.0": - version "6.1.0" - resolved "https://registry.npmjs.org/@lerna/create/-/create-6.1.0.tgz#cde219da46a7c5062c558366b4ffce2134f13845" - integrity sha512-ZqlknXu0L29cV5mcfNgBLl+1RbKTWmNk8mj545zgXc7qQDgmrY+EVvrs8Cirey8C7bBpVkzP7Brzze0MSoB4rQ== - dependencies: - "@lerna/child-process" "6.1.0" - "@lerna/command" "6.1.0" - "@lerna/npm-conf" "6.1.0" - "@lerna/validation-error" "6.1.0" - dedent "^0.7.0" - fs-extra "^9.1.0" - init-package-json "^3.0.2" - npm-package-arg "8.1.1" - p-reduce "^2.1.0" - pacote "^13.6.1" - pify "^5.0.0" - semver "^7.3.4" - slash "^3.0.0" - validate-npm-package-license "^3.0.4" - validate-npm-package-name "^4.0.0" - yargs-parser "20.2.4" - -"@lerna/describe-ref@6.1.0": - version "6.1.0" - resolved "https://registry.npmjs.org/@lerna/describe-ref/-/describe-ref-6.1.0.tgz#60f0b8297b912aa5fe5e6ab8ef6c4127813681a7" - integrity sha512-0RQAYnxBaMz1SrEb/rhfR+8VeZx5tvCNYKRee5oXIDZdQ2c6/EPyrKCp3WcqiuOWY50SfGOVfxJEcxpK8Y3FNA== - dependencies: - "@lerna/child-process" "6.1.0" - npmlog "^6.0.2" - -"@lerna/diff@6.1.0": - version "6.1.0" - resolved "https://registry.npmjs.org/@lerna/diff/-/diff-6.1.0.tgz#bfa9bc35894d88a33fa0a3a5787082dea45d8cb2" - integrity sha512-GhP+jPDbcp9QcAMSAjFn4lzM8MKpLR1yt5jll+zUD831U1sL0I5t8HUosFroe5MoRNffEL/jHuI3SbC3jjqWjQ== - dependencies: - "@lerna/child-process" "6.1.0" - "@lerna/command" "6.1.0" - "@lerna/validation-error" "6.1.0" - npmlog "^6.0.2" - -"@lerna/exec@6.1.0": - version "6.1.0" - resolved "https://registry.npmjs.org/@lerna/exec/-/exec-6.1.0.tgz#a2d165576471ff61e33c49952d40a5dbc36fc78f" - integrity sha512-Ej6WlPHXLF6hZHsfD+J/dxeuTrnc0HIfIXR1DU//msHW5RNCdi9+I7StwreCAQH/dLEsdBjPg5chNmuj2JLQRg== - dependencies: - "@lerna/child-process" "6.1.0" - "@lerna/command" "6.1.0" - "@lerna/filter-options" "6.1.0" - "@lerna/profiler" "6.1.0" - "@lerna/run-topologically" "6.1.0" - "@lerna/validation-error" "6.1.0" - p-map "^4.0.0" - -"@lerna/filter-options@6.1.0": - version "6.1.0" - resolved "https://registry.npmjs.org/@lerna/filter-options/-/filter-options-6.1.0.tgz#f4ee65d0db0273ce490ce6c72c9dbb1d23268ca6" - integrity sha512-kPf92Z7uLsR6MUiXnyXWebaUWArLa15wLfpfTwIp5H3MNk1lTbuG7QnrxE7OxQj+ozFmBvXeV9fuwfLsYTfmOw== - dependencies: - "@lerna/collect-updates" "6.1.0" - "@lerna/filter-packages" "6.1.0" - dedent "^0.7.0" - npmlog "^6.0.2" - -"@lerna/filter-packages@6.1.0": - version "6.1.0" - resolved "https://registry.npmjs.org/@lerna/filter-packages/-/filter-packages-6.1.0.tgz#1ddac63a6ffdf5f058d206be5adfb39ad7aaf4f9" - integrity sha512-zW2avsZHs/ITE/37AEMhegGVHjiD0rgNk9bguNDfz6zaPa90UaW6PWDH6Tf4ThPRlbkl2Go48N3bFYHYSJKbcw== - dependencies: - "@lerna/validation-error" "6.1.0" - multimatch "^5.0.0" - npmlog "^6.0.2" - -"@lerna/get-npm-exec-opts@6.1.0": - version "6.1.0" - resolved "https://registry.npmjs.org/@lerna/get-npm-exec-opts/-/get-npm-exec-opts-6.1.0.tgz#22351e2ebc4adbef21ca4b86187278e15e4cb38a" - integrity sha512-10Pdf+W0z7RT34o0SWlf+WVzz2/WbnTIJ1tQqXvXx6soj2L/xGLhOPvhJiKNtl4WlvUiO/zQ91yb83ESP4TZaA== - dependencies: - npmlog "^6.0.2" - -"@lerna/get-packed@6.1.0": - version "6.1.0" - resolved "https://registry.npmjs.org/@lerna/get-packed/-/get-packed-6.1.0.tgz#b6d1c1dd1e068212e784b8dfc2e5fe64741ea8db" - integrity sha512-lg0wPpV0wPekcD0mebJp619hMxsOgbZDOH5AkL/bCR217391eha0iPhQ0dU/G0Smd2vv6Cg443+J5QdI4LGRTg== - dependencies: - fs-extra "^9.1.0" - ssri "^9.0.1" - tar "^6.1.0" - -"@lerna/github-client@6.1.0": - version "6.1.0" - resolved "https://registry.npmjs.org/@lerna/github-client/-/github-client-6.1.0.tgz#cd33743e4529a0b822ae6716cb4b981e1d8ffe8f" - integrity sha512-+/4PtDgsjt0VRRZtOCN2Piyu0asU/16gSZZy/opVb8dlT44lTrH/ZghrJLE4tSL8Nuv688kx0kSgbUG8BY54jQ== - dependencies: - "@lerna/child-process" "6.1.0" - "@octokit/plugin-enterprise-rest" "^6.0.1" - "@octokit/rest" "^19.0.3" - git-url-parse "^13.1.0" - npmlog "^6.0.2" - -"@lerna/gitlab-client@6.1.0": - version "6.1.0" - resolved "https://registry.npmjs.org/@lerna/gitlab-client/-/gitlab-client-6.1.0.tgz#bbcbf80d937e5980798ac1e0edd1f769101057d8" - integrity sha512-fUI/ppXzxJafN9ceSl+FDgsYvu3iTsO6UW0WTD63pS32CfM+PiCryLQHzuc4RkyVW8WQH3aCR/GbaKCqbu52bw== - dependencies: - node-fetch "^2.6.1" - npmlog "^6.0.2" - -"@lerna/global-options@6.1.0": - version "6.1.0" - resolved "https://registry.npmjs.org/@lerna/global-options/-/global-options-6.1.0.tgz#268e1de924369102e47babd9288086764ec6f9e6" - integrity sha512-1OyJ/N1XJh3ZAy8S20c6th9C4yBm/k3bRIdC+z0XxpDaHwfNt8mT9kUIDt6AIFCUvVKjSwnIsMHwhzXqBnwYSA== - -"@lerna/has-npm-version@6.1.0": - version "6.1.0" - resolved "https://registry.npmjs.org/@lerna/has-npm-version/-/has-npm-version-6.1.0.tgz#a5d960213d1a7ca5374eb3c551a17b322b9a9e62" - integrity sha512-up5PVuP6BmKQ5/UgH/t2c5B1q4HhjwW3/bqbNayX6V0qNz8OijnMYvEUbxFk8fOdeN41qVnhAk0Tb5kbdtYh2A== - dependencies: - "@lerna/child-process" "6.1.0" - semver "^7.3.4" - -"@lerna/import@6.1.0": - version "6.1.0" - resolved "https://registry.npmjs.org/@lerna/import/-/import-6.1.0.tgz#1c64281e3431c43c9cd140b66a6a51427afe7095" - integrity sha512-xsBhiKLUavATR32dAFL+WFY0yuab0hsM1eztKtRKk4wy7lSyxRfA5EIUcNCsLXx2xaDOKoMncCTXgNcpeYuqcQ== - dependencies: - "@lerna/child-process" "6.1.0" - "@lerna/command" "6.1.0" - "@lerna/prompt" "6.1.0" - "@lerna/pulse-till-done" "6.1.0" - "@lerna/validation-error" "6.1.0" - dedent "^0.7.0" - fs-extra "^9.1.0" - p-map-series "^2.1.0" - -"@lerna/info@6.1.0": - version "6.1.0" - resolved "https://registry.npmjs.org/@lerna/info/-/info-6.1.0.tgz#a5d66a9c1f18398dc020a6f6073c399013081587" - integrity sha512-CsrWdW/Wyb4kcvHSnrsm7KYWFvjUNItu+ryeyWBZJtWYQOv45jNmWix6j2L4/w1+mMlWMjsfLmBscg82UBrF5w== - dependencies: - "@lerna/command" "6.1.0" - "@lerna/output" "6.1.0" - envinfo "^7.7.4" - -"@lerna/init@6.1.0": - version "6.1.0" - resolved "https://registry.npmjs.org/@lerna/init/-/init-6.1.0.tgz#b178775693b9c38c0f3fe3300eeb574cf76e0297" - integrity sha512-z8oUeVjn+FQYAtepAw6G47cGodLyBAyNoEjO3IsJjQLWE1yH3r83L2sjyD/EckgR3o2VTEzrKo4ArhxLp2mNmg== - dependencies: - "@lerna/child-process" "6.1.0" - "@lerna/command" "6.1.0" - "@lerna/project" "6.1.0" - fs-extra "^9.1.0" - p-map "^4.0.0" - write-json-file "^4.3.0" - -"@lerna/link@6.1.0": - version "6.1.0" - resolved "https://registry.npmjs.org/@lerna/link/-/link-6.1.0.tgz#f6f0cfd0b02aecdeb304ce614e4e4e89fe0a3ad5" - integrity sha512-7OD2lYNQHl6Kl1KYmplt8KoWjVHdiaqpYqwD38AwcB09YN58nGmo4aJgC12Fdx8DSNjkumgM0ROg/JOjMCTIzQ== - dependencies: - "@lerna/command" "6.1.0" - "@lerna/package-graph" "6.1.0" - "@lerna/symlink-dependencies" "6.1.0" - "@lerna/validation-error" "6.1.0" - p-map "^4.0.0" - slash "^3.0.0" - -"@lerna/list@6.1.0": - version "6.1.0" - resolved "https://registry.npmjs.org/@lerna/list/-/list-6.1.0.tgz#a7625bceb5224c4bf1154e715c07ea29f9698bac" - integrity sha512-7/g2hjizkvVnBGpVm+qC7lUFGhZ/0GIMUbGQwnE6yXDGm8yP9aEcNVkU4JGrDWW+uIklf9oodnMHaLXd/FJe6Q== - dependencies: - "@lerna/command" "6.1.0" - "@lerna/filter-options" "6.1.0" - "@lerna/listable" "6.1.0" - "@lerna/output" "6.1.0" - -"@lerna/listable@6.1.0": - version "6.1.0" - resolved "https://registry.npmjs.org/@lerna/listable/-/listable-6.1.0.tgz#2510045fde7bc568b18172a5d24372a719bb5c4c" - integrity sha512-3KZ9lQ9AtNfGNH/mYJYaMKCiF2EQvLLBGYkWHeIzIs6foegcZNXe0Cyv3LNXuo5WslMNr5RT4wIgy3BOoAxdtg== - dependencies: - "@lerna/query-graph" "6.1.0" - chalk "^4.1.0" - columnify "^1.6.0" - -"@lerna/log-packed@6.1.0": - version "6.1.0" - resolved "https://registry.npmjs.org/@lerna/log-packed/-/log-packed-6.1.0.tgz#18ae946e8b7881f2fc5b973cc6682cc599b1759b" - integrity sha512-Sq2HZJAcPuoNeEHeIutcPYQCyWBxLyVGvEhgsP3xTe6XkBGQCG8piCp9wX+sc2zT+idPdpI6qLqdh85yYIMMhA== - dependencies: - byte-size "^7.0.0" - columnify "^1.6.0" - has-unicode "^2.0.1" - npmlog "^6.0.2" - -"@lerna/npm-conf@6.1.0": - version "6.1.0" - resolved "https://registry.npmjs.org/@lerna/npm-conf/-/npm-conf-6.1.0.tgz#79697260c9d14ffb9d892927f37fcde75b89ec58" - integrity sha512-+RD3mmJe9XSQj7Diibs0+UafAHPcrFCd29ODpDI+tzYl4MmYZblfrlL6mbSCiVYCZQneQ8Uku3P0r+DlbYBaFw== - dependencies: - config-chain "^1.1.12" - pify "^5.0.0" - -"@lerna/npm-dist-tag@6.1.0": - version "6.1.0" - resolved "https://registry.npmjs.org/@lerna/npm-dist-tag/-/npm-dist-tag-6.1.0.tgz#29f843aa628687a29dc3a9b905dd3002db7a3820" - integrity sha512-1zo+Yww/lvWJWZnEXpke9dZSb5poDzhUM/pQNqAQYSlbZ96o18SuCR6TEi5isMPiw63Aq1MMzbUqttQfJ11EOA== - dependencies: - "@lerna/otplease" "6.1.0" - npm-package-arg "8.1.1" - npm-registry-fetch "^13.3.0" - npmlog "^6.0.2" - -"@lerna/npm-install@6.1.0": - version "6.1.0" - resolved "https://registry.npmjs.org/@lerna/npm-install/-/npm-install-6.1.0.tgz#b75d1f152540a144bd6c81586a9f6010ed7f3046" - integrity sha512-1SHmOHZA1YJuUctLQBRjA2+yMp+UNYdOBsFb3xUVT7MjWnd1Zl0toT3jxGu96RNErD9JKkk/cGo/Aq+DU3s9pg== - dependencies: - "@lerna/child-process" "6.1.0" - "@lerna/get-npm-exec-opts" "6.1.0" - fs-extra "^9.1.0" - npm-package-arg "8.1.1" - npmlog "^6.0.2" - signal-exit "^3.0.3" - write-pkg "^4.0.0" - -"@lerna/npm-publish@6.1.0": - version "6.1.0" - resolved "https://registry.npmjs.org/@lerna/npm-publish/-/npm-publish-6.1.0.tgz#8fe561e639e6a06380354271aeca7cbc39acf7dd" - integrity sha512-N0LdR1ImZQw1r4cYaKtVbBhBPtj4Zu9NbvygzizEP5HuTfxZmE1Ans3w93Kks9VTXZXob8twNbXnzBwzTyEpEA== - dependencies: - "@lerna/otplease" "6.1.0" - "@lerna/run-lifecycle" "6.1.0" - fs-extra "^9.1.0" - libnpmpublish "^6.0.4" - npm-package-arg "8.1.1" - npmlog "^6.0.2" - pify "^5.0.0" - read-package-json "^5.0.1" - -"@lerna/npm-run-script@6.1.0": - version "6.1.0" - resolved "https://registry.npmjs.org/@lerna/npm-run-script/-/npm-run-script-6.1.0.tgz#bc5bd414ee9696168d88d8ce78f8e8b715967100" - integrity sha512-7p13mvdxdY5+VqWvvtMsMDeyCRs0PrrTmSHRO+FKuLQuGhBvUo05vevcMEOQNDvEvl/tXPrOVbeGCiGubYTCLg== - dependencies: - "@lerna/child-process" "6.1.0" - "@lerna/get-npm-exec-opts" "6.1.0" - npmlog "^6.0.2" - -"@lerna/otplease@6.1.0": - version "6.1.0" - resolved "https://registry.npmjs.org/@lerna/otplease/-/otplease-6.1.0.tgz#d25dbe2d867215b69f06de12ab4ff559d83d1d01" - integrity sha512-gqSE6IbaD4IeNJePkaDLaFLoGp0Ceu35sn7z0AHAOoHiQGGorOmvM+h1Md3xZZRSXQmY9LyJVhG5eRa38SoG4g== - dependencies: - "@lerna/prompt" "6.1.0" - -"@lerna/output@6.1.0": - version "6.1.0" - resolved "https://registry.npmjs.org/@lerna/output/-/output-6.1.0.tgz#d470146c6ee8ee063fd416081c1ca64fb132c4d8" - integrity sha512-mgCIzLKIuroytXuxjTB689ERtpfgyNXW0rMv9WHOa6ufQc+QJPjh3L4jVsOA0l+/OxZyi97PUXotduNj+0cbnA== - dependencies: - npmlog "^6.0.2" - -"@lerna/pack-directory@6.1.0": - version "6.1.0" - resolved "https://registry.npmjs.org/@lerna/pack-directory/-/pack-directory-6.1.0.tgz#3252ba7250d826b9922238c775abf5004e7580c4" - integrity sha512-Xsixqm2nkGXs9hvq08ClbGpRlCYnlBV4TwSrLttIDL712RlyXoPe2maJzTUqo9OXBbOumFSahUEInCMT2OS05g== - dependencies: - "@lerna/get-packed" "6.1.0" - "@lerna/package" "6.1.0" - "@lerna/run-lifecycle" "6.1.0" - "@lerna/temp-write" "6.1.0" - npm-packlist "^5.1.1" - npmlog "^6.0.2" - tar "^6.1.0" - -"@lerna/package-graph@6.1.0": - version "6.1.0" - resolved "https://registry.npmjs.org/@lerna/package-graph/-/package-graph-6.1.0.tgz#2373617605f48f53b5fa9d13188838b6c09022b0" - integrity sha512-yGyxd/eHTDjkpnBbDhTV0hwKF+i01qZc+6/ko65wOsh8xtgqpQeE6mtdgbvsLKcuMcIQ7PDy1ntyIv9phg14gQ== - dependencies: - "@lerna/prerelease-id-from-version" "6.1.0" - "@lerna/validation-error" "6.1.0" - npm-package-arg "8.1.1" - npmlog "^6.0.2" - semver "^7.3.4" - -"@lerna/package@6.1.0": - version "6.1.0" - resolved "https://registry.npmjs.org/@lerna/package/-/package-6.1.0.tgz#e9e33876c0509a86c1b676045b19fd3f7f1c77e2" - integrity sha512-PyNFtdH2IcLasp/nyMDshmeXotriOSlhbeFIxhdl1XuGj5v1so3utMSOrJMO5kzZJQg5zyx8qQoxL+WH/hkrVQ== - dependencies: - load-json-file "^6.2.0" - npm-package-arg "8.1.1" - write-pkg "^4.0.0" - -"@lerna/prerelease-id-from-version@6.1.0": - version "6.1.0" - resolved "https://registry.npmjs.org/@lerna/prerelease-id-from-version/-/prerelease-id-from-version-6.1.0.tgz#4ee5beeef4e81d77001e94ec5613c140b6615616" - integrity sha512-ngC4I6evvZztB6aOaSDEnhUgRTlqX3TyBXwWwLGTOXCPaCQBTPaLNokhmRdJ+ZVdZ4iHFbzEDSL07ubZrYUcmQ== - dependencies: - semver "^7.3.4" - -"@lerna/profiler@6.1.0": - version "6.1.0" - resolved "https://registry.npmjs.org/@lerna/profiler/-/profiler-6.1.0.tgz#aae2249f1a39c79db72a548ce50bf32f86a0f3a5" - integrity sha512-WFDQNpuqPqMJLg8llvrBHF8Ib5Asgp23lMeNUe89T62NUX6gkjVBTYdjsduxM0tZH6Pa0GAGaQcha97P6fxfdQ== - dependencies: - fs-extra "^9.1.0" - npmlog "^6.0.2" - upath "^2.0.1" - -"@lerna/project@6.1.0": - version "6.1.0" - resolved "https://registry.npmjs.org/@lerna/project/-/project-6.1.0.tgz#605afe28fb15d8b8b890fafe0ec1da2700964056" - integrity sha512-EOkfjjrTM16c3GUxGqcfYD2stV35p9mBEmkF41NPmyjfbzjol/irDF1r6Q7BsQSRsdClMJRCeZ168xdSxC2X0A== - dependencies: - "@lerna/package" "6.1.0" - "@lerna/validation-error" "6.1.0" - cosmiconfig "^7.0.0" - dedent "^0.7.0" - dot-prop "^6.0.1" - glob-parent "^5.1.1" - globby "^11.0.2" - js-yaml "^4.1.0" - load-json-file "^6.2.0" - npmlog "^6.0.2" - p-map "^4.0.0" - resolve-from "^5.0.0" - write-json-file "^4.3.0" - -"@lerna/prompt@6.1.0": - version "6.1.0" - resolved "https://registry.npmjs.org/@lerna/prompt/-/prompt-6.1.0.tgz#98e228220428d33620822f77e39f592ce29c776c" - integrity sha512-981J/C53TZ2l2mFVlWJN7zynSzf5GEHKvKQa12Td9iknhASZOuwTAWb6eq46246Ant6W5tWwb0NSPu3I5qtcrA== - dependencies: - inquirer "^8.2.4" - npmlog "^6.0.2" - -"@lerna/publish@6.1.0": - version "6.1.0" - resolved "https://registry.npmjs.org/@lerna/publish/-/publish-6.1.0.tgz#9d62c327bc3541a0430951d726b39a2fb17b7925" - integrity sha512-XtvuydtU0IptbAapLRgoN1AZj/WJR+e3UKnx9BQ1Dwc+Fpg2oqPxR/vi+6hxAsr95pdQ5CnWBdgS+dg2wEUJ7Q== - dependencies: - "@lerna/check-working-tree" "6.1.0" - "@lerna/child-process" "6.1.0" - "@lerna/collect-updates" "6.1.0" - "@lerna/command" "6.1.0" - "@lerna/describe-ref" "6.1.0" - "@lerna/log-packed" "6.1.0" - "@lerna/npm-conf" "6.1.0" - "@lerna/npm-dist-tag" "6.1.0" - "@lerna/npm-publish" "6.1.0" - "@lerna/otplease" "6.1.0" - "@lerna/output" "6.1.0" - "@lerna/pack-directory" "6.1.0" - "@lerna/prerelease-id-from-version" "6.1.0" - "@lerna/prompt" "6.1.0" - "@lerna/pulse-till-done" "6.1.0" - "@lerna/run-lifecycle" "6.1.0" - "@lerna/run-topologically" "6.1.0" - "@lerna/validation-error" "6.1.0" - "@lerna/version" "6.1.0" - fs-extra "^9.1.0" - libnpmaccess "^6.0.3" - npm-package-arg "8.1.1" - npm-registry-fetch "^13.3.0" - npmlog "^6.0.2" - p-map "^4.0.0" - p-pipe "^3.1.0" - pacote "^13.6.1" - semver "^7.3.4" - -"@lerna/pulse-till-done@6.1.0": - version "6.1.0" - resolved "https://registry.npmjs.org/@lerna/pulse-till-done/-/pulse-till-done-6.1.0.tgz#df0112a9a5b8547b53d18742ce21104eb360d731" - integrity sha512-a2RVT82E4R9nVXtehzp2TQL6iXp0QfEM3bu8tBAR/SfI1A9ggZWQhuuUqtRyhhVCajdQDOo7rS0UG7R5JzK58w== - dependencies: - npmlog "^6.0.2" - -"@lerna/query-graph@6.1.0": - version "6.1.0" - resolved "https://registry.npmjs.org/@lerna/query-graph/-/query-graph-6.1.0.tgz#e78c47c78d4691231fc379570e036bc2753cf6fa" - integrity sha512-YkyCc+6aR7GlCOcZXEKPcl5o5L2v+0YUNs59JrfAS0mctFosZ/2tP7pkdu2SI4qXIi5D0PMNsh/0fRni56znsQ== - dependencies: - "@lerna/package-graph" "6.1.0" - -"@lerna/resolve-symlink@6.1.0": - version "6.1.0" - resolved "https://registry.npmjs.org/@lerna/resolve-symlink/-/resolve-symlink-6.1.0.tgz#5a8686b99c838bc6e869930e5b5fd582607ebbe7" - integrity sha512-8ILO+h5fsE0q8MSLfdL+MT1GEsNhAB1fDyMkSsYgLRCsssN/cViZbffpclZyT/EfAhpyKfBCHZ0CmT1ZGofU1A== - dependencies: - fs-extra "^9.1.0" - npmlog "^6.0.2" - read-cmd-shim "^3.0.0" - -"@lerna/rimraf-dir@6.1.0": - version "6.1.0" - resolved "https://registry.npmjs.org/@lerna/rimraf-dir/-/rimraf-dir-6.1.0.tgz#75559585d5921563eff0e206bb9ec8ab0cc967c6" - integrity sha512-J9YeGHkCCeAIzsnKURYeGECBexiIii6HA+Bbd+rAgoKPsNCOj6ql4+qJE8Jbd7fQEFNDPQeBCYvM7JcdMc0WSA== - dependencies: - "@lerna/child-process" "6.1.0" - npmlog "^6.0.2" - path-exists "^4.0.0" - rimraf "^3.0.2" - -"@lerna/run-lifecycle@6.1.0": - version "6.1.0" - resolved "https://registry.npmjs.org/@lerna/run-lifecycle/-/run-lifecycle-6.1.0.tgz#e1fa6cd300842ef1d688af77648fed05ec2d5345" - integrity sha512-GbTdKxL+hWHEPgyBEKtqY9Nf+jFlt6YLtP5VjEVc5SdLkm+FeRquar9/YcZVUbzr3c+NJwWNgVjHuePfowdpUA== - dependencies: - "@lerna/npm-conf" "6.1.0" - "@npmcli/run-script" "^4.1.7" - npmlog "^6.0.2" - p-queue "^6.6.2" - -"@lerna/run-topologically@6.1.0": - version "6.1.0" - resolved "https://registry.npmjs.org/@lerna/run-topologically/-/run-topologically-6.1.0.tgz#8f1a428b5d4b800bced178edabfa2262b328572f" - integrity sha512-kpTaSBKdKjtf61be8Z1e7TIaMt/aksfxswQtpFxEuKDsPsdHfR8htSkADO4d/3SZFtmcAHIHNCQj9CaNj4O4Xw== - dependencies: - "@lerna/query-graph" "6.1.0" - p-queue "^6.6.2" - -"@lerna/run@6.1.0": - version "6.1.0" - resolved "https://registry.npmjs.org/@lerna/run/-/run-6.1.0.tgz#efaea1acc78cb7fc73b4906be70002e118628d64" - integrity sha512-vlEEKPcTloiob6EK7gxrjEdB6fQQ/LNfWhSJCGxJlvNVbrMpoWIu0Kpp20b0nE+lzX7rRJ4seWr7Wdo/Fjub4Q== - dependencies: - "@lerna/command" "6.1.0" - "@lerna/filter-options" "6.1.0" - "@lerna/npm-run-script" "6.1.0" - "@lerna/output" "6.1.0" - "@lerna/profiler" "6.1.0" - "@lerna/run-topologically" "6.1.0" - "@lerna/timer" "6.1.0" - "@lerna/validation-error" "6.1.0" - fs-extra "^9.1.0" - p-map "^4.0.0" - -"@lerna/symlink-binary@6.1.0": - version "6.1.0" - resolved "https://registry.npmjs.org/@lerna/symlink-binary/-/symlink-binary-6.1.0.tgz#7d476499b86ae5fcb853c510603cff9a27acf105" - integrity sha512-DaiRNZk/dvomNxgEaTW145PyL7vIGP7rvnfXV2FO+rjX8UUSNUOjmVmHlYfs64gV9Eqx/dLfQClIbKcwYMD83A== - dependencies: - "@lerna/create-symlink" "6.1.0" - "@lerna/package" "6.1.0" - fs-extra "^9.1.0" - p-map "^4.0.0" - -"@lerna/symlink-dependencies@6.1.0": - version "6.1.0" - resolved "https://registry.npmjs.org/@lerna/symlink-dependencies/-/symlink-dependencies-6.1.0.tgz#f44d33e043fed21a366c4ced2cbde8fa8be0c5fc" - integrity sha512-hrTvtY1Ek+fLA4JjXsKsvwPjuJD0rwB/+K4WY57t00owj//BpCsJ37w3kkkS7f/PcW/5uRjCuHcY67LOEwsRxw== - dependencies: - "@lerna/create-symlink" "6.1.0" - "@lerna/resolve-symlink" "6.1.0" - "@lerna/symlink-binary" "6.1.0" - fs-extra "^9.1.0" - p-map "^4.0.0" - p-map-series "^2.1.0" - -"@lerna/temp-write@6.1.0": - version "6.1.0" - resolved "https://registry.npmjs.org/@lerna/temp-write/-/temp-write-6.1.0.tgz#a5d532090dd7b2d4f8965fbb475376aae06b9242" - integrity sha512-ZcQl88H9HbQ/TeWUOVt+vDYwptm7kwprGvj9KkZXr9S5Bn6SiKRQOeydCCfCrQT+9Q3dm7QZXV6rWzLsACcAlQ== - dependencies: - graceful-fs "^4.1.15" - is-stream "^2.0.0" - make-dir "^3.0.0" - temp-dir "^1.0.0" - uuid "^8.3.2" - -"@lerna/timer@6.1.0": - version "6.1.0" - resolved "https://registry.npmjs.org/@lerna/timer/-/timer-6.1.0.tgz#245b02c05b2dec6d2aed2da8a0962cf0343d83d5" - integrity sha512-du+NQ9q7uO4d2nVU4AD2DSPuAZqUapA/bZKuVpFVxvY9Qhzb8dQKLsFISe4A9TjyoNAk8ZeWK0aBc/6N+Qer9A== - -"@lerna/validation-error@6.1.0": - version "6.1.0" - resolved "https://registry.npmjs.org/@lerna/validation-error/-/validation-error-6.1.0.tgz#03bd46f6219b6db7c4420528d5aaf047f92693e3" - integrity sha512-q0c3XCi5OpyTr8AcfbisS6e3svZaJF/riCvBDqRMaQUT4A8QOPzB4fVF3/+J2u54nidBuTlIk0JZu9aOdWTUkQ== - dependencies: - npmlog "^6.0.2" - -"@lerna/version@6.1.0": - version "6.1.0" - resolved "https://registry.npmjs.org/@lerna/version/-/version-6.1.0.tgz#44d8649e978df9d6a14d97c9d7631a7dcd4a9cbf" - integrity sha512-RUxVFdzHt0739lRNMrAbo6HWcFrcyG7atM1pn+Eo61fUoA5R/9N4bCk4m9xUGkJ/mOcROjuwAGe+wT1uOs58Bg== - dependencies: - "@lerna/check-working-tree" "6.1.0" - "@lerna/child-process" "6.1.0" - "@lerna/collect-updates" "6.1.0" - "@lerna/command" "6.1.0" - "@lerna/conventional-commits" "6.1.0" - "@lerna/github-client" "6.1.0" - "@lerna/gitlab-client" "6.1.0" - "@lerna/output" "6.1.0" - "@lerna/prerelease-id-from-version" "6.1.0" - "@lerna/prompt" "6.1.0" - "@lerna/run-lifecycle" "6.1.0" - "@lerna/run-topologically" "6.1.0" - "@lerna/temp-write" "6.1.0" - "@lerna/validation-error" "6.1.0" - "@nrwl/devkit" ">=14.8.6 < 16" - chalk "^4.1.0" - dedent "^0.7.0" - load-json-file "^6.2.0" - minimatch "^3.0.4" - npmlog "^6.0.2" - p-map "^4.0.0" - p-pipe "^3.1.0" - p-reduce "^2.1.0" - p-waterfall "^2.1.1" - semver "^7.3.4" - slash "^3.0.0" - write-json-file "^4.3.0" - -"@lerna/write-log-file@6.1.0": - version "6.1.0" - resolved "https://registry.npmjs.org/@lerna/write-log-file/-/write-log-file-6.1.0.tgz#b811cffd2ea2b3be6239a756c64dac9a3795707a" - integrity sha512-09omu2w4NCt8mJH/X9ZMuToQQ3xu/KpC7EU4yDl2Qy8nxKf8HiG8Oe+YYNprngmkdsq60F5eUZvoiFDZ5JeGIg== - dependencies: - npmlog "^6.0.2" - write-file-atomic "^4.0.1" - -"@lumino/algorithm@*", "@lumino/algorithm@^1.3.3", "@lumino/algorithm@^1.9.0", "@lumino/algorithm@^1.9.2": - version "1.9.2" - resolved "https://registry.yarnpkg.com/@lumino/algorithm/-/algorithm-1.9.2.tgz#b95e6419aed58ff6b863a51bfb4add0f795141d3" - integrity sha512-Z06lp/yuhz8CtIir3PNTGnuk7909eXt4ukJsCzChsGuot2l5Fbs96RJ/FOHgwCedaX74CtxPjXHXoszFbUA+4A== - -"@lumino/application@^1.31.3": - version "1.31.3" - resolved "https://registry.yarnpkg.com/@lumino/application/-/application-1.31.3.tgz#c5a9bc84212a2505be8f5d43516e0603d9100965" - integrity sha512-XnsXm5PD9QevJRl/pHJziYmhRKqJYjEOTL6Vh9dtKpPPML57uswOj59Pokxx/yCvym1xRF9iDVvujy3KallRwQ== - dependencies: - "@lumino/commands" "^1.21.1" - "@lumino/coreutils" "^1.12.1" - "@lumino/widgets" "^1.37.1" - -"@lumino/collections@^1.9.3": - version "1.9.3" - resolved "https://registry.yarnpkg.com/@lumino/collections/-/collections-1.9.3.tgz#370dc2d50aa91371288a4f7376bea5a3191fc5dc" - integrity sha512-2i2Wf1xnfTgEgdyKEpqM16bcYRIhUOGCDzaVCEZACVG9R1CgYwOe3zfn71slBQOVSjjRgwYrgLXu4MBpt6YK+g== - dependencies: - "@lumino/algorithm" "^1.9.2" - -"@lumino/commands@^1.19.0", "@lumino/commands@^1.21.1": - version "1.21.1" - resolved "https://registry.yarnpkg.com/@lumino/commands/-/commands-1.21.1.tgz#eda8b3cf5ef73b9c8ce93b3b5cf66bb053df2a76" - integrity sha512-d1zJmwz5bHU0BM/Rl3tRdZ7/WgXnFB0bM7x7Bf0XDlmX++jnU9k0j3mh6/5JqCGLmIApKCRwVqSaV7jPmSJlcQ== - dependencies: - "@lumino/algorithm" "^1.9.2" - "@lumino/coreutils" "^1.12.1" - "@lumino/disposable" "^1.10.4" - "@lumino/domutils" "^1.8.2" - "@lumino/keyboard" "^1.8.2" - "@lumino/signaling" "^1.11.1" - "@lumino/virtualdom" "^1.14.3" - -"@lumino/coreutils@^1.11.0", "@lumino/coreutils@^1.11.0 || ^2.0.0-alpha.6", "@lumino/coreutils@^1.12.1", "@lumino/coreutils@^1.5.3": - version "1.12.1" - resolved "https://registry.yarnpkg.com/@lumino/coreutils/-/coreutils-1.12.1.tgz#79860c9937483ddf6cda87f6c2b9da8eb1a5d768" - integrity sha512-JLu3nTHzJk9N8ohZ85u75YxemMrmDzJdNgZztfP7F7T7mxND3YVNCkJG35a6aJ7edu1sIgCjBxOvV+hv27iYvQ== - -"@lumino/disposable@^1.10.0", "@lumino/disposable@^1.10.0 || ^2.0.0-alpha.6", "@lumino/disposable@^1.10.4": - version "1.10.4" - resolved "https://registry.yarnpkg.com/@lumino/disposable/-/disposable-1.10.4.tgz#73b452044fecf988d7fa73fac9451b1a7f987323" - integrity sha512-4ZxyYcyzUS+ZeB2KAH9oAH3w0DUUceiVr+FIZHZ2TAYGWZI/85WlqJtfm0xjwEpCwLLW1TDqJrISuZu3iMmVMA== - dependencies: - "@lumino/algorithm" "^1.9.2" - "@lumino/signaling" "^1.11.1" - -"@lumino/domutils@^1.8.0", "@lumino/domutils@^1.8.2": - version "1.8.2" - resolved "https://registry.yarnpkg.com/@lumino/domutils/-/domutils-1.8.2.tgz#d15cdbae12bea52852bbc13c4629360f9f05b7f5" - integrity sha512-QIpMfkPJrs4GrWBuJf2Sn1fpyVPmvqUUAeD8xAQo8+4V5JAT0vUDLxZ9HijefMgNCi3+Bs8Z3lQwRCrz+cFP1A== - -"@lumino/dragdrop@^1.13.0", "@lumino/dragdrop@^1.14.4": - version "1.14.4" - resolved "https://registry.yarnpkg.com/@lumino/dragdrop/-/dragdrop-1.14.4.tgz#b6ec4cf4f470c17a849e31f299d5a24acdc8c7d3" - integrity sha512-IHX2M8Yqs2YsFHHXKSKiYLgv9DEuhyyKoDS85Chg34J9OaPC5ocT0AmNVnpeq9T4A50sg3vdL9mSRCZ0f302Gw== - dependencies: - "@lumino/coreutils" "^1.12.1" - "@lumino/disposable" "^1.10.4" - -"@lumino/keyboard@^1.8.2": - version "1.8.2" - resolved "https://registry.yarnpkg.com/@lumino/keyboard/-/keyboard-1.8.2.tgz#714dbe671f0718f516d1ec23188b31a9ccd82fb2" - integrity sha512-Dy+XqQ1wXbcnuYtjys5A0pAqf4SpAFl9NY6owyIhXAo0Va7w3LYp3jgiP1xAaBAwMuUppiUAfrbjrysZuZ625g== - -"@lumino/messaging@^1.10.0", "@lumino/messaging@^1.10.3", "@lumino/messaging@^1.4.3": - version "1.10.3" - resolved "https://registry.yarnpkg.com/@lumino/messaging/-/messaging-1.10.3.tgz#b6227bdfc178a8542571625ecb68063691b6af3c" - integrity sha512-F/KOwMCdqvdEG8CYAJcBSadzp6aI7a47Fr60zAKGqZATSRRRV41q53iXU7HjFPqQqQIvdn9Z7J32rBEAyQAzww== - dependencies: - "@lumino/algorithm" "^1.9.2" - "@lumino/collections" "^1.9.3" - -"@lumino/polling@^1.3.3", "@lumino/polling@^1.9.0": - version "1.11.4" - resolved "https://registry.yarnpkg.com/@lumino/polling/-/polling-1.11.4.tgz#ddfe47da5b41af4cfa474898542c099e445c0e6c" - integrity sha512-yC7JLssj3mqVK6TsYj7dg4AG0rcsC42YtpoDLtz9yzO84Q5flQUfmjAPQB6oPA6wZOlISs3iasF+uO2w1ls5jg== - dependencies: - "@lumino/coreutils" "^1.12.1" - "@lumino/disposable" "^1.10.4" - "@lumino/signaling" "^1.11.1" - -"@lumino/properties@^1.8.0", "@lumino/properties@^1.8.2": - version "1.8.2" - resolved "https://registry.yarnpkg.com/@lumino/properties/-/properties-1.8.2.tgz#91131f2ca91a902faa138771eb63341db78fc0fd" - integrity sha512-EkjI9Cw8R0U+xC9HxdFSu7X1tz1H1vKu20cGvJ2gU+CXlMB1DvoYJCYxCThByHZ+kURTAap4SE5x8HvKwNPbig== - -"@lumino/signaling@^1.10.0", "@lumino/signaling@^1.10.0 || ^2.0.0-alpha.6", "@lumino/signaling@^1.11.1", "@lumino/signaling@^1.4.3": - version "1.11.1" - resolved "https://registry.yarnpkg.com/@lumino/signaling/-/signaling-1.11.1.tgz#438f447a1b644fd286549804f9851b5aec9679a2" - integrity sha512-YCUmgw08VoyMN5KxzqPO3KMx+cwdPv28tAN06C0K7Q/dQf+oufb1XocuhZb5selTrTmmuXeizaYxgLIQGdS1fA== - dependencies: - "@lumino/algorithm" "^1.9.2" - "@lumino/properties" "^1.8.2" - -"@lumino/virtualdom@^1.14.0", "@lumino/virtualdom@^1.14.3": - version "1.14.3" - resolved "https://registry.yarnpkg.com/@lumino/virtualdom/-/virtualdom-1.14.3.tgz#e490c36ff506d877cf45771d6968e3e26a8919fd" - integrity sha512-5joUC1yuxeXbpfbSBm/OR8Mu9HoTo6PDX0RKqzlJ9o97iml7zayFN/ynzcxScKGQAo9iaXOY8uVIvGUT8FnsGw== - dependencies: - "@lumino/algorithm" "^1.9.2" - -"@lumino/widgets@^1.14.0", "@lumino/widgets@^1.16.1", "@lumino/widgets@^1.37.1": - version "1.37.1" - resolved "https://registry.yarnpkg.com/@lumino/widgets/-/widgets-1.37.1.tgz#d7a2398b276e15e60aff4fec58c035d46549a75b" - integrity sha512-/whz5B/hL0fjv0bR8JYZ+Emx+CH7HBwXc4TqI9PrrHGm3g6+jRJAyIFGZcQubqkPxxHrRE/VxQgoDKGhINw/Gw== - dependencies: - "@lumino/algorithm" "^1.9.2" - "@lumino/commands" "^1.21.1" - "@lumino/coreutils" "^1.12.1" - "@lumino/disposable" "^1.10.4" - "@lumino/domutils" "^1.8.2" - "@lumino/dragdrop" "^1.14.4" - "@lumino/keyboard" "^1.8.2" - "@lumino/messaging" "^1.10.3" - "@lumino/properties" "^1.8.2" - "@lumino/signaling" "^1.11.1" - "@lumino/virtualdom" "^1.14.3" - -"@mapbox/node-pre-gyp@^1.0.0": - version "1.0.9" - resolved "https://registry.yarnpkg.com/@mapbox/node-pre-gyp/-/node-pre-gyp-1.0.9.tgz#09a8781a3a036151cdebbe8719d6f8b25d4058bc" - integrity sha512-aDF3S3rK9Q2gey/WAttUlISduDItz5BU3306M9Eyv6/oS40aMprnopshtlKTykxRNIBEZuRMaZAnbrQ4QtKGyw== - dependencies: - detect-libc "^2.0.0" - https-proxy-agent "^5.0.0" - make-dir "^3.1.0" - node-fetch "^2.6.7" - nopt "^5.0.0" - npmlog "^5.0.1" - rimraf "^3.0.2" - semver "^7.3.5" - tar "^6.1.11" - -"@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", "@nodelib/fs.walk@^1.2.8": - 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" - -"@npmcli/arborist@5.3.0": - version "5.3.0" - resolved "https://registry.yarnpkg.com/@npmcli/arborist/-/arborist-5.3.0.tgz#321d9424677bfc08569e98a5ac445ee781f32053" - integrity sha512-+rZ9zgL1lnbl8Xbb1NQdMjveOMwj4lIYfcDtyJHHi5x4X8jtR6m8SXooJMZy5vmFVZ8w7A2Bnd/oX9eTuU8w5A== - dependencies: - "@isaacs/string-locale-compare" "^1.1.0" - "@npmcli/installed-package-contents" "^1.0.7" - "@npmcli/map-workspaces" "^2.0.3" - "@npmcli/metavuln-calculator" "^3.0.1" - "@npmcli/move-file" "^2.0.0" - "@npmcli/name-from-folder" "^1.0.1" - "@npmcli/node-gyp" "^2.0.0" - "@npmcli/package-json" "^2.0.0" - "@npmcli/run-script" "^4.1.3" - bin-links "^3.0.0" - cacache "^16.0.6" - common-ancestor-path "^1.0.1" - json-parse-even-better-errors "^2.3.1" - json-stringify-nice "^1.1.4" - mkdirp "^1.0.4" - mkdirp-infer-owner "^2.0.0" - nopt "^5.0.0" - npm-install-checks "^5.0.0" - npm-package-arg "^9.0.0" - npm-pick-manifest "^7.0.0" - npm-registry-fetch "^13.0.0" - npmlog "^6.0.2" - pacote "^13.6.1" - parse-conflict-json "^2.0.1" - proc-log "^2.0.0" - promise-all-reject-late "^1.0.0" - promise-call-limit "^1.0.1" - read-package-json-fast "^2.0.2" - readdir-scoped-modules "^1.1.0" - rimraf "^3.0.2" - semver "^7.3.7" - ssri "^9.0.0" - treeverse "^2.0.0" - walk-up-path "^1.0.0" - -"@npmcli/fs@^1.0.0": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@npmcli/fs/-/fs-1.1.1.tgz#72f719fe935e687c56a4faecf3c03d06ba593257" - integrity sha512-8KG5RD0GVP4ydEzRn/I4BNDuxDtqVbOdm8675T49OIG/NGhaK0pjPX7ZcDlvKYbA+ulvVK3ztfcF4uBdOxuJbQ== - dependencies: - "@gar/promisify" "^1.0.1" - semver "^7.3.5" - -"@npmcli/fs@^2.1.0": - version "2.1.2" - resolved "https://registry.yarnpkg.com/@npmcli/fs/-/fs-2.1.2.tgz#a9e2541a4a2fec2e69c29b35e6060973da79b865" - integrity sha512-yOJKRvohFOaLqipNtwYB9WugyZKhC/DZC4VYPmpaCzDBrA8YpK3qHZ8/HGscMnE4GqbkLNuVcCnxkeQEdGt6LQ== - dependencies: - "@gar/promisify" "^1.1.3" - semver "^7.3.5" - -"@npmcli/git@^3.0.0": - version "3.0.2" - resolved "https://registry.yarnpkg.com/@npmcli/git/-/git-3.0.2.tgz#5c5de6b4d70474cf2d09af149ce42e4e1dacb931" - integrity sha512-CAcd08y3DWBJqJDpfuVL0uijlq5oaXaOJEKHKc4wqrjd00gkvTZB+nFuLn+doOOKddaQS9JfqtNoFCO2LCvA3w== - dependencies: - "@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" - promise-inflight "^1.0.1" - promise-retry "^2.0.1" - semver "^7.3.5" - which "^2.0.2" - -"@npmcli/installed-package-contents@^1.0.7": - version "1.0.7" - resolved "https://registry.yarnpkg.com/@npmcli/installed-package-contents/-/installed-package-contents-1.0.7.tgz#ab7408c6147911b970a8abe261ce512232a3f4fa" - integrity sha512-9rufe0wnJusCQoLpV9ZPKIVP55itrM5BxOXs10DmdbRfgWtHy1LDyskbwRnBghuB0PrF7pNPOqREVtpz4HqzKw== - dependencies: - npm-bundled "^1.1.1" - npm-normalize-package-bin "^1.0.1" - -"@npmcli/map-workspaces@^2.0.3": - version "2.0.4" - resolved "https://registry.yarnpkg.com/@npmcli/map-workspaces/-/map-workspaces-2.0.4.tgz#9e5e8ab655215a262aefabf139782b894e0504fc" - integrity sha512-bMo0aAfwhVwqoVM5UzX1DJnlvVvzDCHae821jv48L1EsrYwfOZChlqWYXEtto/+BkBXetPbEWgau++/brh4oVg== - dependencies: - "@npmcli/name-from-folder" "^1.0.1" - glob "^8.0.1" - minimatch "^5.0.1" - read-package-json-fast "^2.0.3" - -"@npmcli/metavuln-calculator@^3.0.1": - version "3.1.1" - resolved "https://registry.yarnpkg.com/@npmcli/metavuln-calculator/-/metavuln-calculator-3.1.1.tgz#9359bd72b400f8353f6a28a25c8457b562602622" - integrity sha512-n69ygIaqAedecLeVH3KnO39M6ZHiJ2dEv5A7DGvcqCB8q17BGUgW8QaanIkbWUo2aYGZqJaOORTLAlIvKjNDKA== - dependencies: - cacache "^16.0.0" - json-parse-even-better-errors "^2.3.1" - pacote "^13.0.3" - semver "^7.3.5" - -"@npmcli/move-file@^1.0.1": - version "1.1.2" - resolved "https://registry.yarnpkg.com/@npmcli/move-file/-/move-file-1.1.2.tgz#1a82c3e372f7cae9253eb66d72543d6b8685c674" - integrity sha512-1SUf/Cg2GzGDyaf15aR9St9TWlb+XvbZXWpDx8YKs7MLzMH/BCeopv+y9vzrzgkfykCGuWOlSu3mZhj2+FQcrg== - dependencies: - mkdirp "^1.0.4" - rimraf "^3.0.2" - -"@npmcli/move-file@^2.0.0": - version "2.0.1" - resolved "https://registry.yarnpkg.com/@npmcli/move-file/-/move-file-2.0.1.tgz#26f6bdc379d87f75e55739bab89db525b06100e4" - integrity sha512-mJd2Z5TjYWq/ttPLLGqArdtnC74J6bOzg4rMDnN+p1xTacZ2yPRCk2y0oSWQtygLR9YVQXgOcONrwtnk3JupxQ== - dependencies: - mkdirp "^1.0.4" - rimraf "^3.0.2" - -"@npmcli/name-from-folder@^1.0.1": - version "1.0.1" - resolved "https://registry.yarnpkg.com/@npmcli/name-from-folder/-/name-from-folder-1.0.1.tgz#77ecd0a4fcb772ba6fe927e2e2e155fbec2e6b1a" - integrity sha512-qq3oEfcLFwNfEYOQ8HLimRGKlD8WSeGEdtUa7hmzpR8Sa7haL1KVQrvgO6wqMjhWFFVjgtrh1gIxDz+P8sjUaA== - -"@npmcli/node-gyp@^2.0.0": - version "2.0.0" - resolved "https://registry.yarnpkg.com/@npmcli/node-gyp/-/node-gyp-2.0.0.tgz#8c20e53e34e9078d18815c1d2dda6f2420d75e35" - integrity sha512-doNI35wIe3bBaEgrlPfdJPaCpUR89pJWep4Hq3aRdh6gKazIVWfs0jHttvSSoq47ZXgC7h73kDsUl8AoIQUB+A== - -"@npmcli/package-json@^2.0.0": - version "2.0.0" - resolved "https://registry.yarnpkg.com/@npmcli/package-json/-/package-json-2.0.0.tgz#3bbcf4677e21055adbe673d9f08c9f9cde942e4a" - integrity sha512-42jnZ6yl16GzjWSH7vtrmWyJDGVa/LXPdpN2rcUWolFjc9ON2N3uz0qdBbQACfmhuJZ2lbKYtmK5qx68ZPLHMA== - dependencies: - json-parse-even-better-errors "^2.3.1" - -"@npmcli/promise-spawn@^3.0.0": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@npmcli/promise-spawn/-/promise-spawn-3.0.0.tgz#53283b5f18f855c6925f23c24e67c911501ef573" - integrity sha512-s9SgS+p3a9Eohe68cSI3fi+hpcZUmXq5P7w0kMlAsWVtR7XbK3ptkZqKT2cK1zLDObJ3sR+8P59sJE0w/KTL1g== - dependencies: - infer-owner "^1.0.4" - -"@npmcli/run-script@^4.1.0", "@npmcli/run-script@^4.1.3", "@npmcli/run-script@^4.1.7": - version "4.2.1" - resolved "https://registry.yarnpkg.com/@npmcli/run-script/-/run-script-4.2.1.tgz#c07c5c71bc1c70a5f2a06b0d4da976641609b946" - integrity sha512-7dqywvVudPSrRCW5nTHpHgeWnbBtz8cFkOuKrecm6ih+oO9ciydhWt6OF7HlqupRRmB8Q/gECVdB9LMfToJbRg== - 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" - which "^2.0.2" - -"@nrwl/cli@15.3.0": - version "15.3.0" - resolved "https://registry.npmjs.org/@nrwl/cli/-/cli-15.3.0.tgz#61b145d2ba613f9df4dbb9188e631ca50a4e42cb" - integrity sha512-WAki2+puBp6qel/VAxdQmr/L/sLyw8K6bynYNmMl4eIlR5hjefrUChPzUiJDAS9/CUYQNOyva2VV5wofzdv95w== - dependencies: - nx "15.3.0" - -"@nrwl/devkit@>=14.8.6 < 16": - version "15.3.0" - resolved "https://registry.npmjs.org/@nrwl/devkit/-/devkit-15.3.0.tgz#4b0fc4c94f0b92413aa3d028f8cc75f586936d27" - integrity sha512-1O9QLB/eYS6ddw4MZnV4yj4CEqLIbpleZZiG/9w1TaiVO/jfNfXVaxc8EA87XSzMpk2W+/4Qggmabt6gAQaabA== - dependencies: - "@phenomnomnominal/tsquery" "4.1.1" - ejs "^3.1.7" - ignore "^5.0.4" - semver "7.3.4" - tslib "^2.3.0" - -"@nrwl/tao@15.3.0": - version "15.3.0" - resolved "https://registry.npmjs.org/@nrwl/tao/-/tao-15.3.0.tgz#20266f1269815cb28e21677b0aa7f913a7e31b17" - integrity sha512-alyzKKSgfgPwQ/FUozvk43VGOZHyNMiSM6Udl49ZaQwT77GXRFkrOu21odW6dciWPd3iUOUjfJISNqrEJmxvpw== - dependencies: - nx "15.3.0" - -"@octokit/auth-token@^3.0.0": - version "3.0.1" - resolved "https://registry.yarnpkg.com/@octokit/auth-token/-/auth-token-3.0.1.tgz#88bc2baf5d706cb258474e722a720a8365dff2ec" - integrity sha512-/USkK4cioY209wXRpund6HZzHo9GmjakpV9ycOkpMcMxMk7QVcVFVyCMtzvXYiHsB2crgDgrtNYSELYFBXhhaA== - dependencies: - "@octokit/types" "^7.0.0" - -"@octokit/core@^4.0.0": - version "4.0.5" - resolved "https://registry.yarnpkg.com/@octokit/core/-/core-4.0.5.tgz#589e68c0a35d2afdcd41dafceab072c2fbc6ab5f" - integrity sha512-4R3HeHTYVHCfzSAi0C6pbGXV8UDI5Rk+k3G7kLVNckswN9mvpOzW9oENfjfH3nEmzg8y3AmKmzs8Sg6pLCeOCA== - dependencies: - "@octokit/auth-token" "^3.0.0" - "@octokit/graphql" "^5.0.0" - "@octokit/request" "^6.0.0" - "@octokit/request-error" "^3.0.0" - "@octokit/types" "^7.0.0" - before-after-hook "^2.2.0" - universal-user-agent "^6.0.0" - -"@octokit/endpoint@^7.0.0": - version "7.0.1" - resolved "https://registry.yarnpkg.com/@octokit/endpoint/-/endpoint-7.0.1.tgz#cb0d03e62e8762f3c80e52b025179de81899a823" - integrity sha512-/wTXAJwt0HzJ2IeE4kQXO+mBScfzyCkI0hMtkIaqyXd9zg76OpOfNQfHL9FlaxAV2RsNiOXZibVWloy8EexENg== - dependencies: - "@octokit/types" "^7.0.0" - is-plain-object "^5.0.0" - universal-user-agent "^6.0.0" - -"@octokit/graphql@^5.0.0": - version "5.0.1" - resolved "https://registry.yarnpkg.com/@octokit/graphql/-/graphql-5.0.1.tgz#a06982514ad131fb6fbb9da968653b2233fade9b" - integrity sha512-sxmnewSwAixkP1TrLdE6yRG53eEhHhDTYUykUwdV9x8f91WcbhunIHk9x1PZLALdBZKRPUO2HRcm4kezZ79HoA== - dependencies: - "@octokit/request" "^6.0.0" - "@octokit/types" "^7.0.0" - universal-user-agent "^6.0.0" - -"@octokit/openapi-types@^13.4.0": - version "13.4.0" - resolved "https://registry.yarnpkg.com/@octokit/openapi-types/-/openapi-types-13.4.0.tgz#06fe8fda93bf21bdd397fe7ef8805249efda6c06" - integrity sha512-2mVzW0X1+HDO3jF80/+QFZNzJiTefELKbhMu6yaBYbp/1gSMkVDm4rT472gJljTokWUlXaaE63m7WrWENhMDLw== - -"@octokit/plugin-enterprise-rest@^6.0.1": - version "6.0.1" - resolved "https://registry.yarnpkg.com/@octokit/plugin-enterprise-rest/-/plugin-enterprise-rest-6.0.1.tgz#e07896739618dab8da7d4077c658003775f95437" - integrity sha512-93uGjlhUD+iNg1iWhUENAtJata6w5nE+V4urXOAlIXdco6xNZtUSfYY8dzp3Udy74aqO/B5UZL80x/YMa5PKRw== - -"@octokit/plugin-paginate-rest@^4.0.0": - version "4.1.0" - resolved "https://registry.yarnpkg.com/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-4.1.0.tgz#670ac9ac369448c69a2371bfcd7e2b37d95534f2" - integrity sha512-2O5K5fpajYG5g62wjzHR7/cWYaCA88CextAW3vFP+yoIHD0KEdlVMHfM5/i5LyV+JMmqiYW7w5qfg46FR+McNw== - dependencies: - "@octokit/types" "^7.1.1" - -"@octokit/plugin-request-log@^1.0.4": - version "1.0.4" - resolved "https://registry.yarnpkg.com/@octokit/plugin-request-log/-/plugin-request-log-1.0.4.tgz#5e50ed7083a613816b1e4a28aeec5fb7f1462e85" - integrity sha512-mLUsMkgP7K/cnFEw07kWqXGF5LKrOkD+lhCrKvPHXWDywAwuDUeDwWBpc69XK3pNX0uKiVt8g5z96PJ6z9xCFA== - -"@octokit/plugin-rest-endpoint-methods@^6.0.0": - version "6.3.0" - resolved "https://registry.yarnpkg.com/@octokit/plugin-rest-endpoint-methods/-/plugin-rest-endpoint-methods-6.3.0.tgz#81549334ce020169b84bd4a7fa2577e9d725d829" - integrity sha512-qEu2wn6E7hqluZwIEUnDxWROvKjov3zMIAi4H4d7cmKWNMeBprEXZzJe8pE5eStUYC1ysGhD0B7L6IeG1Rfb+g== - dependencies: - "@octokit/types" "^7.0.0" - deprecation "^2.3.1" - -"@octokit/request-error@^3.0.0": - version "3.0.1" - resolved "https://registry.yarnpkg.com/@octokit/request-error/-/request-error-3.0.1.tgz#3fd747913c06ab2195e52004a521889dadb4b295" - integrity sha512-ym4Bp0HTP7F3VFssV88WD1ZyCIRoE8H35pXSKwLeMizcdZAYc/t6N9X9Yr9n6t3aG9IH75XDnZ6UeZph0vHMWQ== - dependencies: - "@octokit/types" "^7.0.0" - deprecation "^2.0.0" - once "^1.4.0" - -"@octokit/request@^6.0.0": - version "6.2.1" - resolved "https://registry.yarnpkg.com/@octokit/request/-/request-6.2.1.tgz#3ceeb22dab09a29595d96594b6720fc14495cf4e" - integrity sha512-gYKRCia3cpajRzDSU+3pt1q2OcuC6PK8PmFIyxZDWCzRXRSIBH8jXjFJ8ZceoygBIm0KsEUg4x1+XcYBz7dHPQ== - dependencies: - "@octokit/endpoint" "^7.0.0" - "@octokit/request-error" "^3.0.0" - "@octokit/types" "^7.0.0" - is-plain-object "^5.0.0" - node-fetch "^2.6.7" - universal-user-agent "^6.0.0" - -"@octokit/rest@^19.0.3": - version "19.0.4" - resolved "https://registry.yarnpkg.com/@octokit/rest/-/rest-19.0.4.tgz#fd8bed1cefffa486e9ae46a9dc608ce81bcfcbdd" - integrity sha512-LwG668+6lE8zlSYOfwPj4FxWdv/qFXYBpv79TWIQEpBLKA9D/IMcWsF/U9RGpA3YqMVDiTxpgVpEW3zTFfPFTA== - dependencies: - "@octokit/core" "^4.0.0" - "@octokit/plugin-paginate-rest" "^4.0.0" - "@octokit/plugin-request-log" "^1.0.4" - "@octokit/plugin-rest-endpoint-methods" "^6.0.0" - -"@octokit/types@^7.0.0", "@octokit/types@^7.1.1": - version "7.1.1" - resolved "https://registry.yarnpkg.com/@octokit/types/-/types-7.1.1.tgz#a30fd6ca3279d59d532fa75583d65d93b7588e6d" - integrity sha512-Dx6cNTORyVaKY0Yeb9MbHksk79L8GXsihbG6PtWqTpkyA2TY1qBWE26EQXVG3dHwY9Femdd/WEeRUEiD0+H3TQ== - dependencies: - "@octokit/openapi-types" "^13.4.0" - -"@parcel/watcher@2.0.4": - version "2.0.4" - resolved "https://registry.yarnpkg.com/@parcel/watcher/-/watcher-2.0.4.tgz#f300fef4cc38008ff4b8c29d92588eced3ce014b" - integrity sha512-cTDi+FUDBIUOBKEtj+nhiJ71AZVlkAsQFuGQTun5tV9mwQBQgZvhCzG+URPQc8myeN32yRVZEfVAPCs1RW+Jvg== - dependencies: - node-addon-api "^3.2.1" - node-gyp-build "^4.3.0" - -"@phenomnomnominal/tsquery@4.1.1": - version "4.1.1" - resolved "https://registry.npmjs.org/@phenomnomnominal/tsquery/-/tsquery-4.1.1.tgz#42971b83590e9d853d024ddb04a18085a36518df" - integrity sha512-jjMmK1tnZbm1Jq5a7fBliM4gQwjxMU7TFoRNwIyzwlO+eHPRCFv/Nv+H/Gi1jc3WR7QURG8D5d0Tn12YGrUqBQ== - dependencies: - esquery "^1.0.1" - -"@retrolab/application@^0.2.0": - version "0.2.2" - resolved "https://registry.yarnpkg.com/@retrolab/application/-/application-0.2.2.tgz#e0c13e43497ea696be8932ecfd6dd4db68ee1787" - integrity sha512-pvPxSKbpKHlTyDXS1KbWSii3MI1coU8z1ol0Oze8zPRT3U+K1GDjdMI9rzemJwblHMhKC+Bgq7Y5UfSpUibz+A== - dependencies: - "@jupyterlab/application" "^3.0.0" - "@jupyterlab/coreutils" "^5.0.0" - "@jupyterlab/docregistry" "^3.0.0" - "@jupyterlab/rendermime-interfaces" "^3.0.0" - "@jupyterlab/ui-components" "^3.0.0" - "@lumino/algorithm" "^1.3.3" - "@lumino/coreutils" "^1.5.3" - "@lumino/messaging" "^1.4.3" - "@lumino/polling" "^1.3.3" - "@lumino/signaling" "^1.4.3" - "@lumino/widgets" "^1.14.0" - -"@rjsf/core@^3.1.0": - version "3.2.1" - resolved "https://registry.yarnpkg.com/@rjsf/core/-/core-3.2.1.tgz#8a7b24c9a6f01f0ecb093fdfc777172c12b1b009" - integrity sha512-dk8ihvxFbcuIwU7G+HiJbFgwyIvaumPt5g5zfnuC26mwTUPlaDGFXKK2yITp8tJ3+hcwS5zEXtAN9wUkfuM4jA== - dependencies: - "@types/json-schema" "^7.0.7" - ajv "^6.7.0" - core-js-pure "^3.6.5" - json-schema-merge-allof "^0.6.0" - jsonpointer "^5.0.0" - lodash "^4.17.15" - nanoid "^3.1.23" - prop-types "^15.7.2" - react-is "^16.9.0" - -"@sinonjs/commons@^1", "@sinonjs/commons@^1.3.0", "@sinonjs/commons@^1.4.0", "@sinonjs/commons@^1.7.0": - version "1.8.6" - resolved "https://registry.yarnpkg.com/@sinonjs/commons/-/commons-1.8.6.tgz#80c516a4dc264c2a69115e7578d62581ff455ed9" - integrity sha512-Ky+XkAkqPZSm3NLBeUng77EBQl3cmeJhITaGHdYH8kjVB+aun3S4XBRti2zt17mtt0mIUDiNxYeoJm6drVvBJQ== - dependencies: - type-detect "4.0.8" - -"@sinonjs/fake-timers@^6.0.1": - version "6.0.1" - resolved "https://registry.yarnpkg.com/@sinonjs/fake-timers/-/fake-timers-6.0.1.tgz#293674fccb3262ac782c7aadfdeca86b10c75c40" - integrity sha512-MZPUxrmFubI36XS1DI3qmI0YdN1gks62JtFZvxR67ljjSNCeK6U08Zx4msEWOXuofgqUt6zPHSi1H9fbjR/NRA== - dependencies: - "@sinonjs/commons" "^1.7.0" - -"@sinonjs/formatio@^3.2.1": - version "3.2.2" - resolved "https://registry.yarnpkg.com/@sinonjs/formatio/-/formatio-3.2.2.tgz#771c60dfa75ea7f2d68e3b94c7e888a78781372c" - integrity sha512-B8SEsgd8gArBLMD6zpRw3juQ2FVSsmdd7qlevyDqzS9WTCtvF55/gAL+h6gue8ZvPYcdiPdvueM/qm//9XzyTQ== - dependencies: - "@sinonjs/commons" "^1" - "@sinonjs/samsam" "^3.1.0" - -"@sinonjs/samsam@^3.1.0", "@sinonjs/samsam@^3.3.3": - version "3.3.3" - resolved "https://registry.yarnpkg.com/@sinonjs/samsam/-/samsam-3.3.3.tgz#46682efd9967b259b81136b9f120fd54585feb4a" - integrity sha512-bKCMKZvWIjYD0BLGnNrxVuw4dkWCYsLqFOUWw8VgKF/+5Y+mE7LfHWPIYoDXowH+3a9LsWDMo0uAP8YDosPvHQ== - dependencies: - "@sinonjs/commons" "^1.3.0" - array-from "^2.1.1" - lodash "^4.17.15" - -"@sinonjs/text-encoding@^0.7.1": - version "0.7.1" - resolved "https://registry.yarnpkg.com/@sinonjs/text-encoding/-/text-encoding-0.7.1.tgz#8da5c6530915653f3a1f38fd5f101d8c3f8079c5" - integrity sha512-+iTbntw2IZPb/anVDbypzfQa+ay64MW0Zo8aJ8gZPWMMK6/OubMVb6lUPMagqjOPnmtauXnFCACVl3O7ogjeqQ== - -"@tootallnate/once@1": - version "1.1.2" - resolved "https://registry.yarnpkg.com/@tootallnate/once/-/once-1.1.2.tgz#ccb91445360179a04e7fe6aff78c00ffc1eeaf82" - integrity sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw== - -"@tootallnate/once@2": - version "2.0.0" - resolved "https://registry.yarnpkg.com/@tootallnate/once/-/once-2.0.0.tgz#f544a148d3ab35801c1f633a7441fd87c2e484bf" - integrity sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A== - -"@types/babel__core@^7.0.0", "@types/babel__core@^7.1.7": - version "7.20.0" - resolved "https://registry.yarnpkg.com/@types/babel__core/-/babel__core-7.20.0.tgz#61bc5a4cae505ce98e1e36c5445e4bee060d8891" - integrity sha512-+n8dL/9GWblDO0iU6eZAwEIJVr5DWigtle+Q6HLOrh/pdbXOhOtqzq8VPPE2zvNJzSKY4vH/z3iT3tn0A3ypiQ== - dependencies: - "@babel/parser" "^7.20.7" - "@babel/types" "^7.20.7" - "@types/babel__generator" "*" - "@types/babel__template" "*" - "@types/babel__traverse" "*" - -"@types/babel__generator@*": - version "7.6.4" - resolved "https://registry.yarnpkg.com/@types/babel__generator/-/babel__generator-7.6.4.tgz#1f20ce4c5b1990b37900b63f050182d28c2439b7" - integrity sha512-tFkciB9j2K755yrTALxD44McOrk+gfpIpvC3sxHjRawj6PfnQxrse4Clq5y/Rq+G3mrBurMax/lG8Qn2t9mSsg== - dependencies: - "@babel/types" "^7.0.0" - -"@types/babel__template@*": - version "7.4.1" - resolved "https://registry.yarnpkg.com/@types/babel__template/-/babel__template-7.4.1.tgz#3d1a48fd9d6c0edfd56f2ff578daed48f36c8969" - integrity sha512-azBFKemX6kMg5Io+/rdGT0dkGreboUVR0Cdm3fz9QJWpaQGJRQXl7C+6hOTCZcMll7KFyEQpgbYI2lHdsS4U7g== - dependencies: - "@babel/parser" "^7.1.0" - "@babel/types" "^7.0.0" - -"@types/babel__traverse@*", "@types/babel__traverse@^7.0.4", "@types/babel__traverse@^7.0.6": - version "7.18.3" - resolved "https://registry.yarnpkg.com/@types/babel__traverse/-/babel__traverse-7.18.3.tgz#dfc508a85781e5698d5b33443416b6268c4b3e8d" - integrity sha512-1kbcJ40lLB7MHsj39U4Sh1uTd2E7rLEa79kmDpI6cy+XiXsteB3POdQomoq4FxszMrO3ZYchkhYJw7A2862b3w== - dependencies: - "@babel/types" "^7.3.0" - -"@types/chai@^4.1.7": - version "4.3.1" - resolved "https://registry.yarnpkg.com/@types/chai/-/chai-4.3.1.tgz#e2c6e73e0bdeb2521d00756d099218e9f5d90a04" - integrity sha512-/zPMqDkzSZ8t3VtxOa4KPq7uzzW978M9Tvh+j7GHKuo6k6GTLxPJ4J5gE5cjfJ26pnXst0N5Hax8Sr0T2Mi9zQ== - -"@types/codemirror@^5.6.20": - version "5.60.5" - resolved "https://registry.yarnpkg.com/@types/codemirror/-/codemirror-5.60.5.tgz#5b989a3b4bbe657458cf372c92b6bfda6061a2b7" - integrity sha512-TiECZmm8St5YxjFUp64LK0c8WU5bxMDt9YaAek1UqUb9swrSCoJhh92fWu1p3mTEqlHjhB5sY7OFBhWroJXZVg== - dependencies: - "@types/tern" "*" - -"@types/dom4@^2.0.1": - version "2.0.2" - resolved "https://registry.yarnpkg.com/@types/dom4/-/dom4-2.0.2.tgz#6495303f049689ce936ed328a3e5ede9c51408ee" - integrity sha512-Rt4IC1T7xkCWa0OG1oSsPa0iqnxlDeQqKXZAHrQGLb7wFGncWm85MaxKUjAGejOrUynOgWlFi4c6S6IyJwoK4g== - -"@types/eslint-scope@^3.7.3": - version "3.7.4" - resolved "https://registry.yarnpkg.com/@types/eslint-scope/-/eslint-scope-3.7.4.tgz#37fc1223f0786c39627068a12e94d6e6fc61de16" - integrity sha512-9K4zoImiZc3HlIp6AVUDE4CWYx22a+lhSZMYNpbjW04+YF0KWj4pJXnEMjdnFTiQibFFmElcsasJXDbdI/EPhA== - dependencies: - "@types/eslint" "*" - "@types/estree" "*" - -"@types/eslint@*": - version "8.21.1" - resolved "https://registry.yarnpkg.com/@types/eslint/-/eslint-8.21.1.tgz#110b441a210d53ab47795124dbc3e9bb993d1e7c" - integrity sha512-rc9K8ZpVjNcLs8Fp0dkozd5Pt2Apk1glO4Vgz8ix1u6yFByxfqo5Yavpy65o+93TAe24jr7v+eSBtFLvOQtCRQ== - dependencies: - "@types/estree" "*" - "@types/json-schema" "*" - -"@types/estree@*", "@types/estree@^0.0.51": - version "0.0.51" - resolved "https://registry.yarnpkg.com/@types/estree/-/estree-0.0.51.tgz#cfd70924a25a3fd32b218e5e420e6897e1ac4f40" - integrity sha512-CuPgU6f3eT/XgKKPqKd/gLZV1Xmvf1a2R5POBOGQa6uv82xpls89HU5zKeVoyR8XzHd1RGNOlQlvUe3CFkjWNQ== - -"@types/events@^3.0.0": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@types/events/-/events-3.0.0.tgz#2862f3f58a9a7f7c3e78d79f130dd4d71c25c2a7" - integrity sha512-EaObqwIvayI5a8dCzhFrjKzVwKLxjoG9T6Ppd5CEo07LRKfQ8Yokw54r5+Wq7FaBQ+yXRvQAYPrHwya1/UFt9g== - -"@types/graceful-fs@^4.1.2": - version "4.1.6" - resolved "https://registry.yarnpkg.com/@types/graceful-fs/-/graceful-fs-4.1.6.tgz#e14b2576a1c25026b7f02ede1de3b84c3a1efeae" - integrity sha512-Sig0SNORX9fdW+bQuTEovKj3uHcUL6LQKbCrrqb1X7J6/ReAbhCXRAhc+SMejhLELFj2QcyuxmUooZ4bt5ReSw== - dependencies: - "@types/node" "*" - -"@types/is-glob@^4.0.1": - version "4.0.1" - resolved "https://registry.yarnpkg.com/@types/is-glob/-/is-glob-4.0.1.tgz#a93eec1714172c8eb3225a1cc5eb88c2477b7d00" - integrity sha512-k3RS5HyBPu4h+5hTmIEfPB2rl5P3LnGdQEZrV2b9OWTJVtsUQ2VBcedqYKGqxvZqle5UALUXdSfVA8nf3HfyWQ== - -"@types/istanbul-lib-coverage@*", "@types/istanbul-lib-coverage@^2.0.0", "@types/istanbul-lib-coverage@^2.0.1": - version "2.0.4" - resolved "https://registry.yarnpkg.com/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.4.tgz#8467d4b3c087805d63580480890791277ce35c44" - integrity sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g== - -"@types/istanbul-lib-report@*": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz#c14c24f18ea8190c118ee7562b7ff99a36552686" - integrity sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg== - dependencies: - "@types/istanbul-lib-coverage" "*" - -"@types/istanbul-reports@^1.1.1": - version "1.1.2" - resolved "https://registry.yarnpkg.com/@types/istanbul-reports/-/istanbul-reports-1.1.2.tgz#e875cc689e47bce549ec81f3df5e6f6f11cfaeb2" - integrity sha512-P/W9yOX/3oPZSpaYOCQzGqgCQRXn0FFO/V8bWrCQs+wLmvVVxk6CRBXALEvNs9OHIatlnlFokfhuDo2ug01ciw== - dependencies: - "@types/istanbul-lib-coverage" "*" - "@types/istanbul-lib-report" "*" - -"@types/istanbul-reports@^3.0.0": - version "3.0.1" - resolved "https://registry.yarnpkg.com/@types/istanbul-reports/-/istanbul-reports-3.0.1.tgz#9153fe98bba2bd565a63add9436d6f0d7f8468ff" - integrity sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw== - dependencies: - "@types/istanbul-lib-report" "*" - -"@types/jest@^23.3.11": - version "23.3.14" - resolved "https://registry.yarnpkg.com/@types/jest/-/jest-23.3.14.tgz#37daaf78069e7948520474c87b80092ea912520a" - integrity sha512-Q5hTcfdudEL2yOmluA1zaSyPbzWPmJ3XfSWeP3RyoYvS9hnje1ZyagrZOuQ6+1nQC1Gw+7gap3pLNL3xL6UBug== - -"@types/json-schema@*", "@types/json-schema@^7.0.3", "@types/json-schema@^7.0.5", "@types/json-schema@^7.0.7", "@types/json-schema@^7.0.8", "@types/json-schema@^7.0.9": - version "7.0.11" - resolved "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.11.tgz#d421b6c527a3037f7c84433fd2c4229e016863d3" - integrity sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ== - -"@types/json5@^0.0.29": - version "0.0.29" - resolved "https://registry.yarnpkg.com/@types/json5/-/json5-0.0.29.tgz#ee28707ae94e11d2b827bcbe5270bcea7f3e71ee" - integrity sha1-7ihweulOEdK4J7y+UnC86n8+ce4= - -"@types/lodash.mergewith@^4.6.1": - version "4.6.7" - resolved "https://registry.yarnpkg.com/@types/lodash.mergewith/-/lodash.mergewith-4.6.7.tgz#eaa65aa5872abdd282f271eae447b115b2757212" - integrity sha512-3m+lkO5CLRRYU0fhGRp7zbsGi6+BZj0uTVSwvcKU+nSlhjA9/QRNfuSGnD2mX6hQA7ZbmcCkzk5h4ZYGOtk14A== - dependencies: - "@types/lodash" "*" - -"@types/lodash@*": - version "4.14.182" - resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.14.182.tgz#05301a4d5e62963227eaafe0ce04dd77c54ea5c2" - integrity sha512-/THyiqyQAP9AfARo4pF+aCGcyiQ94tX/Is2I7HofNRqoYLgN1PBoOWu2/zTA5zMxzP5EFutMtWtGAFRKUe961Q== - -"@types/minimatch@^3.0.3": - version "3.0.5" - resolved "https://registry.yarnpkg.com/@types/minimatch/-/minimatch-3.0.5.tgz#1001cc5e6a3704b83c236027e77f2f58ea010f40" - integrity sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ== - -"@types/minimist@^1.2.0": - version "1.2.0" - resolved "https://registry.yarnpkg.com/@types/minimist/-/minimist-1.2.0.tgz#69a23a3ad29caf0097f06eda59b361ee2f0639f6" - integrity sha1-aaI6OtKcrwCX8G7aWbNh7i8GOfY= - -"@types/mkdirp@^0.5.2": - version "0.5.2" - resolved "https://registry.yarnpkg.com/@types/mkdirp/-/mkdirp-0.5.2.tgz#503aacfe5cc2703d5484326b1b27efa67a339c1f" - integrity sha512-U5icWpv7YnZYGsN4/cmh3WD2onMY0aJIiTE6+51TwJCttdHvtCYmkBNOobHlXwrJRL0nkH9jH4kD+1FAdMN4Tg== - dependencies: - "@types/node" "*" - -"@types/mocha@^5.2.7": - version "5.2.7" - resolved "https://registry.yarnpkg.com/@types/mocha/-/mocha-5.2.7.tgz#315d570ccb56c53452ff8638738df60726d5b6ea" - integrity sha512-NYrtPht0wGzhwe9+/idPaBB+TqkY9AhTvOLMkThm0IoEfLaiVQZwBwyJ5puCkO3AUCWrmcoePjp2mbFocKy4SQ== - -"@types/node@*": - version "20.2.1" - resolved "https://registry.yarnpkg.com/@types/node/-/node-20.2.1.tgz#de559d4b33be9a808fd43372ccee822c70f39704" - integrity sha512-DqJociPbZP1lbZ5SQPk4oag6W7AyaGMO6gSfRwq3PWl4PXTwJpRQJhDq4W0kzrg3w6tJ1SwlvGZ5uKFHY13LIg== - -"@types/node@^12.0.7": - version "12.20.55" - resolved "https://registry.yarnpkg.com/@types/node/-/node-12.20.55.tgz#c329cbd434c42164f846b909bd6f85b5537f6240" - integrity sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ== - -"@types/normalize-package-data@^2.4.0": - version "2.4.1" - resolved "https://registry.yarnpkg.com/@types/normalize-package-data/-/normalize-package-data-2.4.1.tgz#d3357479a0fdfdd5907fe67e17e0a85c906e1301" - integrity sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw== - -"@types/parse-json@^4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@types/parse-json/-/parse-json-4.0.0.tgz#2f8bb441434d163b35fb8ffdccd7138927ffb8c0" - integrity sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA== - -"@types/pg@^7.4.10": - version "7.14.11" - resolved "https://registry.yarnpkg.com/@types/pg/-/pg-7.14.11.tgz#daf5555504a1f7af4263df265d91f140fece52e3" - integrity sha512-EnZkZ1OMw9DvNfQkn2MTJrwKmhJYDEs5ujWrPfvseWNoI95N8B4HzU/Ltrq5ZfYxDX/Zg8mTzwr6UAyTjjFvXA== - dependencies: - "@types/node" "*" - pg-protocol "^1.2.0" - pg-types "^2.2.0" - -"@types/prettier@^1.16.1": - version "1.19.1" - resolved "https://registry.yarnpkg.com/@types/prettier/-/prettier-1.19.1.tgz#33509849f8e679e4add158959fdb086440e9553f" - integrity sha512-5qOlnZscTn4xxM5MeGXAMOsIOIKIbh9e85zJWfBRVPlRMEVawzoPhINYbRGkBZCI8LxvBe7tJCdWiarA99OZfQ== - -"@types/prettier@^2.0.0": - version "2.7.2" - resolved "https://registry.yarnpkg.com/@types/prettier/-/prettier-2.7.2.tgz#6c2324641cc4ba050a8c710b2b251b377581fbf0" - integrity sha512-KufADq8uQqo1pYKVIYzfKbJfBAc0sOeXqGbFaSpv8MRmC/zXgowNZmFcbngndGk922QDmOASEXUZCaY48gs4cg== - -"@types/prop-types@*": - version "15.7.5" - resolved "https://registry.yarnpkg.com/@types/prop-types/-/prop-types-15.7.5.tgz#5f19d2b85a98e9558036f6a3cacc8819420f05cf" - integrity sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w== - -"@types/react@^17.0.0": - version "17.0.53" - resolved "https://registry.yarnpkg.com/@types/react/-/react-17.0.53.tgz#10d4d5999b8af3d6bc6a9369d7eb953da82442ab" - integrity sha512-1yIpQR2zdYu1Z/dc1OxC+MA6GR240u3gcnP4l6mvj/PJiVaqHsQPmWttsvHsfnhfPbU2FuGmo0wSITPygjBmsw== - dependencies: - "@types/prop-types" "*" - "@types/scheduler" "*" - csstype "^3.0.2" - -"@types/scheduler@*": - version "0.16.2" - resolved "https://registry.yarnpkg.com/@types/scheduler/-/scheduler-0.16.2.tgz#1a62f89525723dde24ba1b01b092bf5df8ad4d39" - integrity sha512-hppQEBDmlwhFAXKJX2KnWLYu5yMfi91yazPb2l+lbJiwW+wdo1gNeRA+3RgNSO39WYX2euey41KEwnqesU2Jew== - -"@types/semver@^7.3.12": - version "7.3.13" - resolved "https://registry.npmjs.org/@types/semver/-/semver-7.3.13.tgz#da4bfd73f49bd541d28920ab0e2bf0ee80f71c91" - integrity sha512-21cFJr9z3g5dW8B0CVI9g2O9beqaThGQ6ZFBqHfwhzLDKUxaqTIy3vnfah/UPkfOiF2pLq+tGz+W8RyCskuslw== - -"@types/sinon@^7.0.12": - version "7.5.2" - resolved "https://registry.yarnpkg.com/@types/sinon/-/sinon-7.5.2.tgz#5e2f1d120f07b9cda07e5dedd4f3bf8888fccdb9" - integrity sha512-T+m89VdXj/eidZyejvmoP9jivXgBDdkOSBVQjU9kF349NEx10QdPNGxHeZUaj1IlJ32/ewdyXJjnJxyxJroYwg== - -"@types/source-list-map@*": - version "0.1.2" - resolved "https://registry.yarnpkg.com/@types/source-list-map/-/source-list-map-0.1.2.tgz#0078836063ffaf17412349bba364087e0ac02ec9" - integrity sha512-K5K+yml8LTo9bWJI/rECfIPrGgxdpeNbj+d53lwN4QjW1MCwlkhUms+gtdzigTeUyBr09+u8BwOIY3MXvHdcsA== - -"@types/stack-utils@^2.0.0": - version "2.0.1" - resolved "https://registry.yarnpkg.com/@types/stack-utils/-/stack-utils-2.0.1.tgz#20f18294f797f2209b5f65c8e3b5c8e8261d127c" - integrity sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw== - -"@types/tern@*": - version "0.23.4" - resolved "https://registry.yarnpkg.com/@types/tern/-/tern-0.23.4.tgz#03926eb13dbeaf3ae0d390caf706b2643a0127fb" - integrity sha512-JAUw1iXGO1qaWwEOzxTKJZ/5JxVeON9kvGZ/osgZaJImBnyjyn0cjovPsf6FNLmyGY8Vw9DoXZCMlfMkMwHRWg== - dependencies: - "@types/estree" "*" - -"@types/unist@*", "@types/unist@^2.0.0", "@types/unist@^2.0.2": - version "2.0.3" - resolved "https://registry.yarnpkg.com/@types/unist/-/unist-2.0.3.tgz#9c088679876f374eb5983f150d4787aa6fb32d7e" - integrity sha512-FvUupuM3rlRsRtCN+fDudtmytGO6iHJuuRKS1Ss0pG5z8oX0diNEw94UEL7hgDbpN94rgaK5R7sWm6RrSkZuAQ== - -"@types/vfile-message@*": - version "2.0.0" - resolved "https://registry.yarnpkg.com/@types/vfile-message/-/vfile-message-2.0.0.tgz#690e46af0fdfc1f9faae00cd049cc888957927d5" - integrity sha512-GpTIuDpb9u4zIO165fUy9+fXcULdD8HFRNli04GehoMVbeNq7D6OBnqSmg3lxZnC+UvgUhEWKxdKiwYUkGltIw== - dependencies: - vfile-message "*" - -"@types/vfile@^3.0.0": - version "3.0.2" - resolved "https://registry.yarnpkg.com/@types/vfile/-/vfile-3.0.2.tgz#19c18cd232df11ce6fa6ad80259bc86c366b09b9" - integrity sha512-b3nLFGaGkJ9rzOcuXRfHkZMdjsawuDD0ENL9fzTophtBg8FJHSGbH7daXkEpcwy3v7Xol3pAvsmlYyFhR4pqJw== - dependencies: - "@types/node" "*" - "@types/unist" "*" - "@types/vfile-message" "*" - -"@types/webpack-sources@^0.1.5": - version "0.1.9" - resolved "https://registry.yarnpkg.com/@types/webpack-sources/-/webpack-sources-0.1.9.tgz#da69b06eb34f6432e6658acb5a6893c55d983920" - integrity sha512-bvzMnzqoK16PQIC8AYHNdW45eREJQMd6WG/msQWX5V2+vZmODCOPb4TJcbgRljTZZTwTM4wUMcsI8FftNA7new== - dependencies: - "@types/node" "*" - "@types/source-list-map" "*" - source-map "^0.6.1" - -"@types/yargs-parser@*": - version "21.0.0" - resolved "https://registry.yarnpkg.com/@types/yargs-parser/-/yargs-parser-21.0.0.tgz#0c60e537fa790f5f9472ed2776c2b71ec117351b" - integrity sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA== - -"@types/yargs@^13.0.0": - version "13.0.11" - resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-13.0.11.tgz#def2f0c93e4bdf2c61d7e34899b17e34be28d3b1" - integrity sha512-NRqD6T4gktUrDi1o1wLH3EKC1o2caCr7/wR87ODcbVITQF106OM3sFN92ysZ++wqelOd1CTzatnOBRDYYG6wGQ== - dependencies: - "@types/yargs-parser" "*" - -"@types/yargs@^15.0.0": - version "15.0.15" - resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-15.0.15.tgz#e609a2b1ef9e05d90489c2f5f45bbfb2be092158" - integrity sha512-IziEYMU9XoVj8hWg7k+UJrXALkGFjWJhn5QFEv9q4p+v40oZhSuC135M38st8XPjICL7Ey4TV64ferBGUoJhBg== - dependencies: - "@types/yargs-parser" "*" - -"@types/yargs@^17.0.8": - version "17.0.10" - resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-17.0.10.tgz#591522fce85d8739bca7b8bb90d048e4478d186a" - integrity sha512-gmEaFwpj/7f/ROdtIlci1R1VYU1J4j95m8T+Tj3iBgiBFKg1foE/PSl93bBd5T9LDXNPo8UlNN6W0qwD8O5OaA== - dependencies: - "@types/yargs-parser" "*" - -"@typescript-eslint/eslint-plugin@^5.46.0": - version "5.46.0" - resolved "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.46.0.tgz#9a96a713b9616c783501a3c1774c9e2b40217ad0" - integrity sha512-QrZqaIOzJAjv0sfjY4EjbXUi3ZOFpKfzntx22gPGr9pmFcTjcFw/1sS1LJhEubfAGwuLjNrPV0rH+D1/XZFy7Q== - dependencies: - "@typescript-eslint/scope-manager" "5.46.0" - "@typescript-eslint/type-utils" "5.46.0" - "@typescript-eslint/utils" "5.46.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@^5.46.0": - version "5.46.0" - resolved "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.46.0.tgz#002d8e67122947922a62547acfed3347cbf2c0b6" - integrity sha512-joNO6zMGUZg+C73vwrKXCd8usnsmOYmgW/w5ZW0pG0RGvqeznjtGDk61EqqTpNrFLUYBW2RSBFrxdAZMqA4OZA== - dependencies: - "@typescript-eslint/scope-manager" "5.46.0" - "@typescript-eslint/types" "5.46.0" - "@typescript-eslint/typescript-estree" "5.46.0" - debug "^4.3.4" - -"@typescript-eslint/scope-manager@5.46.0": - version "5.46.0" - resolved "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.46.0.tgz#60790b14d0c687dd633b22b8121374764f76ce0d" - integrity sha512-7wWBq9d/GbPiIM6SqPK9tfynNxVbfpihoY5cSFMer19OYUA3l4powA2uv0AV2eAZV6KoAh6lkzxv4PoxOLh1oA== - dependencies: - "@typescript-eslint/types" "5.46.0" - "@typescript-eslint/visitor-keys" "5.46.0" - -"@typescript-eslint/type-utils@5.46.0": - version "5.46.0" - resolved "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.46.0.tgz#3a4507b3b437e2fd9e95c3e5eea5ae16f79d64b3" - integrity sha512-dwv4nimVIAsVS2dTA0MekkWaRnoYNXY26dKz8AN5W3cBFYwYGFQEqm/cG+TOoooKlncJS4RTbFKgcFY/pOiBCg== - dependencies: - "@typescript-eslint/typescript-estree" "5.46.0" - "@typescript-eslint/utils" "5.46.0" - debug "^4.3.4" - tsutils "^3.21.0" - -"@typescript-eslint/types@5.46.0": - version "5.46.0" - resolved "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.46.0.tgz#f4d76622a996b88153bbd829ea9ccb9f7a5d28bc" - integrity sha512-wHWgQHFB+qh6bu0IAPAJCdeCdI0wwzZnnWThlmHNY01XJ9Z97oKqKOzWYpR2I83QmshhQJl6LDM9TqMiMwJBTw== - -"@typescript-eslint/typescript-estree@5.46.0": - version "5.46.0" - resolved "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.46.0.tgz#a6c2b84b9351f78209a1d1f2d99ca553f7fa29a5" - integrity sha512-kDLNn/tQP+Yp8Ro2dUpyyVV0Ksn2rmpPpB0/3MO874RNmXtypMwSeazjEN/Q6CTp8D7ExXAAekPEcCEB/vtJkw== - dependencies: - "@typescript-eslint/types" "5.46.0" - "@typescript-eslint/visitor-keys" "5.46.0" - debug "^4.3.4" - globby "^11.1.0" - is-glob "^4.0.3" - semver "^7.3.7" - tsutils "^3.21.0" - -"@typescript-eslint/utils@5.46.0", "@typescript-eslint/utils@^5.10.0": - version "5.46.0" - resolved "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.46.0.tgz#600cd873ba471b7d8b0b9f35de34cf852c6fcb31" - integrity sha512-4O+Ps1CRDw+D+R40JYh5GlKLQERXRKW5yIQoNDpmXPJ+C7kaPF9R7GWl+PxGgXjB3PQCqsaaZUpZ9dG4U6DO7g== - dependencies: - "@types/json-schema" "^7.0.9" - "@types/semver" "^7.3.12" - "@typescript-eslint/scope-manager" "5.46.0" - "@typescript-eslint/types" "5.46.0" - "@typescript-eslint/typescript-estree" "5.46.0" - eslint-scope "^5.1.1" - eslint-utils "^3.0.0" - semver "^7.3.7" - -"@typescript-eslint/visitor-keys@5.46.0": - version "5.46.0" - resolved "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.46.0.tgz#36d87248ae20c61ef72404bcd61f14aa2563915f" - integrity sha512-E13gBoIXmaNhwjipuvQg1ByqSAu/GbEpP/qzFihugJ+MomtoJtFAJG/+2DRPByf57B863m0/q7Zt16V9ohhANw== - dependencies: - "@typescript-eslint/types" "5.46.0" - eslint-visitor-keys "^3.3.0" - -"@webassemblyjs/ast@1.11.1": - version "1.11.1" - resolved "https://registry.yarnpkg.com/@webassemblyjs/ast/-/ast-1.11.1.tgz#2bfd767eae1a6996f432ff7e8d7fc75679c0b6a7" - integrity sha512-ukBh14qFLjxTQNTXocdyksN5QdM28S1CxHt2rdskFyL+xFV7VremuBLVbmCePj+URalXBENx/9Lm7lnhihtCSw== - dependencies: - "@webassemblyjs/helper-numbers" "1.11.1" - "@webassemblyjs/helper-wasm-bytecode" "1.11.1" - -"@webassemblyjs/floating-point-hex-parser@1.11.1": - version "1.11.1" - resolved "https://registry.yarnpkg.com/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.1.tgz#f6c61a705f0fd7a6aecaa4e8198f23d9dc179e4f" - integrity sha512-iGRfyc5Bq+NnNuX8b5hwBrRjzf0ocrJPI6GWFodBFzmFnyvrQ83SHKhmilCU/8Jv67i4GJZBMhEzltxzcNagtQ== - -"@webassemblyjs/helper-api-error@1.11.1": - version "1.11.1" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.1.tgz#1a63192d8788e5c012800ba6a7a46c705288fd16" - integrity sha512-RlhS8CBCXfRUR/cwo2ho9bkheSXG0+NwooXcc3PAILALf2QLdFyj7KGsKRbVc95hZnhnERon4kW/D3SZpp6Tcg== - -"@webassemblyjs/helper-buffer@1.11.1": - version "1.11.1" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.1.tgz#832a900eb444884cde9a7cad467f81500f5e5ab5" - integrity sha512-gwikF65aDNeeXa8JxXa2BAk+REjSyhrNC9ZwdT0f8jc4dQQeDQ7G4m0f2QCLPJiMTTO6wfDmRmj/pW0PsUvIcA== - -"@webassemblyjs/helper-numbers@1.11.1": - version "1.11.1" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.1.tgz#64d81da219fbbba1e3bd1bfc74f6e8c4e10a62ae" - integrity sha512-vDkbxiB8zfnPdNK9Rajcey5C0w+QJugEglN0of+kmO8l7lDb77AnlKYQF7aarZuCrv+l0UvqL+68gSDr3k9LPQ== - dependencies: - "@webassemblyjs/floating-point-hex-parser" "1.11.1" - "@webassemblyjs/helper-api-error" "1.11.1" - "@xtuc/long" "4.2.2" - -"@webassemblyjs/helper-wasm-bytecode@1.11.1": - version "1.11.1" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.1.tgz#f328241e41e7b199d0b20c18e88429c4433295e1" - integrity sha512-PvpoOGiJwXeTrSf/qfudJhwlvDQxFgelbMqtq52WWiXC6Xgg1IREdngmPN3bs4RoO83PnL/nFrxucXj1+BX62Q== - -"@webassemblyjs/helper-wasm-section@1.11.1": - version "1.11.1" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.1.tgz#21ee065a7b635f319e738f0dd73bfbda281c097a" - integrity sha512-10P9No29rYX1j7F3EVPX3JvGPQPae+AomuSTPiF9eBQeChHI6iqjMIwR9JmOJXwpnn/oVGDk7I5IlskuMwU/pg== - dependencies: - "@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@1.11.1": - version "1.11.1" - resolved "https://registry.yarnpkg.com/@webassemblyjs/ieee754/-/ieee754-1.11.1.tgz#963929e9bbd05709e7e12243a099180812992614" - integrity sha512-hJ87QIPtAMKbFq6CGTkZYJivEwZDbQUgYd3qKSadTNOhVY7p+gfP6Sr0lLRVTaG1JjFj+r3YchoqRYxNH3M0GQ== - dependencies: - "@xtuc/ieee754" "^1.2.0" - -"@webassemblyjs/leb128@1.11.1": - version "1.11.1" - resolved "https://registry.yarnpkg.com/@webassemblyjs/leb128/-/leb128-1.11.1.tgz#ce814b45574e93d76bae1fb2644ab9cdd9527aa5" - integrity sha512-BJ2P0hNZ0u+Th1YZXJpzW6miwqQUGcIHT1G/sf72gLVD9DZ5AdYTqPNbHZh6K1M5VmKvFXwGSWZADz+qBWxeRw== - dependencies: - "@xtuc/long" "4.2.2" - -"@webassemblyjs/utf8@1.11.1": - version "1.11.1" - resolved "https://registry.yarnpkg.com/@webassemblyjs/utf8/-/utf8-1.11.1.tgz#d1f8b764369e7c6e6bae350e854dec9a59f0a3ff" - integrity sha512-9kqcxAEdMhiwQkHpkNiorZzqpGrodQQ2IGrHHxCy+Ozng0ofyMA0lTqiLkVs1uzTRejX+/O0EOT7KxqVPuXosQ== - -"@webassemblyjs/wasm-edit@1.11.1": - version "1.11.1" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.1.tgz#ad206ebf4bf95a058ce9880a8c092c5dec8193d6" - integrity sha512-g+RsupUC1aTHfR8CDgnsVRVZFJqdkFHpsHMfJuWQzWU3tvnLC07UqHICfP+4XyL2tnr1amvl1Sdp06TnYCmVkA== - dependencies: - "@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@1.11.1": - version "1.11.1" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.1.tgz#86c5ea304849759b7d88c47a32f4f039ae3c8f76" - integrity sha512-F7QqKXwwNlMmsulj6+O7r4mmtAlCWfO/0HdgOxSklZfQcDu0TpLiD1mRt/zF25Bk59FIjEuGAIyn5ei4yMfLhA== - dependencies: - "@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@1.11.1": - version "1.11.1" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.1.tgz#657b4c2202f4cf3b345f8a4c6461c8c2418985f2" - integrity sha512-VqnkNqnZlU5EB64pp1l7hdm3hmQw7Vgqa0KF/KCNO9sIpI6Fk6brDEiX+iCOYrvMuBWDws0NkTOxYEb85XQHHw== - dependencies: - "@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@1.11.1": - version "1.11.1" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.1.tgz#86ca734534f417e9bd3c67c7a1c75d8be41fb199" - integrity sha512-rrBujw+dJu32gYB7/Lup6UhdkPx9S9SnobZzRVL7VcBH9Bt9bCBLEuX/YXOOtBsOZ4NQrRykKhffRWHvigQvOA== - dependencies: - "@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@1.11.1": - version "1.11.1" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-printer/-/wast-printer-1.11.1.tgz#d0c73beda8eec5426f10ae8ef55cee5e7084c2f0" - integrity sha512-IQboUWM4eKzWW+N/jij2sRatKMh99QEelo3Eb2q0qXkvPRISAj8Qxtmw5itwqK+TTkBuUIE45AxYPToqPtL5gg== - dependencies: - "@webassemblyjs/ast" "1.11.1" - "@xtuc/long" "4.2.2" - -"@webpack-cli/configtest@^1.2.0": - version "1.2.0" - resolved "https://registry.yarnpkg.com/@webpack-cli/configtest/-/configtest-1.2.0.tgz#7b20ce1c12533912c3b217ea68262365fa29a6f5" - integrity sha512-4FB8Tj6xyVkyqjj1OaTqCjXYULB9FMkqQ8yGrZjRDrYh0nOE+7Lhs45WioWQQMV+ceFlE368Ukhe6xdvJM9Egg== - -"@webpack-cli/info@^1.5.0": - version "1.5.0" - resolved "https://registry.yarnpkg.com/@webpack-cli/info/-/info-1.5.0.tgz#6c78c13c5874852d6e2dd17f08a41f3fe4c261b1" - integrity sha512-e8tSXZpw2hPl2uMJY6fsMswaok5FdlGNRTktvFk2sD8RjH0hE2+XistawJx1vmKteh4NmGmNUrp+Tb2w+udPcQ== - dependencies: - envinfo "^7.7.3" - -"@webpack-cli/serve@^1.7.0": - version "1.7.0" - resolved "https://registry.yarnpkg.com/@webpack-cli/serve/-/serve-1.7.0.tgz#e1993689ac42d2b16e9194376cfb6753f6254db1" - integrity sha512-oxnCNGj88fL+xzV+dacXs44HcDwf1ovs3AuEzvP7mqXw7fQntqIhQ1BRmynh4qEKQSSSRSWVyXRjmTbZIX9V2Q== - -"@xtuc/ieee754@^1.2.0": - version "1.2.0" - resolved "https://registry.yarnpkg.com/@xtuc/ieee754/-/ieee754-1.2.0.tgz#eef014a3145ae477a1cbc00cd1e552336dceb790" - integrity sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA== - -"@xtuc/long@4.2.2": - version "4.2.2" - resolved "https://registry.yarnpkg.com/@xtuc/long/-/long-4.2.2.tgz#d291c6a4e97989b5c61d9acf396ae4fe133a718d" - integrity sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ== - -"@yarnpkg/lockfile@^1.1.0": - version "1.1.0" - resolved "https://registry.yarnpkg.com/@yarnpkg/lockfile/-/lockfile-1.1.0.tgz#e77a97fbd345b76d83245edcd17d393b1b41fb31" - integrity sha512-GpSwvyXOcOOlV70vbnzjj4fW5xW/FdUF6nQEt1ENy7m4ZCczi1+/buVUPAqmGfqznsORNFzUMjctTIp8a9tuCQ== - -"@yarnpkg/parsers@^3.0.0-rc.18": - version "3.0.0-rc.32" - resolved "https://registry.npmjs.org/@yarnpkg/parsers/-/parsers-3.0.0-rc.32.tgz#0aef0bd1b9e9954173c01a7cbd35f98765e39e7d" - integrity sha512-Sz2g88b3iAu2jpMnhtps2bRX2GAAOvanOxGcVi+o7ybGjLetxK23o2cHskXKypvXxtZTsJegel5pUWSPpYphww== - dependencies: - js-yaml "^3.10.0" - tslib "^2.4.0" - -"@zkochan/js-yaml@0.0.6": - version "0.0.6" - resolved "https://registry.npmjs.org/@zkochan/js-yaml/-/js-yaml-0.0.6.tgz#975f0b306e705e28b8068a07737fa46d3fc04826" - integrity sha512-nzvgl3VfhcELQ8LyVrYOru+UtAy1nrygk2+AGbTm8a5YcO6o8lSjAT+pfg3vJWxIoZKOUhrK6UU7xW/+00kQrg== - dependencies: - argparse "^2.0.1" - -JSONStream@^1.0.4: - version "1.3.5" - resolved "https://registry.yarnpkg.com/JSONStream/-/JSONStream-1.3.5.tgz#3208c1f08d3a4d99261ab64f92302bc15e111ca0" - integrity sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ== - dependencies: - jsonparse "^1.2.0" - through ">=2.2.7 <3" - -abab@^2.0.3, abab@^2.0.5, abab@^2.0.6: - version "2.0.6" - resolved "https://registry.npmjs.org/abab/-/abab-2.0.6.tgz#41b80f2c871d19686216b82309231cfd3cb3d291" - integrity sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA== - -abbrev@1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8" - integrity sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q== - -abort-controller@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/abort-controller/-/abort-controller-3.0.0.tgz#eaf54d53b62bae4138e809ca225c8439a6efb392" - integrity sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg== - dependencies: - event-target-shim "^5.0.0" - -abstract-leveldown@^6.2.1, abstract-leveldown@~6.2.1, abstract-leveldown@~6.2.3: - version "6.2.3" - resolved "https://registry.yarnpkg.com/abstract-leveldown/-/abstract-leveldown-6.2.3.tgz#036543d87e3710f2528e47040bc3261b77a9a8eb" - integrity sha512-BsLm5vFMRUrrLeCcRc+G0t2qOaTzpoJQLOubq2XM72eNpjF5UdU5o/5NvlNhx95XHcAvcl8OMXr4mlg/fRgUXQ== - dependencies: - buffer "^5.5.0" - immediate "^3.2.3" - level-concat-iterator "~2.0.0" - level-supports "~1.0.0" - xtend "~4.0.0" - -acorn-globals@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/acorn-globals/-/acorn-globals-6.0.0.tgz#46cdd39f0f8ff08a876619b55f5ac8a6dc770b45" - integrity sha512-ZQl7LOWaF5ePqqcX4hLuv/bLXYQNfNWw2c0/yX/TsPRKamzHcTGQnlCjHT3TsmkOUVEPS3crCxiPfdzE/Trlhg== - dependencies: - acorn "^7.1.1" - acorn-walk "^7.1.1" - -acorn-import-assertions@^1.7.6: - version "1.8.0" - resolved "https://registry.yarnpkg.com/acorn-import-assertions/-/acorn-import-assertions-1.8.0.tgz#ba2b5939ce62c238db6d93d81c9b111b29b855e9" - integrity sha512-m7VZ3jwz4eK6A4Vtt8Ew1/mNbP24u0FhdyfA7fSvnJR6LMdfOYnmuIrrJAgrYfYJ10F/otaHTtrtrtmHdMNzEw== - -acorn-jsx@^5.3.2: - version "5.3.2" - resolved "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz#7ed5bb55908b3b2f1bc55c6af1653bada7f07937" - integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ== - -acorn-walk@^7.1.1: - version "7.2.0" - resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-7.2.0.tgz#0de889a601203909b0fbe07b8938dc21d2e967bc" - integrity sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA== - -acorn@^7.1.1: - version "7.4.1" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.4.1.tgz#feaed255973d2e77555b83dbc08851a6c63520fa" - integrity sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A== - -acorn@^8.2.4, acorn@^8.5.0, acorn@^8.7.1, acorn@^8.8.0: - version "8.8.2" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.8.2.tgz#1b2f25db02af965399b9776b0c2c391276d37c4a" - integrity sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw== - -add-stream@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/add-stream/-/add-stream-1.0.0.tgz#6a7990437ca736d5e1288db92bd3266d5f5cb2aa" - integrity sha1-anmQQ3ynNtXhKI25K9MmbV9csqo= - -agent-base@4, agent-base@^4.3.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-4.3.0.tgz#8165f01c436009bccad0b1d122f05ed770efc6ee" - integrity sha512-salcGninV0nPrwpGNn4VTXBb1SOuXQBiqbrNXoeizJsHrsL6ERFM2Ne3JUSBWRE6aeNJI2ROP/WEEIDUiDe3cg== - dependencies: - es6-promisify "^5.0.0" - -agent-base@6, agent-base@^6.0.2: - version "6.0.2" - resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-6.0.2.tgz#49fff58577cfee3f37176feab4c22e00f86d7f77" - integrity sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ== - dependencies: - debug "4" - -agentkeepalive@^4.1.3, agentkeepalive@^4.2.1: - version "4.2.1" - resolved "https://registry.yarnpkg.com/agentkeepalive/-/agentkeepalive-4.2.1.tgz#a7975cbb9f83b367f06c90cc51ff28fe7d499717" - integrity sha512-Zn4cw2NEqd+9fiSVWMscnjyQ1a8Yfoc5oBajLeo5w+YBHgDUcEBY2hS4YpTz6iN5f/2zQiktcuM6tS8x1p9dpA== - dependencies: - debug "^4.1.0" - depd "^1.1.2" - humanize-ms "^1.2.1" - -aggregate-error@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/aggregate-error/-/aggregate-error-3.1.0.tgz#92670ff50f5359bdb7a3e0d40d0ec30c5737687a" - integrity sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA== - dependencies: - clean-stack "^2.0.0" - indent-string "^4.0.0" - -ajv-keywords@^3.5.2: - version "3.5.2" - resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-3.5.2.tgz#31f29da5ab6e00d1c2d329acf7b5929614d5014d" - integrity sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ== - -ajv@^6.10.0, ajv@^6.12.2, ajv@^6.12.3, ajv@^6.12.4, ajv@^6.12.5, ajv@^6.7.0: - 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.11.0: - version "8.11.0" - resolved "https://registry.yarnpkg.com/ajv/-/ajv-8.11.0.tgz#977e91dd96ca669f54a11e23e378e33b884a565f" - integrity sha512-wGgprdCvMalC0BztXvitD2hC04YffAvtsUn93JbGXYLAtCUO4xd17mCCZQxUOItiBwZvJScWo8NIvQMQ71rdpg== - 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@3.2.3: - version "3.2.3" - resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-3.2.3.tgz#57d35b8686e851e2cc04c403f1c00203976a1813" - integrity sha512-LEHHyuhlPY3TmuUYMh2oz89lTShfvgbmzaBcxve9t/9Wuy7Dwf4yoAKcND7KFT1HAQfqZ12qtc+DUrBMeKF9nw== - -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-escapes@^4.2.1: - version "4.3.2" - resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-4.3.2.tgz#6b2291d1db7d98b6521d5f1efa42d0f3a9feb65e" - integrity sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ== - dependencies: - type-fest "^0.21.3" - -ansi-regex@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" - integrity sha1-w7M6te42DYbg5ijwRorn7yfWVN8= - -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@^4.0.0, ansi-regex@^4.1.0: - version "4.1.1" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-4.1.1.tgz#164daac87ab2d6f6db3a29875e2d1766582dabed" - integrity sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g== - -ansi-regex@^5.0.0, ansi-regex@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" - integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== - -ansi-styles@^3.2.0, 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" - -ansicolors@~0.3.2: - version "0.3.2" - resolved "https://registry.yarnpkg.com/ansicolors/-/ansicolors-0.3.2.tgz#665597de86a9ffe3aa9bfbe6cae5c6ea426b4979" - integrity sha1-ZlWX3oap/+Oqm/vmyuXG6kJrSXk= - -any-promise@^1.0.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/any-promise/-/any-promise-1.3.0.tgz#abc6afeedcea52e809cdc0376aed3ce39635d17f" - integrity sha1-q8av7tzqUugJzcA3au0845Y10X8= - -anymatch@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-2.0.0.tgz#bcb24b4f37934d9aa7ac17b4adaf89e7c76ef2eb" - integrity sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw== - dependencies: - micromatch "^3.1.4" - normalize-path "^2.1.1" - -anymatch@^3.0.3, anymatch@~3.1.2: - version "3.1.3" - resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.3.tgz#790c58b19ba1720a84205b57c618d5ad8524973e" - integrity sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw== - dependencies: - normalize-path "^3.0.0" - picomatch "^2.0.4" - -"aproba@^1.0.3 || ^2.0.0", aproba@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/aproba/-/aproba-2.0.0.tgz#52520b8ae5b569215b354efc0caa3fe1e45a8adc" - integrity sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ== - -are-we-there-yet@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-2.0.0.tgz#372e0e7bd279d8e94c653aaa1f67200884bf3e1c" - integrity sha512-Ci/qENmwHnsYo9xKIcUJN5LeDKdJ6R1Z1j9V/J5wyq8nh/mYPEpIKJbBZXtZjG04HiK7zV/p6Vs9952MrMeUIw== - dependencies: - delegates "^1.0.0" - readable-stream "^3.6.0" - -are-we-there-yet@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-3.0.1.tgz#679df222b278c64f2cdba1175cdc00b0d96164bd" - integrity sha512-QZW4EDmGwlYur0Yyf/b2uGucHQMa8aFUP7eu9ddR73vvhFyt4V0Vl3QHPcTNJ8l6qYOBdxgXdnBXQrHilfRQBg== - dependencies: - delegates "^1.0.0" - readable-stream "^3.6.0" - -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== - -arr-diff@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-4.0.0.tgz#d6461074febfec71e7e15235761a329a5dc7c520" - integrity sha512-YVIQ82gZPGBebQV/a8dar4AitzCQs0jjXwMPZllpXMaGjXPYVUawSxQrRsjhjupyVxEvbHgUmIhKVlND+j02kA== - -arr-flatten@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/arr-flatten/-/arr-flatten-1.1.0.tgz#36048bbff4e7b47e136644316c99669ea5ae91f1" - integrity sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg== - -arr-union@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/arr-union/-/arr-union-3.1.0.tgz#e39b09aea9def866a8f206e288af63919bae39c4" - integrity sha512-sKpyeERZ02v1FeCZT8lrfJq5u6goHCtpTAzPwJYe7c8SPFOboNjNg1vz2L4VTn9T4PQxEx13TbXLmYUcS6Ug7Q== - -array-differ@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/array-differ/-/array-differ-3.0.0.tgz#3cbb3d0f316810eafcc47624734237d6aee4ae6b" - integrity sha512-THtfYS6KtME/yIAhKjZ2ul7XI96lQGHRputJQHO80LAWQnuGP4iCIN8vdMRboGbIEYBwU33q8Tch1os2+X0kMg== - -array-from@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/array-from/-/array-from-2.1.1.tgz#cfe9d8c26628b9dc5aecc62a9f5d8f1f352c1195" - integrity sha1-z+nYwmYoudxa7MYqn12PHzUsEZU= - -array-ify@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/array-ify/-/array-ify-1.0.0.tgz#9e528762b4a9066ad163a6962a364418e9626ece" - integrity sha1-nlKHYrSpBmrRY6aWKjZEGOlibs4= - -array-includes@^3.1.3, array-includes@^3.1.4, array-includes@^3.1.6: - version "3.1.6" - resolved "https://registry.npmjs.org/array-includes/-/array-includes-3.1.6.tgz#9e9e720e194f198266ba9e18c29e6a9b0e4b225f" - integrity sha512-sgTbLvL6cNnw24FnbaDyjmvddQ2ML8arZsgaJhoABMoplz/4QRhtrYS+alr1BUM1Bwp6dhx8vVCBSLG+StwOFw== - dependencies: - call-bind "^1.0.2" - define-properties "^1.1.4" - es-abstract "^1.20.4" - get-intrinsic "^1.1.3" - is-string "^1.0.7" - -array-iterate@^1.0.0: - version "1.1.4" - resolved "https://registry.yarnpkg.com/array-iterate/-/array-iterate-1.1.4.tgz#add1522e9dd9749bb41152d08b845bd08d6af8b7" - integrity sha512-sNRaPGh9nnmdC8Zf+pT3UqP8rnWj5Hf9wiFGsX3wUQ2yVSIhO2ShFwCoceIPpB41QF6i2OEmrHmCo36xronCVA== - -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== - -array-unique@^0.3.2: - version "0.3.2" - resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.3.2.tgz#a894b75d4bc4f6cd679ef3244a9fd8f46ae2d428" - integrity sha512-SleRWjh9JUud2wH1hPs9rZBZ33H6T9HOiL0uwGnGx9FpE6wKGyfWugmbkEOIs6qWrZhg0LWeLziLrEwQJhs5mQ== - -array.prototype.flat@^1.2.5: - version "1.2.5" - resolved "https://registry.yarnpkg.com/array.prototype.flat/-/array.prototype.flat-1.2.5.tgz#07e0975d84bbc7c48cd1879d609e682598d33e13" - integrity sha512-KaYU+S+ndVqyUnignHftkwc58o3uVU1jzczILJ1tN2YaIZpFIKBiP/x/j97E5MVPsaCloPbqWLB/8qCTVvT2qg== - dependencies: - call-bind "^1.0.2" - define-properties "^1.1.3" - es-abstract "^1.19.0" - -array.prototype.flatmap@^1.3.1: - version "1.3.1" - resolved "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.1.tgz#1aae7903c2100433cb8261cd4ed310aab5c4a183" - integrity sha512-8UGn9O1FDVvMNB0UlLv4voxRMze7+FpHyF5mSMRjWHUMlpoDViniy05870VlxhfgTnLbpuwTzvD76MTtWxB/mQ== - dependencies: - call-bind "^1.0.2" - define-properties "^1.1.4" - es-abstract "^1.20.4" - es-shim-unscopables "^1.0.0" - -array.prototype.tosorted@^1.1.1: - version "1.1.1" - resolved "https://registry.npmjs.org/array.prototype.tosorted/-/array.prototype.tosorted-1.1.1.tgz#ccf44738aa2b5ac56578ffda97c03fd3e23dd532" - integrity sha512-pZYPXPRl2PqWcsUs6LOMn+1f1532nEoPTYowBtqLwAW+W8vSVhkIGnmOX1t/UQjD6YGI0vcD2B1U7ZFGQH9jnQ== - dependencies: - call-bind "^1.0.2" - define-properties "^1.1.4" - es-abstract "^1.20.4" - es-shim-unscopables "^1.0.0" - get-intrinsic "^1.1.3" - -arrify@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d" - integrity sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0= - -arrify@^2.0.0, arrify@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/arrify/-/arrify-2.0.1.tgz#c9655e9331e0abcd588d2a7cad7e9956f66701fa" - integrity sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug== - -asap@^2.0.0: - version "2.0.6" - resolved "https://registry.yarnpkg.com/asap/-/asap-2.0.6.tgz#e50347611d7e690943208bbdafebcbc2fb866d46" - integrity sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY= - -asn1@~0.2.0: - version "0.2.6" - resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.6.tgz#0d3a7bb6e64e02a90c0303b31f292868ea09a08d" - integrity sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ== - dependencies: - safer-buffer "~2.1.0" - -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== - -assign-symbols@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/assign-symbols/-/assign-symbols-1.0.0.tgz#59667f41fadd4f20ccbc2bb96b8d4f7f78ec0367" - integrity sha512-Q+JC7Whu8HhmTdBph/Tq59IoRtoy6KAm5zzPv00WdujX82lbAL8K7WVjne7vdCsAmbF4AYaDOPyO3k0kl8qIrw== - -ast-types@0.9.6: - version "0.9.6" - resolved "https://registry.yarnpkg.com/ast-types/-/ast-types-0.9.6.tgz#102c9e9e9005d3e7e3829bf0c4fa24ee862ee9b9" - integrity sha512-qEdtR2UH78yyHX/AUNfXmJTlM48XoFZKBdwi1nzkI1mJL21cmbu0cvjxjpkXJ5NENMq42H+hNs8VLJcqXLerBQ== - -async-limiter@~1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/async-limiter/-/async-limiter-1.0.1.tgz#dd379e94f0db8310b08291f9d64c3209766617fd" - integrity sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ== - -async@^3.2.3: - version "3.2.4" - resolved "https://registry.npmjs.org/async/-/async-3.2.4.tgz#2d22e00f8cddeb5fde5dd33522b56d1cf569a81c" - integrity sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ== - -asynckit@^0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" - integrity sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q== - -at-least-node@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/at-least-node/-/at-least-node-1.0.0.tgz#602cd4b46e844ad4effc92a8011a3c46e0238dc2" - integrity sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg== - -atob@^2.1.2: - version "2.1.2" - resolved "https://registry.yarnpkg.com/atob/-/atob-2.1.2.tgz#6d9517eb9e030d2436666651e86bd9f6f13533c9" - integrity sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg== - -axios@^1.0.0: - version "1.2.1" - resolved "https://registry.npmjs.org/axios/-/axios-1.2.1.tgz#44cf04a3c9f0c2252ebd85975361c026cb9f864a" - integrity sha512-I88cFiGu9ryt/tfVEi4kX2SITsvDddTajXTOFmt2uK1ZVA8LytjtdeyefdQWEf5PU8w+4SSJDoYnggflB5tW4A== - dependencies: - follow-redirects "^1.15.0" - form-data "^4.0.0" - proxy-from-env "^1.1.0" - -babel-jest@^26.6.3: - version "26.6.3" - resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-26.6.3.tgz#d87d25cb0037577a0c89f82e5755c5d293c01056" - integrity sha512-pl4Q+GAVOHwvjrck6jKjvmGhnO3jHX/xuB9d27f+EJZ/6k+6nMuPjorrYp7s++bKKdANwzElBWnLWaObvTnaZA== - dependencies: - "@jest/transform" "^26.6.2" - "@jest/types" "^26.6.2" - "@types/babel__core" "^7.1.7" - babel-plugin-istanbul "^6.0.0" - babel-preset-jest "^26.6.2" - chalk "^4.0.0" - graceful-fs "^4.2.4" - slash "^3.0.0" - -babel-plugin-dynamic-import-node@^2.3.3: - version "2.3.3" - resolved "https://registry.yarnpkg.com/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz#84fda19c976ec5c6defef57f9427b3def66e17a3" - integrity sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ== - dependencies: - object.assign "^4.1.0" - -babel-plugin-istanbul@^6.0.0: - version "6.1.1" - resolved "https://registry.yarnpkg.com/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz#fa88ec59232fd9b4e36dbbc540a8ec9a9b47da73" - integrity sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA== - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - "@istanbuljs/load-nyc-config" "^1.0.0" - "@istanbuljs/schema" "^0.1.2" - istanbul-lib-instrument "^5.0.4" - test-exclude "^6.0.0" - -babel-plugin-jest-hoist@^26.6.2: - version "26.6.2" - resolved "https://registry.yarnpkg.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-26.6.2.tgz#8185bd030348d254c6d7dd974355e6a28b21e62d" - integrity sha512-PO9t0697lNTmcEHH69mdtYiOIkkOlj9fySqfO3K1eCcdISevLAE0xY59VLLUj0SoiPiTX/JU2CYFpILydUa5Lw== - dependencies: - "@babel/template" "^7.3.3" - "@babel/types" "^7.3.3" - "@types/babel__core" "^7.0.0" - "@types/babel__traverse" "^7.0.6" - -babel-plugin-polyfill-corejs2@^0.3.0: - version "0.3.1" - resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.3.1.tgz#440f1b70ccfaabc6b676d196239b138f8a2cfba5" - integrity sha512-v7/T6EQcNfVLfcN2X8Lulb7DjprieyLWJK/zOWH5DUYcAgex9sP3h25Q+DLsX9TloXe3y1O8l2q2Jv9q8UVB9w== - dependencies: - "@babel/compat-data" "^7.13.11" - "@babel/helper-define-polyfill-provider" "^0.3.1" - semver "^6.1.1" - -babel-plugin-polyfill-corejs3@^0.5.0: - version "0.5.2" - resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.5.2.tgz#aabe4b2fa04a6e038b688c5e55d44e78cd3a5f72" - integrity sha512-G3uJih0XWiID451fpeFaYGVuxHEjzKTHtc9uGFEjR6hHrvNzeS/PX+LLLcetJcytsB5m4j+K3o/EpXJNb/5IEQ== - dependencies: - "@babel/helper-define-polyfill-provider" "^0.3.1" - core-js-compat "^3.21.0" - -babel-plugin-polyfill-regenerator@^0.3.0: - version "0.3.1" - resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.3.1.tgz#2c0678ea47c75c8cc2fbb1852278d8fb68233990" - integrity sha512-Y2B06tvgHYt1x0yz17jGkGeeMr5FeKUu+ASJ+N6nB5lQ8Dapfg42i0OVrf8PNGJ3zKL4A23snMi1IRwrqqND7A== - dependencies: - "@babel/helper-define-polyfill-provider" "^0.3.1" - -babel-preset-current-node-syntax@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.0.1.tgz#b4399239b89b2a011f9ddbe3e4f401fc40cff73b" - integrity sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ== - dependencies: - "@babel/plugin-syntax-async-generators" "^7.8.4" - "@babel/plugin-syntax-bigint" "^7.8.3" - "@babel/plugin-syntax-class-properties" "^7.8.3" - "@babel/plugin-syntax-import-meta" "^7.8.3" - "@babel/plugin-syntax-json-strings" "^7.8.3" - "@babel/plugin-syntax-logical-assignment-operators" "^7.8.3" - "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" - "@babel/plugin-syntax-numeric-separator" "^7.8.3" - "@babel/plugin-syntax-object-rest-spread" "^7.8.3" - "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" - "@babel/plugin-syntax-optional-chaining" "^7.8.3" - "@babel/plugin-syntax-top-level-await" "^7.8.3" - -babel-preset-jest@^26.6.2: - version "26.6.2" - resolved "https://registry.yarnpkg.com/babel-preset-jest/-/babel-preset-jest-26.6.2.tgz#747872b1171df032252426586881d62d31798fee" - integrity sha512-YvdtlVm9t3k777c5NPQIv6cxFFFapys25HiUmuSgHwIZhfifweR5c5Sf5nwE3MAbfu327CYSvps8Yx6ANLyleQ== - dependencies: - babel-plugin-jest-hoist "^26.6.2" - babel-preset-current-node-syntax "^1.0.0" - -bail@^1.0.0: - version "1.0.5" - resolved "https://registry.yarnpkg.com/bail/-/bail-1.0.5.tgz#b6fa133404a392cbc1f8c4bf63f5953351e7a776" - integrity sha512-xFbRxM1tahm08yHBP16MMjVUAvDaBMD38zsM9EMAUN61omwLmKlOpB/Zku5QkjZ8TZ4vn53pj+t518cH0S03RQ== - -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== - -base64-js@^1.3.0, base64-js@^1.3.1: - version "1.5.1" - resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a" - integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== - -base@^0.11.1: - version "0.11.2" - resolved "https://registry.yarnpkg.com/base/-/base-0.11.2.tgz#7bde5ced145b6d551a90db87f83c558b4eb48a8f" - integrity sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg== - dependencies: - cache-base "^1.0.1" - class-utils "^0.3.5" - component-emitter "^1.2.1" - define-property "^1.0.0" - isobject "^3.0.1" - mixin-deep "^1.2.0" - pascalcase "^0.1.1" - -bash-language-server@^4.9.2: - version "4.9.2" - resolved "https://registry.yarnpkg.com/bash-language-server/-/bash-language-server-4.9.2.tgz#e9c5771a3cdfe2e94991f00b6db78f313199bed5" - integrity sha512-WchUA3WdUbgocLSJddbmECbkfHxp7hNFbFh7rLaPbqVsL9506HZYumlOQq1fcPGss1iTshJtQYyPzNsPV3XZag== - dependencies: - fast-glob "3.2.12" - fuzzy-search "3.2.1" - node-fetch "2.6.11" - turndown "7.1.2" - vscode-languageserver "8.0.2" - vscode-languageserver-textdocument "1.0.8" - web-tree-sitter "0.20.8" - zod "3.21.4" - -bcrypt-pbkdf@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz#a4301d389b6a43f9b67ff3ca11a3f6637e360e9e" - integrity sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w== - dependencies: - tweetnacl "^0.14.3" - -before-after-hook@^2.2.0: - version "2.2.2" - resolved "https://registry.yarnpkg.com/before-after-hook/-/before-after-hook-2.2.2.tgz#a6e8ca41028d90ee2c24222f201c90956091613e" - integrity sha512-3pZEU3NT5BFUo/AD5ERPWOgQOCZITni6iavr5AUw5AUwQjMlI0kzu5btnyD39AF0gUEsDPwJT+oY1ORBJijPjQ== - -big.js@^5.2.2: - version "5.2.2" - resolved "https://registry.yarnpkg.com/big.js/-/big.js-5.2.2.tgz#65f0af382f578bcdc742bd9c281e9cb2d7768328" - integrity sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ== - -big.js@^6.0.0: - version "6.1.1" - resolved "https://registry.yarnpkg.com/big.js/-/big.js-6.1.1.tgz#63b35b19dc9775c94991ee5db7694880655d5537" - integrity sha512-1vObw81a8ylZO5ePrtMay0n018TcftpTA5HFKDaSuiUDBo8biRBtjIobw60OpwuvrGk+FsxKamqN4cnmj/eXdg== - -bignumber.js@^9.0.0: - version "9.0.2" - resolved "https://registry.yarnpkg.com/bignumber.js/-/bignumber.js-9.0.2.tgz#71c6c6bed38de64e24a65ebe16cfcf23ae693673" - integrity sha512-GAcQvbpsM0pUb0zw1EI0KhQEZ+lRwR5fYaAp3vPOYuP7aDvGy6cVN6XHLauvF8SOga2y0dcLcjt3iQDTSEliyw== - -bin-links@^3.0.0: - version "3.0.2" - resolved "https://registry.yarnpkg.com/bin-links/-/bin-links-3.0.2.tgz#5c40f14b0742faa2ae952caa76b4a29090befcbb" - integrity sha512-+oSWBdbCUK6X4LOCSrU36fWRzZNaK7/evX7GozR9xwl2dyiVi3UOUwTyyOVYI1FstgugfsM9QESRrWo7gjCYbg== - dependencies: - cmd-shim "^5.0.0" - mkdirp-infer-owner "^2.0.0" - npm-normalize-package-bin "^1.0.0" - read-cmd-shim "^3.0.0" - rimraf "^3.0.0" - write-file-atomic "^4.0.0" - -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== - -bl@^4.0.3, bl@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/bl/-/bl-4.1.0.tgz#451535264182bec2fbbc83a62ab98cf11d9f7b3a" - integrity sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w== - dependencies: - buffer "^5.5.0" - inherits "^2.0.4" - readable-stream "^3.4.0" - -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" - -brace-expansion@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-2.0.1.tgz#1edc459e0f0c548486ecf9fc99f2221364b9a0ae" - integrity sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA== - dependencies: - balanced-match "^1.0.0" - -braces@^2.3.1: - version "2.3.2" - resolved "https://registry.yarnpkg.com/braces/-/braces-2.3.2.tgz#5979fd3f14cd531565e5fa2df1abfff1dfaee729" - integrity sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w== - dependencies: - arr-flatten "^1.1.0" - array-unique "^0.3.2" - extend-shallow "^2.0.1" - fill-range "^4.0.0" - isobject "^3.0.1" - repeat-element "^1.1.2" - snapdragon "^0.8.1" - snapdragon-node "^2.0.1" - split-string "^3.0.2" - to-regex "^3.0.1" - -braces@^3.0.2, 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-process-hrtime@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz#3c9b4b7d782c8121e56f10106d84c0d0ffc94626" - integrity sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow== - -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== - -browserslist@^4.14.5, browserslist@^4.21.0, browserslist@^4.21.3: - version "4.21.5" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.21.5.tgz#75c5dae60063ee641f977e00edd3cfb2fb7af6a7" - integrity sha512-tUkiguQGW7S3IhB7N+c2MV/HZPSCPAAiYBZXLsBhFB/PCy6ZKKsZrmBayHV9fdGV/ARIfJ14NkxKzRDjvp7L6w== - dependencies: - caniuse-lite "^1.0.30001449" - electron-to-chromium "^1.4.284" - node-releases "^2.0.8" - update-browserslist-db "^1.0.10" - -bs-logger@0.x: - version "0.2.6" - resolved "https://registry.yarnpkg.com/bs-logger/-/bs-logger-0.2.6.tgz#eb7d365307a72cf974cc6cda76b68354ad336bd8" - integrity sha512-pd8DCoxmbgc7hyPKOvxtqNcjYoOsABPQdcCUjGp3d42VR2CX1ORhk2A87oqqu5R1kk+76nsxZupkmyd+MVtCog== - dependencies: - fast-json-stable-stringify "2.x" - -bser@2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/bser/-/bser-2.1.1.tgz#e6787da20ece9d07998533cfd9de6f5c38f4bc05" - integrity sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ== - dependencies: - node-int64 "^0.4.0" - -buffer-equal-constant-time@1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz#f8e71132f7ffe6e01a5c9697a4c6f3e48d5cc819" - integrity sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA== - -buffer-from@1.x, buffer-from@^1.0.0: - version "1.1.2" - resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.2.tgz#2b146a6fd72e80b4f55d255f35ed59a3a9a41bd5" - integrity sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ== - -buffer-writer@2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/buffer-writer/-/buffer-writer-2.0.0.tgz#ce7eb81a38f7829db09c873f2fbb792c0c98ec04" - integrity sha512-a7ZpuTZU1TRtnwyCNW3I5dc0wWNC3VR9S++Ewyk2HHZdrO3CQJqSpd+95Us590V6AL7JqUAH2IwZ/398PmNFgw== - -buffer@^5.5.0, buffer@^5.6.0: - version "5.7.1" - resolved "https://registry.yarnpkg.com/buffer/-/buffer-5.7.1.tgz#ba62e7c13133053582197160851a8f648e99eed0" - integrity sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ== - dependencies: - base64-js "^1.3.1" - ieee754 "^1.1.13" - -buffer@^6.0.3: - version "6.0.3" - resolved "https://registry.yarnpkg.com/buffer/-/buffer-6.0.3.tgz#2ace578459cc8fbe2a70aaa8f52ee63b6a74c6c6" - integrity sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA== - dependencies: - base64-js "^1.3.1" - ieee754 "^1.2.1" - -builtins@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/builtins/-/builtins-1.0.3.tgz#cb94faeb61c8696451db36534e1422f94f0aee88" - integrity sha1-y5T662HIaWRR2zZTThQi+U8K7og= - -builtins@^5.0.0: - version "5.0.1" - resolved "https://registry.yarnpkg.com/builtins/-/builtins-5.0.1.tgz#87f6db9ab0458be728564fa81d876d8d74552fa9" - integrity sha512-qwVpFEHNfhYJIzNRBvd2C1kyo6jz3ZSMPyyuR47OPdiKWlbYnZNyDWuyR175qDnAJLiCo5fBBqPb3RiXgWlkOQ== - dependencies: - semver "^7.0.0" - -byte-size@^7.0.0: - version "7.0.1" - resolved "https://registry.yarnpkg.com/byte-size/-/byte-size-7.0.1.tgz#b1daf3386de7ab9d706b941a748dbfc71130dee3" - integrity sha512-crQdqyCwhokxwV1UyDzLZanhkugAgft7vt0qbbdt60C6Zf3CAiGmtUCylbtYwrU6loOUw3euGrNtW1J651ot1A== - -cacache@^15.0.5, cacache@^15.2.0: - version "15.3.0" - resolved "https://registry.yarnpkg.com/cacache/-/cacache-15.3.0.tgz#dc85380fb2f556fe3dda4c719bfa0ec875a7f1eb" - integrity sha512-VVdYzXEn+cnbXpFgWs5hTT7OScegHVmLhJIR8Ufqk3iFD6A6j5iSX1KuBTfNEv4tdJWE2PzA6IVFtcLC7fN9wQ== - 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" - -cacache@^16.0.0, cacache@^16.0.6, cacache@^16.1.0: - version "16.1.2" - resolved "https://registry.yarnpkg.com/cacache/-/cacache-16.1.2.tgz#a519519e9fc9e5e904575dcd3b77660cbf03f749" - integrity sha512-Xx+xPlfCZIUHagysjjOAje9nRo8pRDczQCcXb4J2O0BLtH+xeVue6ba4y1kfJfQMAnM2mkcoMIAyOctlaRGWYA== - 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 "^1.1.1" - -cache-base@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/cache-base/-/cache-base-1.0.1.tgz#0a7f46416831c8b662ee36fe4e7c59d76f666ab2" - integrity sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ== - dependencies: - collection-visit "^1.0.0" - component-emitter "^1.2.1" - get-value "^2.0.6" - has-value "^1.0.0" - isobject "^3.0.1" - set-value "^2.0.0" - to-object-path "^0.3.0" - union-value "^1.0.0" - unset-value "^1.0.0" - -call-bind@^1.0.0, call-bind@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.2.tgz#b1d4e89e688119c3c9a903ad30abb2f6a919be3c" - integrity sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA== - dependencies: - function-bind "^1.1.1" - get-intrinsic "^1.0.2" - -call-me-maybe@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/call-me-maybe/-/call-me-maybe-1.0.1.tgz#26d208ea89e37b5cbde60250a15f031c16a4d66b" - integrity sha1-JtII6onje1y95gJQoV8DHBak1ms= - -caller-callsite@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/caller-callsite/-/caller-callsite-2.0.0.tgz#847e0fce0a223750a9a027c54b33731ad3154134" - integrity sha1-hH4PzgoiN1CpoCfFSzNzGtMVQTQ= - dependencies: - callsites "^2.0.0" - -caller-path@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/caller-path/-/caller-path-2.0.0.tgz#468f83044e369ab2010fac5f06ceee15bb2cb1f4" - integrity sha1-Ro+DBE42mrIBD6xfBs7uFbsssfQ= - dependencies: - caller-callsite "^2.0.0" - -callsites@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/callsites/-/callsites-2.0.0.tgz#06eb84f00eea413da86affefacbffb36093b3c50" - integrity sha1-BuuE8A7qQT2oav/vrL/7Ngk7PFA= - -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== - -camel-case@3.0.x: - version "3.0.0" - resolved "https://registry.yarnpkg.com/camel-case/-/camel-case-3.0.0.tgz#ca3c3688a4e9cf3a4cda777dc4dcbc713249cf73" - integrity sha512-+MbKztAYHXPr1jNTSKQF52VpcFjwY5RkR7fxksV8Doo4KAYc5Fl4UJRgthBbTmEx8C54DqahhbLJkDwjI3PI/w== - dependencies: - no-case "^2.2.0" - upper-case "^1.1.1" - -camelcase-keys@^6.2.2: - version "6.2.2" - resolved "https://registry.yarnpkg.com/camelcase-keys/-/camelcase-keys-6.2.2.tgz#5e755d6ba51aa223ec7d3d52f25778210f9dc3c0" - integrity sha512-YrwaA0vEKazPBkn0ipTiMpSajYDSe+KjQfrjhcBMxJt/znbvlHd8Pw/Vamaz5EB4Wfhs3SUR3Z9mwRu/P3s3Yg== - dependencies: - camelcase "^5.3.1" - map-obj "^4.0.0" - quick-lru "^4.0.1" - -camelcase@^5.0.0, camelcase@^5.3.1: - version "5.3.1" - resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320" - integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== - -camelcase@^6.0.0: - version "6.3.0" - resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-6.3.0.tgz#5685b95eb209ac9c0c177467778c9c84df58ba9a" - integrity sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA== - -caniuse-lite@^1.0.30001449: - version "1.0.30001464" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001464.tgz#888922718df48ce5e33dcfe1a2af7d42676c5eb7" - integrity sha512-oww27MtUmusatpRpCGSOneQk2/l5czXANDSFvsc7VuOQ86s3ANhZetpwXNf1zY/zdfP63Xvjz325DAdAoES13g== - -capture-exit@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/capture-exit/-/capture-exit-2.0.0.tgz#fb953bfaebeb781f62898239dabb426d08a509a4" - integrity sha512-PiT/hQmTonHhl/HFGN+Lx3JJUznrVYJ3+AQsnthneZbvW7x+f08Tk7yLJTLEOUvBTbduLeeBkxEaYXUOUrRq6g== - dependencies: - rsvp "^4.8.4" - -cardinal@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/cardinal/-/cardinal-2.1.1.tgz#7cc1055d822d212954d07b085dea251cc7bc5505" - integrity sha1-fMEFXYItISlU0HsIXeolHMe8VQU= - dependencies: - ansicolors "~0.3.2" - redeyed "~2.1.0" - -chai@^4.2.0: - version "4.3.6" - resolved "https://registry.yarnpkg.com/chai/-/chai-4.3.6.tgz#ffe4ba2d9fa9d6680cc0b370adae709ec9011e9c" - integrity sha512-bbcp3YfHCUzMOvKqsztczerVgBKSsEijCySNlHHbX3VG1nskvqjz5Rfso1gGwD6w6oOV3eI60pKuMOV5MV7p3Q== - 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" - -chalk@4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.0.tgz#4e14870a618d9e2edd97dd8345fd9d9dc315646a" - integrity sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A== - dependencies: - ansi-styles "^4.1.0" - supports-color "^7.1.0" - -chalk@^2.0.0, chalk@^2.0.1, chalk@^2.1.0, chalk@^2.3.0, chalk@^2.4.1, chalk@^2.4.2: - 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, chalk@^4.0.2, chalk@^4.1.0, chalk@^4.1.1: - version "4.1.2" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" - integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== - dependencies: - ansi-styles "^4.1.0" - supports-color "^7.1.0" - -char-regex@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/char-regex/-/char-regex-1.0.2.tgz#d744358226217f981ed58f479b1d6bcc29545dcf" - integrity sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw== - -character-entities-legacy@^1.0.0: - version "1.1.4" - resolved "https://registry.yarnpkg.com/character-entities-legacy/-/character-entities-legacy-1.1.4.tgz#94bc1845dce70a5bb9d2ecc748725661293d8fc1" - integrity sha512-3Xnr+7ZFS1uxeiUDvV02wQ+QDbc55o97tIV5zHScSPJpcLm/r0DFPcoY3tYRp+VZukxuMeKgXYmsXQHO05zQeA== - -character-entities@^1.0.0: - version "1.2.4" - resolved "https://registry.yarnpkg.com/character-entities/-/character-entities-1.2.4.tgz#e12c3939b7eaf4e5b15e7ad4c5e28e1d48c5b16b" - integrity sha512-iBMyeEHxfVnIakwOuDXpVkc54HijNgCyQB2w0VfGQThle6NXn50zU6V/u+LDhxHcDUPojn6Kpga3PTAD8W1bQw== - -character-reference-invalid@^1.0.0: - version "1.1.4" - resolved "https://registry.yarnpkg.com/character-reference-invalid/-/character-reference-invalid-1.1.4.tgz#083329cda0eae272ab3dbbf37e9a382c13af1560" - integrity sha512-mKKUkUbhPpQlCOfIuZkvSEgktjPFIsZKRRbC6KWVEMvlzblj3i3asQv5ODsrwt0N3pHAEvjP8KTQPHkp0+6jOg== - -chardet@^0.7.0: - version "0.7.0" - resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.7.0.tgz#90094849f0937f2eedc2425d0d28a9e5f0cbad9e" - integrity sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA== - -check-error@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/check-error/-/check-error-1.0.2.tgz#574d312edd88bb5dd8912e9286dd6c0aed4aac82" - integrity sha512-BrgHpW9NURQgzoNyjfq0Wu6VFO6D7IZEmJNdtgNqpzGG8RuNFHt2jQxWlAs4HMe119chBnv+34syEZtc6IhLtA== - -child_process@~1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/child_process/-/child_process-1.0.2.tgz#b1f7e7fc73d25e7fd1d455adc94e143830182b5a" - integrity sha512-Wmza/JzL0SiWz7kl6MhIKT5ceIlnFPJX+lwUGj7Clhy5MMldsSoJR0+uvRzOS5Kv45Mq7t1PoE8TsOA9bzvb6g== - -chokidar@^3.5.1: - version "3.5.3" - resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.3.tgz#1cf37c8707b932bd1af1ae22c0432e2acd1903bd" - integrity sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw== - dependencies: - anymatch "~3.1.2" - braces "~3.0.2" - glob-parent "~5.1.2" - is-binary-path "~2.1.0" - is-glob "~4.0.1" - normalize-path "~3.0.0" - readdirp "~3.6.0" - optionalDependencies: - fsevents "~2.3.2" - -chownr@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/chownr/-/chownr-2.0.0.tgz#15bfbe53d2eab4cf70f18a8cd68ebe5b3cb1dece" - integrity sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ== - -chrome-trace-event@^1.0.2: - version "1.0.3" - resolved "https://registry.yarnpkg.com/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz#1015eced4741e15d06664a957dbbf50d041e26ac" - integrity sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg== - -ci-info@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-2.0.0.tgz#67a9e964be31a51e15e5010d58e6f12834002f46" - integrity sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ== - -cjs-module-lexer@^0.6.0: - version "0.6.0" - resolved "https://registry.yarnpkg.com/cjs-module-lexer/-/cjs-module-lexer-0.6.0.tgz#4186fcca0eae175970aee870b9fe2d6cf8d5655f" - integrity sha512-uc2Vix1frTfnuzxxu1Hp4ktSvM3QaI4oXl4ZUqL1wjTu/BGki9TrCWoqLTg/drR1KwAEarXuRFCG2Svr1GxPFw== - -class-utils@^0.3.5: - version "0.3.6" - resolved "https://registry.yarnpkg.com/class-utils/-/class-utils-0.3.6.tgz#f93369ae8b9a7ce02fd41faad0ca83033190c463" - integrity sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg== - dependencies: - arr-union "^3.1.0" - define-property "^0.2.5" - isobject "^3.0.0" - static-extend "^0.1.1" - -classnames@^2.2: - version "2.3.2" - resolved "https://registry.yarnpkg.com/classnames/-/classnames-2.3.2.tgz#351d813bf0137fcc6a76a16b88208d2560a0d924" - integrity sha512-CSbhY4cFEJRe6/GQzIk5qXZ4Jeg5pcsP7b5peFSDpffpe1cqjASH/n9UTjBwOp6XpMSTwQ8Za2K5V02ueA7Tmw== - -clean-css@4.2.x: - version "4.2.4" - resolved "https://registry.yarnpkg.com/clean-css/-/clean-css-4.2.4.tgz#733bf46eba4e607c6891ea57c24a989356831178" - integrity sha512-EJUDT7nDVFDvaQgAo2G/PJvxmp1o/c6iXLbswsBbUFXi1Nr+AjA2cKmfbKDMjMvzEe75g3P6JkaDDAKk96A85A== - dependencies: - source-map "~0.6.0" - -clean-stack@^2.0.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/clean-stack/-/clean-stack-2.2.0.tgz#ee8472dbb129e727b31e8a10a427dee9dfe4008b" - integrity sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A== - -cli-color@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/cli-color/-/cli-color-1.4.0.tgz#7d10738f48526824f8fe7da51857cb0f572fe01f" - integrity sha512-xu6RvQqqrWEo6MPR1eixqGPywhYBHRs653F9jfXB2Hx4jdM/3WxiNE1vppRmxtMIfl16SFYTpYlrnqH/HsK/2w== - dependencies: - ansi-regex "^2.1.1" - d "1" - es5-ext "^0.10.46" - es6-iterator "^2.0.3" - memoizee "^0.4.14" - timers-ext "^0.1.5" - -cli-cursor@3.1.0, cli-cursor@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-3.1.0.tgz#264305a7ae490d1d03bf0c9ba7c925d1753af307" - integrity sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw== - dependencies: - restore-cursor "^3.1.0" - -cli-cursor@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-2.1.0.tgz#b35dac376479facc3e94747d41d0d0f5238ffcb5" - integrity sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU= - dependencies: - restore-cursor "^2.0.0" - -cli-spinners@2.6.1, cli-spinners@^2.5.0: - version "2.6.1" - resolved "https://registry.yarnpkg.com/cli-spinners/-/cli-spinners-2.6.1.tgz#adc954ebe281c37a6319bfa401e6dd2488ffb70d" - integrity sha512-x/5fWmGMnbKQAaNwN+UZlV79qBLM9JFnJuJ03gIi5whrob0xV0ofNVHy9DhwGdsMJQc2OKv0oGmLzvaqvAVv+g== - -cli-spinners@^1.0.1: - version "1.3.1" - resolved "https://registry.yarnpkg.com/cli-spinners/-/cli-spinners-1.3.1.tgz#002c1990912d0d59580c93bd36c056de99e4259a" - integrity sha512-1QL4544moEsDVH9T/l6Cemov/37iv1RtoKf7NJ04A60+4MREXNfx/QvavbH6QoGdsD4N4Mwy49cmaINR/o2mdg== - -cli-width@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-3.0.0.tgz#a2f48437a2caa9a22436e794bf071ec9e61cedf6" - integrity sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw== - -cliui@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/cliui/-/cliui-5.0.0.tgz#deefcfdb2e800784aa34f46fa08e06851c7bbbc5" - integrity sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA== - dependencies: - string-width "^3.1.0" - strip-ansi "^5.2.0" - wrap-ansi "^5.1.0" - -cliui@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/cliui/-/cliui-6.0.0.tgz#511d702c0c4e41ca156d7d0e96021f23e13225b1" - integrity sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ== - dependencies: - string-width "^4.2.0" - strip-ansi "^6.0.0" - wrap-ansi "^6.2.0" - -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" - -cliui@^8.0.1: - version "8.0.1" - resolved "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz#0c04b075db02cbfe60dc8e6cf2f5486b1a3608aa" - integrity sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ== - dependencies: - string-width "^4.2.0" - strip-ansi "^6.0.1" - wrap-ansi "^7.0.0" - -clone-deep@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/clone-deep/-/clone-deep-4.0.1.tgz#c19fd9bdbbf85942b4fd979c84dcf7d5f07c2387" - integrity sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ== - dependencies: - is-plain-object "^2.0.4" - kind-of "^6.0.2" - shallow-clone "^3.0.0" - -clone@^1.0.2: - version "1.0.4" - resolved "https://registry.yarnpkg.com/clone/-/clone-1.0.4.tgz#da309cc263df15994c688ca902179ca3c7cd7c7e" - integrity sha1-2jCcwmPfFZlMaIypAheco8fNfH4= - -cmd-shim@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/cmd-shim/-/cmd-shim-5.0.0.tgz#8d0aaa1a6b0708630694c4dbde070ed94c707724" - integrity sha512-qkCtZ59BidfEwHltnJwkyVZn+XQojdAySM1D1gSeh11Z4pW1Kpolkyo53L5noc0nrxmIvyFwTmJRo4xs7FFLPw== - dependencies: - mkdirp-infer-owner "^2.0.0" - -co@3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/co/-/co-3.1.0.tgz#4ea54ea5a08938153185e15210c68d9092bc1b78" - integrity sha1-TqVOpaCJOBUxheFSEMaNkJK8G3g= - -co@^4.6.0: - version "4.6.0" - resolved "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184" - integrity sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ== - -codemirror@*, codemirror@~5.61.0: - version "5.61.1" - resolved "https://registry.yarnpkg.com/codemirror/-/codemirror-5.61.1.tgz#ccfc8a43b8fcfb8b12e8e75b5ffde48d541406e0" - integrity sha512-+D1NZjAucuzE93vJGbAaXzvoBHwp9nJZWWWF9utjv25+5AZUiah6CIlfb4ikG4MoDsFsCG8niiJH5++OO2LgIQ== - -collapse-white-space@^1.0.2: - version "1.0.6" - resolved "https://registry.yarnpkg.com/collapse-white-space/-/collapse-white-space-1.0.6.tgz#e63629c0016665792060dbbeb79c42239d2c5287" - integrity sha512-jEovNnrhMuqyCcjfEJA56v0Xq8SkIoPKDyaHahwo3POf4qcSXqMYuwNcOTzp74vTsR9Tn08z4MxWqAhcekogkQ== - -collect-v8-coverage@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/collect-v8-coverage/-/collect-v8-coverage-1.0.1.tgz#cc2c8e94fc18bbdffe64d6534570c8a673b27f59" - integrity sha512-iBPtljfCNcTKNAto0KEtDfZ3qzjJvqE3aTGZsbhjSBlorqpXJlaWWtPO35D+ZImoC3KWejX64o+yPGxhWSTzfg== - -collection-visit@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/collection-visit/-/collection-visit-1.0.0.tgz#4bc0373c164bc3291b4d368c829cf1a80a59dca0" - integrity sha512-lNkKvzEeMBBjUGHZ+q6z9pSJla0KWAQPvtzhEV9+iGyQYG+pBpl7xKDhxoNSOZH2hhv0v5k0y2yAM4o4SjoSkw== - dependencies: - map-visit "^1.0.0" - object-visit "^1.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 sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw== - -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== - -color-support@^1.1.2, color-support@^1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/color-support/-/color-support-1.1.3.tgz#93834379a1cc9a0c61f82f52f0d04322251bd5a2" - integrity sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg== - -colorette@^2.0.14: - version "2.0.19" - resolved "https://registry.yarnpkg.com/colorette/-/colorette-2.0.19.tgz#cdf044f47ad41a0f4b56b3a0d5b4e6e1a2d5a798" - integrity sha512-3tlv/dIP7FWvj3BsbHrGLJ6l/oKh1O3TcgBqMn+yyCagOxc23fyzDS6HypQbgxWbkpDnf52p1LuR4eWDQ/K9WQ== - -columnify@^1.6.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/columnify/-/columnify-1.6.0.tgz#6989531713c9008bb29735e61e37acf5bd553cf3" - integrity sha512-lomjuFZKfM6MSAnV9aCZC9sc0qGbmZdfygNv+nCpqVkSKdCxCklLtd16O0EILGkImHw9ZpHkAnHaB+8Zxq5W6Q== - dependencies: - strip-ansi "^6.0.1" - wcwidth "^1.0.0" - -combined-stream@^1.0.8: - version "1.0.8" - resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f" - integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg== - dependencies: - delayed-stream "~1.0.0" - -command-exists@^1.2.6: - version "1.2.9" - resolved "https://registry.yarnpkg.com/command-exists/-/command-exists-1.2.9.tgz#c50725af3808c8ab0260fd60b01fbfa25b954f69" - integrity sha512-LTQ/SGc+s0Xc0Fu5WaKnR0YiygZkm9eKFvyS+fRsU7/ZWFF8ykFM6Pc9aCVf1+xasOOZpO3BAVgVrKvsqKHV7w== - -commander@2.17.x: - version "2.17.1" - resolved "https://registry.yarnpkg.com/commander/-/commander-2.17.1.tgz#bd77ab7de6de94205ceacc72f1716d29f20a77bf" - integrity sha512-wPMUt6FnH2yzG95SA6mzjQOEKUU3aLaDEmzs1ti+1E9h+CsrZghRlqEM/EJ4KscsQVG8uNN4uVreUeT8+drlgg== - -commander@^2.20.0: - version "2.20.3" - resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" - integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== - -commander@^7.0.0, commander@^7.2.0: - version "7.2.0" - resolved "https://registry.yarnpkg.com/commander/-/commander-7.2.0.tgz#a36cb57d0b501ce108e4d20559a150a391d97ab7" - integrity sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw== - -commander@^9.4.0: - version "9.4.1" - resolved "https://registry.npmjs.org/commander/-/commander-9.4.1.tgz#d1dd8f2ce6faf93147295c0df13c7c21141cfbdd" - integrity sha512-5EEkTNyHNGFPD2H+c/dXXfQZYa/scCKasxWcXJaWnNJ99pnQN9Vnmqow+p+PlFPE63Q6mThaZws1T+HxfpgtPw== - -commander@~2.19.0: - version "2.19.0" - resolved "https://registry.yarnpkg.com/commander/-/commander-2.19.0.tgz#f6198aa84e5b83c46054b94ddedbfed5ee9ff12a" - integrity sha512-6tvAOO+D6OENvRAh524Dh9jcfKTYDQAqvqezbCW82xj5X0pSrcpxtvRKHLG0yBY6SD7PSDrJaj+0AiOcKVd1Xg== - -commander@~6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/commander/-/commander-6.0.0.tgz#2b270da94f8fb9014455312f829a1129dbf8887e" - integrity sha512-s7EA+hDtTYNhuXkTlhqew4txMZVdszBmKWSPEMxGr8ru8JXR7bLUFIAtPhcSuFdJQ0ILMxnJi8GkQL0yvDy/YA== - -common-ancestor-path@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/common-ancestor-path/-/common-ancestor-path-1.0.1.tgz#4f7d2d1394d91b7abdf51871c62f71eadb0182a7" - integrity sha512-L3sHRo1pXXEqX8VU28kfgUY+YGsk09hPqZiZmLacNib6XNTCM8ubYeT7ryXQw8asB1sKgcU5lkB7ONug08aB8w== - -commondir@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/commondir/-/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b" - integrity sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg== - -compare-func@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/compare-func/-/compare-func-2.0.0.tgz#fb65e75edbddfd2e568554e8b5b05fff7a51fcb3" - integrity sha512-zHig5N+tPWARooBnb0Zx1MFcdfpyJrfTJ3Y5L+IFvUm8rM74hHz66z0gw0x4tijh5CorKkKUCnW82R2vmpeCRA== - dependencies: - array-ify "^1.0.0" - dot-prop "^5.1.0" - -component-emitter@^1.2.1: - version "1.3.0" - resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.3.0.tgz#16e4070fba8ae29b679f2215853ee181ab2eabc0" - integrity sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg== - -compute-gcd@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/compute-gcd/-/compute-gcd-1.2.1.tgz#34d639f3825625e1357ce81f0e456a6249d8c77f" - integrity sha512-TwMbxBNz0l71+8Sc4czv13h4kEqnchV9igQZBi6QUaz09dnz13juGnnaWWJTRsP3brxOoxeB4SA2WELLw1hCtg== - dependencies: - validate.io-array "^1.0.3" - validate.io-function "^1.0.2" - validate.io-integer-array "^1.0.0" - -compute-lcm@^1.1.0: - version "1.1.2" - resolved "https://registry.yarnpkg.com/compute-lcm/-/compute-lcm-1.1.2.tgz#9107c66b9dca28cefb22b4ab4545caac4034af23" - integrity sha512-OFNPdQAXnQhDSKioX8/XYT6sdUlXwpeMjfd6ApxMJfyZ4GxmLR1xvMERctlYhlHwIiz6CSpBc2+qYKjHGZw4TQ== - dependencies: - compute-gcd "^1.2.1" - validate.io-array "^1.0.3" - validate.io-function "^1.0.2" - validate.io-integer-array "^1.0.0" - -concat-map@0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" - integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg== - -concat-stream@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-2.0.0.tgz#414cf5af790a48c60ab9be4527d56d5e41133cb1" - integrity sha512-MWufYdFw53ccGjCA+Ol7XJYpAlW6/prSMzuPOTRnJGcGzuhLn4Scrz7qf6o8bROZ514ltazcIFJZevcfbo0x7A== - dependencies: - buffer-from "^1.0.0" - inherits "^2.0.3" - readable-stream "^3.0.2" - typedarray "^0.0.6" - -config-chain@^1.1.12: - version "1.1.13" - resolved "https://registry.yarnpkg.com/config-chain/-/config-chain-1.1.13.tgz#fad0795aa6a6cdaff9ed1b68e9dff94372c232f4" - integrity sha512-qj+f8APARXHrM0hraqXYb2/bOVSV4PvJQlNZ/DVj0QrmNM2q2euizkeuVckQ57J+W0mRH6Hvi+k50M4Jul2VRQ== - dependencies: - ini "^1.3.4" - proto-list "~1.2.1" - -console-control-strings@^1.0.0, console-control-strings@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/console-control-strings/-/console-control-strings-1.1.0.tgz#3d7cf4464db6446ea644bf4b39507f9851008e8e" - integrity sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ== - -conventional-changelog-angular@^5.0.12: - version "5.0.13" - resolved "https://registry.yarnpkg.com/conventional-changelog-angular/-/conventional-changelog-angular-5.0.13.tgz#896885d63b914a70d4934b59d2fe7bde1832b28c" - integrity sha512-i/gipMxs7s8L/QeuavPF2hLnJgH6pEZAttySB6aiQLWcX3puWDL3ACVmvBhJGxnAy52Qc15ua26BufY6KpmrVA== - dependencies: - compare-func "^2.0.0" - q "^1.5.1" - -conventional-changelog-core@^4.2.4: - version "4.2.4" - resolved "https://registry.yarnpkg.com/conventional-changelog-core/-/conventional-changelog-core-4.2.4.tgz#e50d047e8ebacf63fac3dc67bf918177001e1e9f" - integrity sha512-gDVS+zVJHE2v4SLc6B0sLsPiloR0ygU7HaDW14aNJE1v4SlqJPILPl/aJC7YdtRE4CybBf8gDwObBvKha8Xlyg== - dependencies: - add-stream "^1.0.0" - conventional-changelog-writer "^5.0.0" - conventional-commits-parser "^3.2.0" - dateformat "^3.0.0" - get-pkg-repo "^4.0.0" - git-raw-commits "^2.0.8" - git-remote-origin-url "^2.0.0" - git-semver-tags "^4.1.1" - lodash "^4.17.15" - normalize-package-data "^3.0.0" - q "^1.5.1" - read-pkg "^3.0.0" - read-pkg-up "^3.0.0" - through2 "^4.0.0" - -conventional-changelog-preset-loader@^2.3.4: - version "2.3.4" - resolved "https://registry.yarnpkg.com/conventional-changelog-preset-loader/-/conventional-changelog-preset-loader-2.3.4.tgz#14a855abbffd59027fd602581f1f34d9862ea44c" - integrity sha512-GEKRWkrSAZeTq5+YjUZOYxdHq+ci4dNwHvpaBC3+ENalzFWuCWa9EZXSuZBpkr72sMdKB+1fyDV4takK1Lf58g== - -conventional-changelog-writer@^5.0.0: - version "5.0.1" - resolved "https://registry.yarnpkg.com/conventional-changelog-writer/-/conventional-changelog-writer-5.0.1.tgz#e0757072f045fe03d91da6343c843029e702f359" - integrity sha512-5WsuKUfxW7suLblAbFnxAcrvf6r+0b7GvNaWUwUIk0bXMnENP/PEieGKVUQrjPqwPT4o3EPAASBXiY6iHooLOQ== - dependencies: - conventional-commits-filter "^2.0.7" - dateformat "^3.0.0" - handlebars "^4.7.7" - json-stringify-safe "^5.0.1" - lodash "^4.17.15" - meow "^8.0.0" - semver "^6.0.0" - split "^1.0.0" - through2 "^4.0.0" - -conventional-commits-filter@^2.0.7: - version "2.0.7" - resolved "https://registry.yarnpkg.com/conventional-commits-filter/-/conventional-commits-filter-2.0.7.tgz#f8d9b4f182fce00c9af7139da49365b136c8a0b3" - integrity sha512-ASS9SamOP4TbCClsRHxIHXRfcGCnIoQqkvAzCSbZzTFLfcTqJVugB0agRgsEELsqaeWgsXv513eS116wnlSSPA== - dependencies: - lodash.ismatch "^4.4.0" - modify-values "^1.0.0" - -conventional-commits-parser@^3.2.0: - version "3.2.4" - resolved "https://registry.yarnpkg.com/conventional-commits-parser/-/conventional-commits-parser-3.2.4.tgz#a7d3b77758a202a9b2293d2112a8d8052c740972" - integrity sha512-nK7sAtfi+QXbxHCYfhpZsfRtaitZLIA6889kFIouLvz6repszQDgxBu7wf2WbU+Dco7sAnNCJYERCwt54WPC2Q== - dependencies: - JSONStream "^1.0.4" - is-text-path "^1.0.1" - lodash "^4.17.15" - meow "^8.0.0" - split2 "^3.0.0" - through2 "^4.0.0" - -conventional-recommended-bump@^6.1.0: - version "6.1.0" - resolved "https://registry.yarnpkg.com/conventional-recommended-bump/-/conventional-recommended-bump-6.1.0.tgz#cfa623285d1de554012f2ffde70d9c8a22231f55" - integrity sha512-uiApbSiNGM/kkdL9GTOLAqC4hbptObFo4wW2QRyHsKciGAfQuLU1ShZ1BIVI/+K2BE/W1AWYQMCXAsv4dyKPaw== - dependencies: - concat-stream "^2.0.0" - conventional-changelog-preset-loader "^2.3.4" - conventional-commits-filter "^2.0.7" - conventional-commits-parser "^3.2.0" - git-raw-commits "^2.0.8" - git-semver-tags "^4.1.1" - meow "^8.0.0" - q "^1.5.1" - -convert-source-map@^1.4.0, convert-source-map@^1.6.0, convert-source-map@^1.7.0: - version "1.9.0" - resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.9.0.tgz#7faae62353fb4213366d0ca98358d22e8368b05f" - integrity sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A== - -copy-descriptor@^0.1.0: - version "0.1.1" - resolved "https://registry.yarnpkg.com/copy-descriptor/-/copy-descriptor-0.1.1.tgz#676f6eb3c39997c2ee1ac3a924fd6124748f578d" - integrity sha512-XgZ0pFcakEUlbwQEVNg3+QAis1FyTL3Qel9FYy8pSkQqoG3PNoT0bOCQtOXcOkur21r2Eq2kI+IE+gsmAEVlYw== - -core-js-compat@^3.21.0, core-js-compat@^3.22.1: - version "3.23.3" - resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.23.3.tgz#7d8503185be76bb6d8d592c291a4457a8e440aa9" - integrity sha512-WSzUs2h2vvmKsacLHNTdpyOC9k43AEhcGoFlVgCY4L7aw98oSBKtPL6vD0/TqZjRWRQYdDSLkzZIni4Crbbiqw== - dependencies: - browserslist "^4.21.0" - semver "7.0.0" - -core-js-pure@^3.6.5: - version "3.29.0" - resolved "https://registry.yarnpkg.com/core-js-pure/-/core-js-pure-3.29.0.tgz#0e1ac889214398641ea4bb1c6cf25ff0959ec1d2" - integrity sha512-v94gUjN5UTe1n0yN/opTihJ8QBWD2O8i19RfTZR7foONPWArnjB96QA/wk5ozu1mm6ja3udQCzOzwQXTxi3xOQ== - -core-util-is@~1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" - integrity sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ== - -cosmiconfig@^5.2.1: - version "5.2.1" - resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-5.2.1.tgz#040f726809c591e77a17c0a3626ca45b4f168b1a" - integrity sha512-H65gsXo1SKjf8zmrJ67eJk8aIRKV5ff2D4uKZIBZShbhGSpEmsQOPW/SKMKYhSTrqR7ufy6RP69rPogdaPh/kA== - dependencies: - import-fresh "^2.0.0" - is-directory "^0.3.1" - js-yaml "^3.13.1" - parse-json "^4.0.0" - -cosmiconfig@^7.0.0: - version "7.0.1" - resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-7.0.1.tgz#714d756522cace867867ccb4474c5d01bbae5d6d" - integrity sha512-a1YWNUV2HwGimB7dU2s1wUMurNKjpx60HxBB6xUM8Re+2s1g1IIfJvFR0/iCF+XHdE0GMTKTuLR32UQff4TEyQ== - dependencies: - "@types/parse-json" "^4.0.0" - import-fresh "^3.2.1" - parse-json "^5.0.0" - path-type "^4.0.0" - yaml "^1.10.0" - -cross-spawn@^5.0.1: - version "5.1.0" - resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-5.1.0.tgz#e8bd0efee58fcff6f8f94510a0a554bbfa235449" - integrity sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk= - dependencies: - lru-cache "^4.0.1" - shebang-command "^1.2.0" - which "^1.2.9" - -cross-spawn@^6.0.0, cross-spawn@^6.0.5: - version "6.0.5" - resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-6.0.5.tgz#4a5ec7c64dfae22c3a14124dbacdee846d80cbc4" - integrity sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ== - dependencies: - nice-try "^1.0.4" - path-key "^2.0.1" - semver "^5.5.0" - shebang-command "^1.2.0" - which "^1.2.9" - -cross-spawn@^7.0.0, cross-spawn@^7.0.2, cross-spawn@^7.0.3: - 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" - -crypto-random-string@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/crypto-random-string/-/crypto-random-string-2.0.0.tgz#ef2a7a966ec11083388369baa02ebead229b30d5" - integrity sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA== - -css-loader@^5.0.1: - version "5.2.7" - resolved "https://registry.yarnpkg.com/css-loader/-/css-loader-5.2.7.tgz#9b9f111edf6fb2be5dc62525644cbc9c232064ae" - integrity sha512-Q7mOvpBNBG7YrVGMxRxcBJZFL75o+cH2abNASdibkj/fffYD8qWbInZrD0S9ccI6vZclF3DsHE7njGlLtaHbhg== - dependencies: - icss-utils "^5.1.0" - loader-utils "^2.0.0" - postcss "^8.2.15" - postcss-modules-extract-imports "^3.0.0" - postcss-modules-local-by-default "^4.0.0" - postcss-modules-scope "^3.0.0" - postcss-modules-values "^4.0.0" - postcss-value-parser "^4.1.0" - schema-utils "^3.0.0" - semver "^7.3.5" - -cssesc@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/cssesc/-/cssesc-3.0.0.tgz#37741919903b868565e1c09ea747445cd18983ee" - integrity sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg== - -cssom@^0.4.4: - version "0.4.4" - resolved "https://registry.yarnpkg.com/cssom/-/cssom-0.4.4.tgz#5a66cf93d2d0b661d80bf6a44fb65f5c2e4e0a10" - integrity sha512-p3pvU7r1MyyqbTk+WbNJIgJjG2VmTIaB10rI93LzVPrmDJKkzKYMtxxyAvQXR/NS6otuzveI7+7BBq3SjBS2mw== - -cssom@~0.3.6: - version "0.3.8" - resolved "https://registry.yarnpkg.com/cssom/-/cssom-0.3.8.tgz#9f1276f5b2b463f2114d3f2c75250af8c1a36f4a" - integrity sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg== - -cssstyle@^2.3.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/cssstyle/-/cssstyle-2.3.0.tgz#ff665a0ddbdc31864b09647f34163443d90b0852" - integrity sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A== - dependencies: - cssom "~0.3.6" - -csstype@3.0.10, csstype@^3.0.2, csstype@~3.0.3: - version "3.0.10" - resolved "https://registry.yarnpkg.com/csstype/-/csstype-3.0.10.tgz#2ad3a7bed70f35b965707c092e5f30b327c290e5" - integrity sha512-2u44ZG2OcNUO9HDp/Jl8C07x6pU/eTR3ncV91SiK3dhG9TWvRVsCoJw14Ckx5DgWkzGA3waZWO3d7pgqpUI/XA== - -d@1, d@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/d/-/d-1.0.1.tgz#8698095372d58dbee346ffd0c7093f99f8f9eb5a" - integrity sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA== - dependencies: - es5-ext "^0.10.50" - type "^1.0.1" - -dargs@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/dargs/-/dargs-7.0.0.tgz#04015c41de0bcb69ec84050f3d9be0caf8d6d5cc" - integrity sha512-2iy1EkLdlBzQGvbweYRFxmFath8+K7+AKB0TlhHWkNuH+TmovaMH/Wp7V7R4u7f4SnX3OgLsU9t1NI9ioDnUpg== - -data-urls@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/data-urls/-/data-urls-2.0.0.tgz#156485a72963a970f5d5821aaf642bef2bf2db9b" - integrity sha512-X5eWTSXO/BJmpdIKCRuKUgSCgAN0OwliVK3yPKbwIWU1Tdw5BRajxlzMidvh+gwko9AfQ9zIj52pzF91Q3YAvQ== - dependencies: - abab "^2.0.3" - whatwg-mimetype "^2.3.0" - whatwg-url "^8.0.0" - -date-format@^4.0.5: - version "4.0.5" - resolved "https://registry.yarnpkg.com/date-format/-/date-format-4.0.5.tgz#ba385f89782c6cb114cf45dfa4704c6bb29fca51" - integrity sha512-zBhRiN/M0gDxUoM2xRtzTjJzSg0XEi1ofYpF84PfXeS3hN2PsGxmc7jw3DNQtFlimRbMmob5FC3G0cJq6jQQpw== - -dateformat@^3.0.0: - version "3.0.3" - resolved "https://registry.yarnpkg.com/dateformat/-/dateformat-3.0.3.tgz#a6e37499a4d9a9cf85ef5872044d62901c9889ae" - integrity sha512-jyCETtSl3VMZMWeRo7iY1FL19ges1t55hMo5yaam4Jrsm5EPL89UQkoQRyiI+Yf4k8r2ZpdngkV8hr1lIdjb3Q== - -debug@3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/debug/-/debug-3.1.0.tgz#5bb5a0672628b64149566ba16819e61518c67261" - integrity sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g== - dependencies: - ms "2.0.0" - -debug@3.2.6: - version "3.2.6" - resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.6.tgz#e83d17de16d8a7efb7717edbe5fb10135eee629b" - integrity sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ== - dependencies: - ms "^2.1.1" - -debug@4, debug@^4.1.0, debug@^4.1.1, debug@^4.3.2, debug@^4.3.3, debug@^4.3.4: - version "4.3.4" - resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" - integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== - dependencies: - ms "2.1.2" - -debug@^2.2.0, debug@^2.3.3, debug@^2.6.9: - version "2.6.9" - resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" - integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== - dependencies: - ms "2.0.0" - -debug@^3.1.0, debug@^3.2.7: - version "3.2.7" - resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.7.tgz#72580b7e9145fb39b6676f9c5e5fb100b934179a" - integrity sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ== - dependencies: - ms "^2.1.1" - -debuglog@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/debuglog/-/debuglog-1.0.1.tgz#aa24ffb9ac3df9a2351837cfb2d279360cd78492" - integrity sha1-qiT/uaw9+aI1GDfPstJ5NgzXhJI= - -decamelize-keys@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/decamelize-keys/-/decamelize-keys-1.1.0.tgz#d171a87933252807eb3cb61dc1c1445d078df2d9" - integrity sha1-0XGoeTMlKAfrPLYdwcFEXQeN8tk= - dependencies: - decamelize "^1.1.0" - map-obj "^1.0.0" - -decamelize@^1.1.0, decamelize@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" - integrity sha1-9lNNFRSCabIDUue+4m9QH5oZEpA= - -decimal.js@^10.2.1: - version "10.4.3" - resolved "https://registry.yarnpkg.com/decimal.js/-/decimal.js-10.4.3.tgz#1044092884d245d1b7f65725fa4ad4c6f781cc23" - integrity sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA== - -decode-uri-component@^0.2.0, decode-uri-component@^0.2.1: - version "0.2.2" - resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.2.tgz#e69dbe25d37941171dd540e024c444cd5188e1e9" - integrity sha512-FqUYQ+8o158GyGTrMFJms9qh3CqTKvAqgqsTnkLI8sKu0028orqBhxNMFkFen0zGyg6epACD32pjVk58ngIErQ== - -dedent@^0.7.0: - version "0.7.0" - resolved "https://registry.yarnpkg.com/dedent/-/dedent-0.7.0.tgz#2495ddbaf6eb874abb0e1be9df22d2e5a544326c" - integrity sha1-JJXduvbrh0q7Dhvp3yLS5aVEMmw= - -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-equal@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/deep-equal/-/deep-equal-1.1.1.tgz#b5c98c942ceffaf7cb051e24e1434a25a2e6076a" - integrity sha512-yd9c5AdiqVcR+JjcwUQb9DkhJc8ngNr0MahEBGvDiJw8puWab2yZlh+nkasOnZP+EGTAP6rRp2JzJhJZzvNF8g== - dependencies: - is-arguments "^1.0.4" - is-date-object "^1.0.1" - is-regex "^1.0.4" - object-is "^1.0.1" - object-keys "^1.1.1" - regexp.prototype.flags "^1.2.0" - -deep-is@^0.1.3, deep-is@~0.1.3: - version "0.1.4" - resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.4.tgz#a6f2dce612fadd2ef1f519b73551f17e85199831" - integrity sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ== - -deepmerge@^4.2.2: - version "4.3.0" - resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-4.3.0.tgz#65491893ec47756d44719ae520e0e2609233b59b" - integrity sha512-z2wJZXrmeHdvYJp/Ux55wIjqo81G5Bp4c+oELTW+7ar6SogWHajt5a9gO3s3IDaGSAXjDk0vlQKN3rms8ab3og== - -defaults@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/defaults/-/defaults-1.0.3.tgz#c656051e9817d9ff08ed881477f3fe4019f3ef7d" - integrity sha1-xlYFHpgX2f8I7YgUd/P+QBnz730= - dependencies: - clone "^1.0.2" - -deferred-leveldown@~5.3.0: - version "5.3.0" - resolved "https://registry.yarnpkg.com/deferred-leveldown/-/deferred-leveldown-5.3.0.tgz#27a997ad95408b61161aa69bd489b86c71b78058" - integrity sha512-a59VOT+oDy7vtAbLRCZwWgxu2BaCfd5Hk7wxJd48ei7I+nsg8Orlb9CLG0PMZienk9BSUKgeAqkO2+Lw+1+Ukw== - dependencies: - abstract-leveldown "~6.2.1" - inherits "^2.0.3" - -define-lazy-prop@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz#3f7ae421129bcaaac9bc74905c98a0009ec9ee7f" - integrity sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og== - -define-properties@^1.1.2, define-properties@^1.1.3, define-properties@^1.1.4: - version "1.2.0" - resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.2.0.tgz#52988570670c9eacedd8064f4a990f2405849bd5" - integrity sha512-xvqAVKGfT1+UAvPwKTVw/njhdQ8ZhXK4lI0bCIuCMrp2up9nPnaDftrLtmpTazqd1o+UY4zgzU+avtMbDP+ldA== - dependencies: - has-property-descriptors "^1.0.0" - object-keys "^1.1.1" - -define-property@^0.2.5: - version "0.2.5" - resolved "https://registry.yarnpkg.com/define-property/-/define-property-0.2.5.tgz#c35b1ef918ec3c990f9a5bc57be04aacec5c8116" - integrity sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA== - dependencies: - is-descriptor "^0.1.0" - -define-property@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/define-property/-/define-property-1.0.0.tgz#769ebaaf3f4a63aad3af9e8d304c9bbe79bfb0e6" - integrity sha512-cZTYKFWspt9jZsMscWo8sc/5lbPC9Q0N5nBLgb+Yd915iL3udB1uFgS3B8YCx66UVHq018DAVFoee7x+gxggeA== - dependencies: - is-descriptor "^1.0.0" - -define-property@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/define-property/-/define-property-2.0.2.tgz#d459689e8d654ba77e02a817f8710d702cb16e9d" - integrity sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ== - dependencies: - is-descriptor "^1.0.2" - isobject "^3.0.1" - -del@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/del/-/del-6.0.0.tgz#0b40d0332cea743f1614f818be4feb717714c952" - integrity sha512-1shh9DQ23L16oXSZKB2JxpL7iMy2E0S9d517ptA1P8iw0alkPtQcrKH7ru31rYtKwF499HkTu+DRzq3TCKDFRQ== - dependencies: - globby "^11.0.1" - graceful-fs "^4.2.4" - is-glob "^4.0.1" - is-path-cwd "^2.2.0" - is-path-inside "^3.0.2" - p-map "^4.0.0" - rimraf "^3.0.2" - slash "^3.0.0" - -delayed-stream@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" - integrity sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ== - -delegates@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a" - integrity sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ== - -denque@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/denque/-/denque-2.0.1.tgz#bcef4c1b80dc32efe97515744f21a4229ab8934a" - integrity sha512-tfiWc6BQLXNLpNiR5iGd0Ocu3P3VpxfzFiqubLgMfhfOw9WyvgJBd46CClNn9k3qfbjvT//0cf7AlYRX/OslMQ== - -depd@^1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9" - integrity sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ== - -deprecation@^2.0.0, deprecation@^2.3.1: - version "2.3.1" - resolved "https://registry.yarnpkg.com/deprecation/-/deprecation-2.3.1.tgz#6368cbdb40abf3373b525ac87e4a260c3a700919" - integrity sha512-xmHIy4F3scKVwMsQ4WnVaS8bHOx0DmVwRywosKhaILI0ywMDWPtBSku2HNxRvF7jtwDRsoEwYQSfbxj8b7RlJQ== - -detect-indent@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/detect-indent/-/detect-indent-5.0.0.tgz#3871cc0a6a002e8c3e5b3cf7f336264675f06b9d" - integrity sha1-OHHMCmoALow+Wzz38zYmRnXwa50= - -detect-indent@^6.0.0: - version "6.1.0" - resolved "https://registry.yarnpkg.com/detect-indent/-/detect-indent-6.1.0.tgz#592485ebbbf6b3b1ab2be175c8393d04ca0d57e6" - integrity sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA== - -detect-libc@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-2.0.1.tgz#e1897aa88fa6ad197862937fbc0441ef352ee0cd" - integrity sha512-463v3ZeIrcWtdgIg6vI6XUncguvr2TnGl4SzDXinkt9mSLpBJKXT3mW6xT3VQdDN11+WVs29pgvivTc4Lp8v+w== - -detect-newline@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/detect-newline/-/detect-newline-3.1.0.tgz#576f5dfc63ae1a192ff192d8ad3af6308991b651" - integrity sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA== - -dezalgo@^1.0.0: - version "1.0.3" - resolved "https://registry.yarnpkg.com/dezalgo/-/dezalgo-1.0.3.tgz#7f742de066fc748bc8db820569dddce49bf0d456" - integrity sha1-f3Qt4Gb8dIvI24IFad3c5Jvw1FY= - dependencies: - asap "^2.0.0" - wrappy "1" - -dictionary-en-gb@^2.0.0: - version "2.2.2" - resolved "https://registry.yarnpkg.com/dictionary-en-gb/-/dictionary-en-gb-2.2.2.tgz#836ffaf70080977fdceb6ad769b5d22d1106c9c0" - integrity sha512-36Pz/2BGmJfXtAo5+IGOi+U6gwtxFsFXFJMOX0FC1z2YeLd1IXkxsfAhieC06OrdGie3SqCZmUOYeYgct5Hzzw== - -dictionary-en@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/dictionary-en/-/dictionary-en-3.1.0.tgz#2883598f02c9ccfb8acf7aa513797b50eeec77d2" - integrity sha512-dNjhoQagh7GX3YUBdbzehy/+wR2GLhkdpkxF8wMEGIXxMrH6aqzMn/8CHP5xnF85qbv288gCt4XtPQEVCOmTeA== - -diff-match-patch@^1.0.0: - version "1.0.5" - resolved "https://registry.yarnpkg.com/diff-match-patch/-/diff-match-patch-1.0.5.tgz#abb584d5f10cd1196dfc55aa03701592ae3f7b37" - integrity sha512-IayShXAgj/QMXgB0IWmKx+rOPuGMhqm5w6jvFxmVenXKIzRqTAAsbBPT3kWQeGANj3jGgvcvv4yK6SxqYmikgw== - -diff-sequences@^26.6.2: - version "26.6.2" - resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-26.6.2.tgz#48ba99157de1923412eed41db6b6d4aa9ca7c0b1" - integrity sha512-Mv/TDa3nZ9sbc5soK+OoA74BsS3mL37yixCvUAQkiuA4Wz6YtwP/K47n2rv2ovzHZvoiQeA5FTQOschKkEwB0Q== - -diff@3.5.0, diff@^3.5.0: - version "3.5.0" - resolved "https://registry.yarnpkg.com/diff/-/diff-3.5.0.tgz#800c0dd1e0a8bfbc95835c202ad220fe317e5a12" - integrity sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA== - -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" - -dockerfile-ast@0.4.1: - version "0.4.1" - resolved "https://registry.yarnpkg.com/dockerfile-ast/-/dockerfile-ast-0.4.1.tgz#3fc30f41c99c6e75c3bffe4970b9c75e73e31eed" - integrity sha512-qM5/m+Ez4GOM3ILkG13+cPxwgIcuA/z3LmEPZf4VJ82f7T1DuVbz7ctw4IzWdbiecuXcs+C4fFVbo5priGnIIQ== - dependencies: - vscode-languageserver-textdocument "^1.0.1" - vscode-languageserver-types "^3.17.0-next.3" - -dockerfile-language-server-nodejs@^0.7.1: - version "0.7.3" - resolved "https://registry.yarnpkg.com/dockerfile-language-server-nodejs/-/dockerfile-language-server-nodejs-0.7.3.tgz#784c526b501a3fd80232f17ae21dfca7e0d5a876" - integrity sha512-+fY8JCuoL3T698EZKd78SF1RrGBGYZVRzRDLrWHaum3qx5gW8uMDX41rtaehX7/ZNH/WSuwyFtWh3/JWmjEAKw== - dependencies: - dockerfile-language-service "0.7.4" - dockerfile-utils "0.9.3" - vscode-languageserver "^8.0.0-next.2" - -dockerfile-language-service@0.7.4: - version "0.7.4" - resolved "https://registry.yarnpkg.com/dockerfile-language-service/-/dockerfile-language-service-0.7.4.tgz#0a171d916b0d0f27b7feab5b5fd10a16654f1a1c" - integrity sha512-SxKqTMQshN6xr20qTeurUydI432+ZUrkfhMurknjPvhdTc5oheH+WeN1cqKKQrILlcVq7agbFlXH51sdempuGQ== - dependencies: - dockerfile-ast "0.4.1" - dockerfile-utils "0.9.3" - vscode-languageserver-types "3.17.0-next.3" - -dockerfile-utils@0.9.3: - version "0.9.3" - resolved "https://registry.yarnpkg.com/dockerfile-utils/-/dockerfile-utils-0.9.3.tgz#73a418737bf1c291bbe6bbf4860208fbf620aefd" - integrity sha512-tMPdbywzglQh7JieKL1vn7HyJoYwk8J8AyfyLaqkLJ5tRA/TSrOVK6R40C3bwEceYg875crMo8yHSkz09Fc6VA== - dependencies: - dockerfile-ast "0.4.1" - vscode-languageserver-textdocument "^1.0.1" - vscode-languageserver-types "^3.17.0-next.3" - -doctrine@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-2.1.0.tgz#5cd01fc101621b42c4cd7f5d1a66243716d3f39d" - integrity sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw== - dependencies: - esutils "^2.0.2" - -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" - -dom-helpers@^3.4.0: - version "3.4.0" - resolved "https://registry.yarnpkg.com/dom-helpers/-/dom-helpers-3.4.0.tgz#e9b369700f959f62ecde5a6babde4bccd9169af8" - integrity sha512-LnuPJ+dwqKDIyotW1VzmOZ5TONUN7CwkCR5hrgawTUbkBGYdeoNLZo6nNfGkCrjtE1nXXaj7iMMpDa8/d9WoIA== - dependencies: - "@babel/runtime" "^7.1.2" - -dom-serializer@^1.0.1: - version "1.4.1" - resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-1.4.1.tgz#de5d41b1aea290215dc45a6dae8adcf1d32e2d30" - integrity sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag== - dependencies: - domelementtype "^2.0.1" - domhandler "^4.2.0" - entities "^2.0.0" - -dom4@^2.1.5: - version "2.1.6" - resolved "https://registry.yarnpkg.com/dom4/-/dom4-2.1.6.tgz#c90df07134aa0dbd81ed4d6ba1237b36fc164770" - integrity sha512-JkCVGnN4ofKGbjf5Uvc8mmxaATIErKQKSgACdBXpsQ3fY6DlIpAyWfiBSrGkttATssbDCp3psiAKWXk5gmjycA== - -domelementtype@^2.0.1, domelementtype@^2.2.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-2.3.0.tgz#5c45e8e869952626331d7aab326d01daf65d589d" - integrity sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw== - -domexception@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/domexception/-/domexception-2.0.1.tgz#fb44aefba793e1574b0af6aed2801d057529f304" - integrity sha512-yxJ2mFy/sibVQlu5qHjOkf9J3K6zgmCxgJ94u2EdvDOV09H+32LtRswEcUsmUWN72pVLOEnTSRaIVVzVQgS0dg== - dependencies: - webidl-conversions "^5.0.0" - -domhandler@^4.0.0, domhandler@^4.2.0: - version "4.3.1" - resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-4.3.1.tgz#8d792033416f59d68bc03a5aa7b018c1ca89279c" - integrity sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ== - dependencies: - domelementtype "^2.2.0" - -domino@^2.1.6: - version "2.1.6" - resolved "https://registry.yarnpkg.com/domino/-/domino-2.1.6.tgz#fe4ace4310526e5e7b9d12c7de01b7f485a57ffe" - integrity sha512-3VdM/SXBZX2omc9JF9nOPCtDaYQ67BGp5CoLpIQlO2KCAPETs8TcDHacF26jXadGbvUteZzRTeos2fhID5+ucQ== - -domutils@^2.5.2: - version "2.8.0" - resolved "https://registry.yarnpkg.com/domutils/-/domutils-2.8.0.tgz#4437def5db6e2d1f5d6ee859bd95ca7d02048135" - integrity sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A== - dependencies: - dom-serializer "^1.0.1" - domelementtype "^2.2.0" - domhandler "^4.2.0" - -dot-prop@^5.1.0: - version "5.3.0" - resolved "https://registry.yarnpkg.com/dot-prop/-/dot-prop-5.3.0.tgz#90ccce708cd9cd82cc4dc8c3ddd9abdd55b20e88" - integrity sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q== - dependencies: - is-obj "^2.0.0" - -dot-prop@^6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/dot-prop/-/dot-prop-6.0.1.tgz#fc26b3cf142b9e59b74dbd39ed66ce620c681083" - integrity sha512-tE7ztYzXHIeyvc7N+hR3oi7FIbf/NIjVP9hmAt3yMXzrQ072/fpjGLx2GxNxGxUl5V73MEqYzioOMoVhGMJ5cA== - dependencies: - is-obj "^2.0.0" - -dotenv@~10.0.0: - version "10.0.0" - resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-10.0.0.tgz#3d4227b8fb95f81096cdd2b66653fb2c7085ba81" - integrity sha512-rlBi9d8jpv9Sf1klPjNfFAuWDjKLwTIJJ/VxtoTwIR6hnZxcEOQCZg2oIL3MWBYw5GpUDKOEnND7LXTbIpQ03Q== - -duplexer@^0.1.1: - version "0.1.2" - resolved "https://registry.yarnpkg.com/duplexer/-/duplexer-0.1.2.tgz#3abe43aef3835f8ae077d136ddce0f276b0400e6" - integrity sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg== - -duplexify@^4.0.0, duplexify@^4.1.1: - version "4.1.2" - resolved "https://registry.yarnpkg.com/duplexify/-/duplexify-4.1.2.tgz#18b4f8d28289132fa0b9573c898d9f903f81c7b0" - integrity sha512-fz3OjcNCHmRP12MJoZMPglx8m4rrFP8rovnk4vT8Fs+aonZoCwGg10dSsQsfP/E62eZcPTMSMP6686fu9Qlqtw== - dependencies: - end-of-stream "^1.4.1" - inherits "^2.0.3" - readable-stream "^3.1.1" - stream-shift "^1.0.0" - -duplicate-package-checker-webpack-plugin@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/duplicate-package-checker-webpack-plugin/-/duplicate-package-checker-webpack-plugin-3.0.0.tgz#78bb89e625fa7cf8c2a59c53f62b495fda9ba287" - integrity sha512-aO50/qPC7X2ChjRFniRiscxBLT/K01bALqfcDaf8Ih5OqQ1N4iT/Abx9Ofu3/ms446vHTm46FACIuJUmgUQcDQ== - dependencies: - chalk "^2.3.0" - find-root "^1.0.0" - lodash "^4.17.4" - semver "^5.4.1" - -ecdsa-sig-formatter@1.0.11, ecdsa-sig-formatter@^1.0.11: - version "1.0.11" - resolved "https://registry.yarnpkg.com/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz#ae0f0fa2d85045ef14a817daa3ce9acd0489e5bf" - integrity sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ== - dependencies: - safe-buffer "^5.0.1" - -ejs@^3.1.7: - version "3.1.8" - resolved "https://registry.npmjs.org/ejs/-/ejs-3.1.8.tgz#758d32910c78047585c7ef1f92f9ee041c1c190b" - integrity sha512-/sXZeMlhS0ArkfX2Aw780gJzXSMPnKjtspYZv+f3NiKLlubezAHDU5+9xz6gd3/NhG3txQCo6xlglmTS+oTGEQ== - dependencies: - jake "^10.8.5" - -electron-to-chromium@^1.4.284: - version "1.4.328" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.328.tgz#b4565ffa502542b561cea16086d6d9b916c7095a" - integrity sha512-DE9tTy2PNmy1v55AZAO542ui+MLC2cvINMK4P2LXGsJdput/ThVG9t+QGecPuAZZSgC8XoI+Jh9M1OG9IoNSCw== - -emittery@^0.7.1: - version "0.7.2" - resolved "https://registry.yarnpkg.com/emittery/-/emittery-0.7.2.tgz#25595908e13af0f5674ab419396e2fb394cdfa82" - integrity sha512-A8OG5SR/ij3SsJdWDJdkkSYUjQdCUx6APQXem0SaEePBSRg4eymGYwBkKo1Y6DU+af/Jn2dBQqDBvjnr9Vi8nQ== - -emoji-regex@^7.0.1: - version "7.0.3" - resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-7.0.3.tgz#933a04052860c85e83c122479c4748a8e4c72156" - integrity sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA== - -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== - -emojis-list@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/emojis-list/-/emojis-list-3.0.0.tgz#5570662046ad29e2e916e71aae260abdff4f6a78" - integrity sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q== - -encoding-down@^6.3.0: - version "6.3.0" - resolved "https://registry.yarnpkg.com/encoding-down/-/encoding-down-6.3.0.tgz#b1c4eb0e1728c146ecaef8e32963c549e76d082b" - integrity sha512-QKrV0iKR6MZVJV08QY0wp1e7vF6QbhnbQhb07bwpEyuz4uZiZgPlEGdkCROuFkUwdxlFaiPIhjyarH1ee/3vhw== - dependencies: - abstract-leveldown "^6.2.1" - inherits "^2.0.3" - level-codec "^9.0.0" - level-errors "^2.0.0" - -encoding@^0.1.12, encoding@^0.1.13: - version "0.1.13" - resolved "https://registry.yarnpkg.com/encoding/-/encoding-0.1.13.tgz#56574afdd791f54a8e9b2785c0582a2d26210fa9" - integrity sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A== - dependencies: - iconv-lite "^0.6.2" - -end-of-stream@^1.1.0, end-of-stream@^1.4.1: - version "1.4.4" - resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0" - integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q== - dependencies: - once "^1.4.0" - -enhanced-resolve@^5.10.0: - version "5.12.0" - resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-5.12.0.tgz#300e1c90228f5b570c4d35babf263f6da7155634" - integrity sha512-QHTXI/sZQmko1cbDoNAa3mJ5qhWUUNAq3vR0/YiD379fWQrcfuoX1+HW2S0MTt7XmoPLapdaDKUtelUSPic7hQ== - dependencies: - graceful-fs "^4.2.4" - tapable "^2.2.0" - -enquirer@~2.3.6: - 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" - -ent@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/ent/-/ent-2.2.0.tgz#e964219325a21d05f44466a2f686ed6ce5f5dd1d" - integrity sha1-6WQhkyWiHQX0RGai9obtbOX13R0= - -entities@^2.0.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/entities/-/entities-2.2.0.tgz#098dc90ebb83d8dffa089d55256b351d34c4da55" - integrity sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A== - -env-paths@^2.2.0: - version "2.2.1" - resolved "https://registry.yarnpkg.com/env-paths/-/env-paths-2.2.1.tgz#420399d416ce1fbe9bc0a07c62fa68d67fd0f8f2" - integrity sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A== - -envinfo@^7.7.3, envinfo@^7.7.4: - version "7.8.1" - resolved "https://registry.yarnpkg.com/envinfo/-/envinfo-7.8.1.tgz#06377e3e5f4d379fea7ac592d5ad8927e0c4d475" - integrity sha512-/o+BXHmB7ocbHEAs6F2EnG0ogybVVUdkRunTT2glZU9XAaGmhqskrvKwqXuDfNjEO0LZKWdejEEpnq8aM0tOaw== - -err-code@^2.0.2: - version "2.0.3" - resolved "https://registry.yarnpkg.com/err-code/-/err-code-2.0.3.tgz#23c2f3b756ffdfc608d30e27c9a941024807e7f9" - integrity sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA== - -errno@~0.1.1: - version "0.1.8" - resolved "https://registry.yarnpkg.com/errno/-/errno-0.1.8.tgz#8bb3e9c7d463be4976ff888f76b4809ebc2e811f" - integrity sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A== - dependencies: - prr "~1.0.1" - -error-ex@^1.3.1: - version "1.3.2" - resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf" - integrity sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g== - dependencies: - is-arrayish "^0.2.1" - -es-abstract@^1.17.0-next.1, es-abstract@^1.18.0-next.1, es-abstract@^1.19.0, es-abstract@^1.20.4: - version "1.20.5" - resolved "https://registry.npmjs.org/es-abstract/-/es-abstract-1.20.5.tgz#e6dc99177be37cacda5988e692c3fa8b218e95d2" - integrity sha512-7h8MM2EQhsCA7pU/Nv78qOXFpD8Rhqd12gYiSJVkrH9+e8VuA8JlPJK/hQjjlLv6pJvx/z1iRFKzYb0XT/RuAQ== - dependencies: - call-bind "^1.0.2" - es-to-primitive "^1.2.1" - function-bind "^1.1.1" - function.prototype.name "^1.1.5" - get-intrinsic "^1.1.3" - get-symbol-description "^1.0.0" - gopd "^1.0.1" - has "^1.0.3" - has-property-descriptors "^1.0.0" - has-symbols "^1.0.3" - internal-slot "^1.0.3" - is-callable "^1.2.7" - is-negative-zero "^2.0.2" - is-regex "^1.1.4" - is-shared-array-buffer "^1.0.2" - is-string "^1.0.7" - is-weakref "^1.0.2" - object-inspect "^1.12.2" - object-keys "^1.1.1" - object.assign "^4.1.4" - regexp.prototype.flags "^1.4.3" - safe-regex-test "^1.0.0" - string.prototype.trimend "^1.0.6" - string.prototype.trimstart "^1.0.6" - unbox-primitive "^1.0.2" - -es-module-lexer@^0.9.0: - version "0.9.3" - resolved "https://registry.yarnpkg.com/es-module-lexer/-/es-module-lexer-0.9.3.tgz#6f13db00cc38417137daf74366f535c8eb438f19" - integrity sha512-1HQ2M2sPtxwnvOvT1ZClHyQDiggdNjURWpY2we6aMKCQiUVxTmVs2UYPLIrD84sS+kMdUwfBSylbJPwNnBrnHQ== - -es-shim-unscopables@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.0.tgz#702e632193201e3edf8713635d083d378e510241" - integrity sha512-Jm6GPcCdC30eMLbZ2x8z2WuRwAws3zTBBKuusffYVUrNj/GVSUAZ+xKMaUpfNDR5IbyNA5LJbaecoUVbmUcB1w== - dependencies: - has "^1.0.3" - -es-to-primitive@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.2.1.tgz#e55cd4c9cdc188bcefb03b366c736323fc5c898a" - integrity sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA== - dependencies: - is-callable "^1.1.4" - is-date-object "^1.0.1" - is-symbol "^1.0.2" - -es5-ext@^0.10.35, es5-ext@^0.10.45, es5-ext@^0.10.46, es5-ext@^0.10.50, es5-ext@~0.10.14, es5-ext@~0.10.2, es5-ext@~0.10.46: - version "0.10.62" - resolved "https://registry.yarnpkg.com/es5-ext/-/es5-ext-0.10.62.tgz#5e6adc19a6da524bf3d1e02bbc8960e5eb49a9a5" - integrity sha512-BHLqn0klhEpnOKSrzn/Xsz2UIW8j+cGmo9JLzr8BiUapV8hPL9+FliFqjwr9ngW7jWdnxv6eO+/LqyhJVqgrjA== - dependencies: - es6-iterator "^2.0.3" - es6-symbol "^3.1.3" - next-tick "^1.1.0" - -es6-iterator@^2.0.3: - version "2.0.3" - resolved "https://registry.yarnpkg.com/es6-iterator/-/es6-iterator-2.0.3.tgz#a7de889141a05a94b0854403b2d0a0fbfa98f3b7" - integrity sha512-zw4SRzoUkd+cl+ZoE15A9o1oQd920Bb0iOJMQkQhl3jNc03YqVjAhG7scf9C5KWRU/R13Orf588uCC6525o02g== - dependencies: - d "1" - es5-ext "^0.10.35" - es6-symbol "^3.1.1" - -es6-promise@^4.0.3: - version "4.2.8" - resolved "https://registry.yarnpkg.com/es6-promise/-/es6-promise-4.2.8.tgz#4eb21594c972bc40553d276e510539143db53e0a" - integrity sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w== - -es6-promisify@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/es6-promisify/-/es6-promisify-5.0.0.tgz#5109d62f3e56ea967c4b63505aef08291c8a5203" - integrity sha1-UQnWLz5W6pZ8S2NQWu8IKRyKUgM= - dependencies: - es6-promise "^4.0.3" - -es6-symbol@^3.1.1, es6-symbol@^3.1.3: - version "3.1.3" - resolved "https://registry.yarnpkg.com/es6-symbol/-/es6-symbol-3.1.3.tgz#bad5d3c1bcdac28269f4cb331e431c78ac705d18" - integrity sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA== - dependencies: - d "^1.0.1" - ext "^1.1.2" - -es6-templates@^0.2.3: - version "0.2.3" - resolved "https://registry.yarnpkg.com/es6-templates/-/es6-templates-0.2.3.tgz#5cb9ac9fb1ded6eb1239342b81d792bbb4078ee4" - integrity sha512-sziUVwcvQ+lOsrTyUY0Q11ilAPj+dy7AQ1E1MgSaHTaaAFTffaa08QSlGNU61iyVaroyb6nYdBV6oD7nzn6i8w== - dependencies: - recast "~0.11.12" - through "~2.3.6" - -es6-weak-map@^2.0.2: - version "2.0.3" - resolved "https://registry.yarnpkg.com/es6-weak-map/-/es6-weak-map-2.0.3.tgz#b6da1f16cc2cc0d9be43e6bdbfc5e7dfcdf31d53" - integrity sha512-p5um32HOTO1kP+w7PRnB+5lQ43Z6muuMuIMffvDN8ZB4GcnjLBV6zGStpbASIMk4DCAvEaamhe2zhyCb/QXXsA== - dependencies: - d "1" - es5-ext "^0.10.46" - es6-iterator "^2.0.3" - es6-symbol "^3.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@1.0.5, 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 sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg== - -escape-string-regexp@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz#a30304e99daa32e23b2fd20f51babd07cffca344" - integrity sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w== - -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== - -escodegen@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-2.0.0.tgz#5e32b12833e8aa8fa35e1bf0befa89380484c7dd" - integrity sha512-mmHKys/C8BFUGI+MAWNcSYoORYLMdPzjrknd2Vc+bUsjN5bXcr8EhrNB+UTqfL1y3I9c4fw2ihgtMPQLBRiQxw== - dependencies: - esprima "^4.0.1" - estraverse "^5.2.0" - esutils "^2.0.2" - optionator "^0.8.1" - optionalDependencies: - source-map "~0.6.1" - -eslint-config-prettier@^8.5.0: - version "8.5.0" - resolved "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.5.0.tgz#5a81680ec934beca02c7b1a61cf8ca34b66feab1" - integrity sha512-obmWKLUNCnhtQRKc+tmnYuQl0pFU1ibYJQ5BGhTVB08bHe9wC8qUeG7c08dj9XX+AuPj1YSGSQIHl1pnDHZR0Q== - -eslint-import-resolver-node@^0.3.6: - version "0.3.6" - resolved "https://registry.yarnpkg.com/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.6.tgz#4048b958395da89668252001dbd9eca6b83bacbd" - integrity sha512-0En0w03NRVMn9Uiyn8YRPDKvWjxCWkslUEhGNTdGx15RvPJYQ+lbOlqrlNI2vEAs4pDYK4f/HN2TbDmk5TP0iw== - dependencies: - debug "^3.2.7" - resolve "^1.20.0" - -eslint-module-utils@^2.7.3: - version "2.7.4" - resolved "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.7.4.tgz#4f3e41116aaf13a20792261e61d3a2e7e0583974" - integrity sha512-j4GT+rqzCoRKHwURX7pddtIPGySnX9Si/cgMI5ztrcqOPtk5dDEeZ34CQVPphnqkJytlc97Vuk05Um2mJ3gEQA== - dependencies: - debug "^3.2.7" - -eslint-plugin-import@^2.26.0: - version "2.26.0" - resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.26.0.tgz#f812dc47be4f2b72b478a021605a59fc6fe8b88b" - integrity sha512-hYfi3FXaM8WPLf4S1cikh/r4IxnO6zrhZbEGz2b660EJRbuxgpDS5gkCuYgGWg2xxh2rBuIr4Pvhve/7c31koA== - dependencies: - array-includes "^3.1.4" - array.prototype.flat "^1.2.5" - debug "^2.6.9" - doctrine "^2.1.0" - eslint-import-resolver-node "^0.3.6" - eslint-module-utils "^2.7.3" - has "^1.0.3" - is-core-module "^2.8.1" - is-glob "^4.0.3" - minimatch "^3.1.2" - object.values "^1.1.5" - resolve "^1.22.0" - tsconfig-paths "^3.14.1" - -eslint-plugin-jest@^27.1.6: - version "27.1.6" - resolved "https://registry.npmjs.org/eslint-plugin-jest/-/eslint-plugin-jest-27.1.6.tgz#361d943f07d1978838e6b852c44a579f3879e332" - integrity sha512-XA7RFLSrlQF9IGtAmhddkUkBuICCTuryfOTfCSWcZHiHb69OilIH05oozH2XA6CEOtztnOd0vgXyvxZodkxGjg== - dependencies: - "@typescript-eslint/utils" "^5.10.0" - -eslint-plugin-prettier@^4.2.1: - version "4.2.1" - resolved "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-4.2.1.tgz#651cbb88b1dab98bfd42f017a12fa6b2d993f94b" - integrity sha512-f/0rXLXUt0oFYs8ra4w49wYZBG5GKZpAYsJSm6rnYL5uVDjd+zowwMwVZHnAjf4edNrKpCDYfXDgmRE/Ak7QyQ== - dependencies: - prettier-linter-helpers "^1.0.0" - -eslint-plugin-react@^7.31.11: - version "7.31.11" - resolved "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.31.11.tgz#011521d2b16dcf95795df688a4770b4eaab364c8" - integrity sha512-TTvq5JsT5v56wPa9OYHzsrOlHzKZKjV+aLgS+55NJP/cuzdiQPC7PfYoUjMoxlffKtvijpk7vA/jmuqRb9nohw== - dependencies: - array-includes "^3.1.6" - array.prototype.flatmap "^1.3.1" - array.prototype.tosorted "^1.1.1" - doctrine "^2.1.0" - estraverse "^5.3.0" - jsx-ast-utils "^2.4.1 || ^3.0.0" - minimatch "^3.1.2" - object.entries "^1.1.6" - object.fromentries "^2.0.6" - object.hasown "^1.1.2" - object.values "^1.1.6" - prop-types "^15.8.1" - resolve "^2.0.0-next.3" - semver "^6.3.0" - string.prototype.matchall "^4.0.8" - -eslint-scope@5.1.1, 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-scope@^7.1.1: - version "7.1.1" - resolved "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.1.tgz#fff34894c2f65e5226d3041ac480b4513a163642" - integrity sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw== - dependencies: - esrecurse "^4.3.0" - estraverse "^5.2.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@^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@^3.3.0: - version "3.3.0" - resolved "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz#f6480fa6b1f30efe2d1968aa8ac745b862469826" - integrity sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA== - -eslint@^8.29.0: - version "8.29.0" - resolved "https://registry.npmjs.org/eslint/-/eslint-8.29.0.tgz#d74a88a20fb44d59c51851625bc4ee8d0ec43f87" - integrity sha512-isQ4EEiyUjZFbEKvEGJKKGBwXtvXX+zJbkVKCgTuB9t/+jUBcy8avhkEwWJecI15BkRkOYmvIM5ynbhRjEkoeg== - dependencies: - "@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" - debug "^4.3.2" - 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" - 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" - 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" - levn "^0.4.1" - lodash.merge "^4.6.2" - 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" - -espree@^9.4.0: - version "9.4.1" - resolved "https://registry.npmjs.org/espree/-/espree-9.4.1.tgz#51d6092615567a2c2cff7833445e37c28c0065bd" - integrity sha512-XwctdmTO6SIvCzd9810yyNzIrOrqNYV9Koizx4C/mRhf9uq0o4yHoCEU/670pOxOL/MSraektvSAji79kX90Vg== - dependencies: - acorn "^8.8.0" - acorn-jsx "^5.3.2" - eslint-visitor-keys "^3.3.0" - -esprima@^4.0.0, esprima@^4.0.1, 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== - -esprima@~3.1.0: - version "3.1.3" - resolved "https://registry.yarnpkg.com/esprima/-/esprima-3.1.3.tgz#fdca51cee6133895e3c88d535ce49dbff62a4633" - integrity sha512-AWwVMNxwhN8+NIPQzAQZCm7RkLC4RbM3B1OobMuyp3i+w73X57KCKaVIxaRZb+DYCojq7rspo+fmuQfAboyhFg== - -esquery@^1.0.1, 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, estraverse@^5.3.0: - version "5.3.0" - resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.3.0.tgz#2eea5290702f26ab8fe5370370ff86c965d21123" - integrity sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA== - -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== - -event-emitter@^0.3.5: - version "0.3.5" - resolved "https://registry.yarnpkg.com/event-emitter/-/event-emitter-0.3.5.tgz#df8c69eef1647923c7157b9ce83840610b02cc39" - integrity sha512-D9rRn9y7kLPnJ+hMq7S/nhvoKwwvVJahBi2BPmx3bvbsEdK3W9ii8cBSGjP+72/LnM4n6fo3+dkCX5FeTQruXA== - dependencies: - d "1" - es5-ext "~0.10.14" - -event-target-shim@^5.0.0: - version "5.0.1" - resolved "https://registry.yarnpkg.com/event-target-shim/-/event-target-shim-5.0.1.tgz#5d4d3ebdf9583d63a5333ce2deb7480ab2b05789" - integrity sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ== - -eventemitter3@^4.0.4: - version "4.0.7" - resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-4.0.7.tgz#2de9b68f6528d5644ef5c59526a1b4a07306169f" - integrity sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw== - -events@^3.0.0, events@^3.2.0: - version "3.3.0" - resolved "https://registry.yarnpkg.com/events/-/events-3.3.0.tgz#31a95ad0a924e2d2c419a813aeb2c4e878ea7400" - integrity sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q== - -exec-sh@^0.3.2: - version "0.3.6" - resolved "https://registry.yarnpkg.com/exec-sh/-/exec-sh-0.3.6.tgz#ff264f9e325519a60cb5e273692943483cca63bc" - integrity sha512-nQn+hI3yp+oD0huYhKwvYI32+JFeq+XkNcD1GAo3Y/MjxsfVGmrrzrnzjWiNY6f+pUCP440fThsFh5gZrRAU/w== - -execa@^0.9.0: - version "0.9.0" - resolved "https://registry.yarnpkg.com/execa/-/execa-0.9.0.tgz#adb7ce62cf985071f60580deb4a88b9e34712d01" - integrity sha512-BbUMBiX4hqiHZUA5+JujIjNb6TyAlp2D5KLheMjMluwOuzcnylDL4AxZYLLn1n2AGB49eSWwyKvvEQoRpnAtmA== - dependencies: - cross-spawn "^5.0.1" - get-stream "^3.0.0" - is-stream "^1.1.0" - npm-run-path "^2.0.0" - p-finally "^1.0.0" - signal-exit "^3.0.0" - strip-eof "^1.0.0" - -execa@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/execa/-/execa-1.0.0.tgz#c6236a5bb4df6d6f15e88e7f017798216749ddd8" - integrity sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA== - dependencies: - cross-spawn "^6.0.0" - get-stream "^4.0.0" - is-stream "^1.1.0" - npm-run-path "^2.0.0" - p-finally "^1.0.0" - signal-exit "^3.0.0" - strip-eof "^1.0.0" - -execa@^4.0.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/execa/-/execa-4.1.0.tgz#4e5491ad1572f2f17a77d388c6c857135b22847a" - integrity sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA== - dependencies: - cross-spawn "^7.0.0" - get-stream "^5.0.0" - human-signals "^1.1.1" - is-stream "^2.0.0" - merge-stream "^2.0.0" - npm-run-path "^4.0.0" - onetime "^5.1.0" - signal-exit "^3.0.2" - strip-final-newline "^2.0.0" - -execa@^5.0.0: - version "5.1.1" - resolved "https://registry.yarnpkg.com/execa/-/execa-5.1.1.tgz#f80ad9cbf4298f7bd1d4c9555c21e93741c411dd" - integrity sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg== - dependencies: - 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" - -exit@^0.1.2: - version "0.1.2" - resolved "https://registry.yarnpkg.com/exit/-/exit-0.1.2.tgz#0632638f8d877cc82107d30a0fff1a17cba1cd0c" - integrity sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ== - -expand-brackets@^2.1.4: - version "2.1.4" - resolved "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-2.1.4.tgz#b77735e315ce30f6b6eff0f83b04151a22449622" - integrity sha512-w/ozOKR9Obk3qoWeY/WDi6MFta9AoMR+zud60mdnbniMcBxRuFJyDt2LdX/14A1UABeqk+Uk+LDfUpvoGKppZA== - dependencies: - debug "^2.3.3" - define-property "^0.2.5" - extend-shallow "^2.0.1" - posix-character-classes "^0.1.0" - regex-not "^1.0.0" - snapdragon "^0.8.1" - to-regex "^3.0.1" - -expect@^26.6.2: - version "26.6.2" - resolved "https://registry.yarnpkg.com/expect/-/expect-26.6.2.tgz#c6b996bf26bf3fe18b67b2d0f51fc981ba934417" - integrity sha512-9/hlOBkQl2l/PLHJx6JjoDF6xPKcJEsUlWKb23rKE7KzeDqUZKXKNMW27KIue5JMdBV9HgmoJPcc8HtO85t9IA== - dependencies: - "@jest/types" "^26.6.2" - ansi-styles "^4.0.0" - jest-get-type "^26.3.0" - jest-matcher-utils "^26.6.2" - jest-message-util "^26.6.2" - jest-regex-util "^26.0.0" - -ext@^1.1.2: - version "1.6.0" - resolved "https://registry.yarnpkg.com/ext/-/ext-1.6.0.tgz#3871d50641e874cc172e2b53f919842d19db4c52" - integrity sha512-sdBImtzkq2HpkdRLtlLWDa6w4DX22ijZLKx8BMPUuKe1c5lbN6xwQDQCxSfxBQnHZ13ls/FH0MQZx/q/gr6FQg== - dependencies: - type "^2.5.0" - -extend-shallow@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-2.0.1.tgz#51af7d614ad9a9f610ea1bafbb989d6b1c56890f" - integrity sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug== - dependencies: - is-extendable "^0.1.0" - -extend-shallow@^3.0.0, extend-shallow@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-3.0.2.tgz#26a71aaf073b39fb2127172746131c2704028db8" - integrity sha512-BwY5b5Ql4+qZoefgMj2NUmx+tehVTH/Kf4k1ZEtOHNFcm2wSxMRo992l6X3TIgni2eZVTZ85xMOjF31fwZAj6Q== - dependencies: - assign-symbols "^1.0.0" - is-extendable "^1.0.1" - -extend@^3.0.0, extend@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa" - integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g== - -external-editor@^3.0.3: - version "3.1.0" - resolved "https://registry.yarnpkg.com/external-editor/-/external-editor-3.1.0.tgz#cb03f740befae03ea4d283caed2741a83f335495" - integrity sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew== - dependencies: - chardet "^0.7.0" - iconv-lite "^0.4.24" - tmp "^0.0.33" - -extglob@^2.0.4: - version "2.0.4" - resolved "https://registry.yarnpkg.com/extglob/-/extglob-2.0.4.tgz#ad00fe4dc612a9232e8718711dc5cb5ab0285543" - integrity sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw== - dependencies: - array-unique "^0.3.2" - define-property "^1.0.0" - expand-brackets "^2.1.4" - extend-shallow "^2.0.1" - fragment-cache "^0.2.1" - regex-not "^1.0.0" - snapdragon "^0.8.1" - to-regex "^3.0.1" - -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-diff@^1.1.2: - version "1.2.0" - resolved "https://registry.yarnpkg.com/fast-diff/-/fast-diff-1.2.0.tgz#73ee11982d86caaf7959828d519cfe927fac5f03" - integrity sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w== - -fast-glob@3.2.12, fast-glob@^3.2.9: - version "3.2.12" - resolved "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.12.tgz#7f39ec99c2e6ab030337142da9e0c18f37afae80" - integrity sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w== - 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-glob@3.2.7: - 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.x, 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, fast-levenshtein@~2.0.6: - version "2.0.6" - resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" - integrity sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw== - -fast-text-encoding@^1.0.0: - version "1.0.3" - resolved "https://registry.yarnpkg.com/fast-text-encoding/-/fast-text-encoding-1.0.3.tgz#ec02ac8e01ab8a319af182dae2681213cfe9ce53" - integrity sha512-dtm4QZH9nZtcDt8qJiOH9fcQd1NAgi+K1O2DbE6GG1PPCK/BWfOH3idCTRQ4ImXRUOyopDEgDEnVEE7Y/2Wrig== - -fastest-levenshtein@^1.0.12: - version "1.0.16" - resolved "https://registry.yarnpkg.com/fastest-levenshtein/-/fastest-levenshtein-1.0.16.tgz#210e61b6ff181de91ea9b3d1b84fdedd47e034e5" - integrity sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg== - -fastparse@^1.1.1: - version "1.1.2" - resolved "https://registry.yarnpkg.com/fastparse/-/fastparse-1.1.2.tgz#91728c5a5942eced8531283c79441ee4122c35a9" - integrity sha512-483XLLxTVIwWK3QTrMGRqUfUpoOs/0hbQrl2oz4J0pAcm3A3bu84wxTFqGqkJzewCLdME38xJLJAxBABfQT8sQ== - -fastq@^1.6.0: - version "1.15.0" - resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.15.0.tgz#d04d07c6a2a68fe4599fea8d2e103a937fae6b3a" - integrity sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw== - dependencies: - reusify "^1.0.4" - -fb-watchman@^2.0.0: - version "2.0.2" - resolved "https://registry.yarnpkg.com/fb-watchman/-/fb-watchman-2.0.2.tgz#e9524ee6b5c77e9e5001af0f85f3adbb8623255c" - integrity sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA== - dependencies: - bser "2.1.1" - -figures@3.2.0, figures@^3.0.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/figures/-/figures-3.2.0.tgz#625c18bd293c604dc4a8ddb2febf0c88341746af" - integrity sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg== - dependencies: - escape-string-regexp "^1.0.5" - -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" - -file-loader@^6.2.0: - version "6.2.0" - resolved "https://registry.npmjs.org/file-loader/-/file-loader-6.2.0.tgz#baef7cf8e1840df325e4390b4484879480eebe4d" - integrity sha512-qo3glqyTa61Ytg4u73GultjHGjdRyig3tG6lPtyX/jOEJvHif9uB0/OCI2Kif6ctF3caQTW2G5gym21oAsI4pw== - dependencies: - loader-utils "^2.0.0" - schema-utils "^3.0.0" - -file-loader@~6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/file-loader/-/file-loader-6.0.0.tgz#97bbfaab7a2460c07bcbd72d3a6922407f67649f" - integrity sha512-/aMOAYEFXDdjG0wytpTL5YQLfZnnTmLNjn+AIrJ/6HVnTfDqLsVKUUwkDf4I4kgex36BvjuXEn/TX9B/1ESyqQ== - dependencies: - loader-utils "^2.0.0" - schema-utils "^2.6.5" - -filelist@^1.0.1: - version "1.0.4" - resolved "https://registry.npmjs.org/filelist/-/filelist-1.0.4.tgz#f78978a1e944775ff9e62e744424f215e58352b5" - integrity sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q== - dependencies: - minimatch "^5.0.1" - -fill-range@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-4.0.0.tgz#d544811d428f98eb06a63dc402d2403c328c38f7" - integrity sha512-VcpLTWqWDiTerugjj8e3+esbg+skS3M9e54UuR3iCeIDMXCLTsAH8hTSzDQU/X6/6t3eYkOKoZSef2PlU6U1XQ== - dependencies: - extend-shallow "^2.0.1" - is-number "^3.0.0" - repeat-string "^1.6.1" - to-regex-range "^2.1.0" - -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-cache-dir@^3.3.1: - version "3.3.2" - resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-3.3.2.tgz#b30c5b6eff0730731aea9bbd9dbecbd80256d64b" - integrity sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig== - dependencies: - commondir "^1.0.1" - make-dir "^3.0.2" - pkg-dir "^4.1.0" - -find-root@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/find-root/-/find-root-1.1.0.tgz#abcfc8ba76f708c42a97b3d685b7e9450bfb9ce4" - integrity sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng== - -find-up@3.0.0, find-up@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/find-up/-/find-up-3.0.0.tgz#49169f1d7993430646da61ecc5ae355c21c97b73" - integrity sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg== - dependencies: - locate-path "^3.0.0" - -find-up@^2.0.0, find-up@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/find-up/-/find-up-2.1.0.tgz#45d1b7e506c717ddd482775a2b77920a3c0c57a7" - integrity sha1-RdG35QbHF93UgndaK3eSCjwMV6c= - dependencies: - locate-path "^2.0.0" - -find-up@^4.0.0, find-up@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/find-up/-/find-up-4.1.0.tgz#97afe7d6cdc0bc5928584b7c8d7b16e8a9aa5d19" - integrity sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw== - dependencies: - locate-path "^5.0.0" - path-exists "^4.0.0" - -find-up@^5.0.0: - version "5.0.0" - resolved "https://registry.npmjs.org/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@^4.1.0: - version "4.1.1" - resolved "https://registry.yarnpkg.com/flat/-/flat-4.1.1.tgz#a392059cc382881ff98642f5da4dde0a959f309b" - integrity sha512-FmTtBsHskrU6FJ2VxCnsDb84wu9zhmO3cUX2kGFb5tuwhfXxGciiT0oRY+cck35QmG+NmGh5eLz6lLCpWTqwpA== - dependencies: - is-buffer "~2.0.3" - -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, flatted@^3.2.5: - version "3.2.5" - resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.2.5.tgz#76c8584f4fc843db64702a6bd04ab7a8bd666da3" - integrity sha512-WIWGi2L3DyTUvUrwRKgGi9TwxQMUEqPOPQBVi71R96jZXJdFskXEmf54BoZaS1kknGODoIGASGEzBUYdyMCBJg== - -follow-redirects@^1.15.0: - version "1.15.2" - resolved "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.2.tgz#b460864144ba63f2681096f274c4e57026da2c13" - integrity sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA== - -for-in@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80" - integrity sha512-7EwmXrOjyL+ChxMhmG5lnW9MPt1aIeZEwKhQzoBUdTV0N3zuwWDZYVJatDvZ2OyzPUvdIAZDsCetk3coyMfcnQ== - -form-data@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/form-data/-/form-data-3.0.1.tgz#ebd53791b78356a99af9a300d4282c4d5eb9755f" - integrity sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg== - dependencies: - asynckit "^0.4.0" - combined-stream "^1.0.8" - mime-types "^2.1.12" - -form-data@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz#93919daeaf361ee529584b9b31664dc12c9fa452" - integrity sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww== - dependencies: - asynckit "^0.4.0" - combined-stream "^1.0.8" - mime-types "^2.1.12" - -format-util@^1.0.3: - version "1.0.5" - resolved "https://registry.yarnpkg.com/format-util/-/format-util-1.0.5.tgz#1ffb450c8a03e7bccffe40643180918cc297d271" - integrity sha512-varLbTj0e0yVyRpqQhuWV+8hlePAgaoFRhNFj50BNjEIrw1/DphHSObtqwskVCPWNgzwPoQrZAbfa/SBiicNeg== - -fragment-cache@^0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/fragment-cache/-/fragment-cache-0.2.1.tgz#4290fad27f13e89be7f33799c6bc5a0abfff0d19" - integrity sha512-GMBAbW9antB8iZRHLoGw0b3HANt57diZYFO/HL1JGIC1MjKrdmhxvrJbupnVvpys0zsz7yBApXdQyfepKly2kA== - dependencies: - map-cache "^0.2.2" - -free-style@3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/free-style/-/free-style-3.1.0.tgz#4e2996029534e6b1731611d843437b9e2f473f08" - integrity sha512-vJujYSIyT30iDoaoeigNAxX4yB1RUrh+N2ZMhIElMr3BvCuGXOw7XNJMEEJkDUeamK2Rnb/IKFGKRKlTWIGRWA== - -fs-constants@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/fs-constants/-/fs-constants-1.0.0.tgz#6be0de9be998ce16af8afc24497b9ee9b7ccd9ad" - integrity sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow== - -fs-extra@^10.0.0, fs-extra@^10.0.1, fs-extra@^10.1.0: - version "10.1.0" - resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-10.1.0.tgz#02873cfbc4084dde127eaa5f9905eef2325d1abf" - integrity sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ== - dependencies: - graceful-fs "^4.2.0" - jsonfile "^6.0.1" - universalify "^2.0.0" - -fs-extra@^8.0.1: - version "8.1.0" - resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-8.1.0.tgz#49d43c45a88cd9677668cb7be1b46efdb8d2e1c0" - integrity sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g== - dependencies: - graceful-fs "^4.2.0" - jsonfile "^4.0.0" - universalify "^0.1.0" - -fs-extra@^9.0.1, fs-extra@^9.1.0: - version "9.1.0" - resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-9.1.0.tgz#5954460c764a8da2094ba3554bf839e6b9a7c86d" - integrity sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ== - dependencies: - at-least-node "^1.0.0" - graceful-fs "^4.2.0" - jsonfile "^6.0.1" - universalify "^2.0.0" - -fs-minipass@^2.0.0, fs-minipass@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-2.1.0.tgz#7f5036fdbf12c63c169190cbe4199c852271f9fb" - integrity sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg== - dependencies: - minipass "^3.0.0" - -fs.realpath@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" - integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw== - -fsevents@^2.1.2, fsevents@~2.3.2: - version "2.3.2" - resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a" - integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA== - -function-bind@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" - integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== - -function.prototype.name@^1.1.5: - version "1.1.5" - resolved "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.5.tgz#cce0505fe1ffb80503e6f9e46cc64e46a12a9621" - integrity sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA== - dependencies: - call-bind "^1.0.2" - define-properties "^1.1.3" - es-abstract "^1.19.0" - functions-have-names "^1.2.2" - -functions-have-names@^1.2.2: - version "1.2.3" - resolved "https://registry.yarnpkg.com/functions-have-names/-/functions-have-names-1.2.3.tgz#0404fe4ee2ba2f607f0e0ec3c80bae994133b834" - integrity sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ== - -fuzzy-search@3.2.1: - version "3.2.1" - resolved "https://registry.yarnpkg.com/fuzzy-search/-/fuzzy-search-3.2.1.tgz#65d5faad6bc633aee86f1898b7788dfe312ac6c9" - integrity sha512-vAcPiyomt1ioKAsAL2uxSABHJ4Ju/e4UeDM+g1OlR0vV4YhLGMNsdLNvZTpEDY4JCSt0E4hASCNM5t2ETtsbyg== - -gauge@^3.0.0: - version "3.0.2" - resolved "https://registry.yarnpkg.com/gauge/-/gauge-3.0.2.tgz#03bf4441c044383908bcfa0656ad91803259b395" - integrity sha512-+5J6MS/5XksCuXq++uFRsnUd7Ovu1XenbeuIuNRJxYWjgQbPuFhT14lAvsWfqfAmnwluf1OwMjz39HjfLPci0Q== - dependencies: - aproba "^1.0.3 || ^2.0.0" - color-support "^1.1.2" - console-control-strings "^1.0.0" - has-unicode "^2.0.1" - object-assign "^4.1.1" - signal-exit "^3.0.0" - string-width "^4.2.3" - strip-ansi "^6.0.1" - wide-align "^1.1.2" - -gauge@^4.0.3: - version "4.0.4" - resolved "https://registry.yarnpkg.com/gauge/-/gauge-4.0.4.tgz#52ff0652f2bbf607a989793d53b751bef2328dce" - integrity sha512-f9m+BEN5jkg6a0fZjleidjN51VE1X+mPFQ2DJ0uv1V39oCLCbsGe6yjbBnp7eK7z/+GAon99a3nHuqbuuthyPg== - dependencies: - aproba "^1.0.3 || ^2.0.0" - color-support "^1.1.3" - console-control-strings "^1.1.0" - has-unicode "^2.0.1" - signal-exit "^3.0.7" - string-width "^4.2.3" - strip-ansi "^6.0.1" - wide-align "^1.1.5" - -gaxios@^4.0.0: - version "4.3.2" - resolved "https://registry.yarnpkg.com/gaxios/-/gaxios-4.3.2.tgz#845827c2dc25a0213c8ab4155c7a28910f5be83f" - integrity sha512-T+ap6GM6UZ0c4E6yb1y/hy2UB6hTrqhglp3XfmU9qbLCGRYhLVV5aRPpC4EmoG8N8zOnkYCgoBz+ScvGAARY6Q== - dependencies: - abort-controller "^3.0.0" - extend "^3.0.2" - https-proxy-agent "^5.0.0" - is-stream "^2.0.0" - node-fetch "^2.6.1" - -gcp-metadata@^4.2.0: - version "4.3.1" - resolved "https://registry.yarnpkg.com/gcp-metadata/-/gcp-metadata-4.3.1.tgz#fb205fe6a90fef2fd9c85e6ba06e5559ee1eefa9" - integrity sha512-x850LS5N7V1F3UcV7PoupzGsyD6iVwTVvsh3tbXfkctZnBnjW5yu5z1/3k3SehF7TyoTIe78rJs02GMMy+LF+A== - dependencies: - gaxios "^4.0.0" - json-bigint "^1.0.0" - -generate-function@^2.3.1: - version "2.3.1" - resolved "https://registry.yarnpkg.com/generate-function/-/generate-function-2.3.1.tgz#f069617690c10c868e73b8465746764f97c3479f" - integrity sha512-eeB5GfMNeevm/GRYq20ShmsaGcmI81kIX2K9XQx5miC8KdHaC6Jm0qQ8ZNeGOi7wYB8OsdxKs+Y2oVuTFuVwKQ== - dependencies: - is-property "^1.0.2" - -gensync@^1.0.0-beta.2: - version "1.0.0-beta.2" - resolved "https://registry.yarnpkg.com/gensync/-/gensync-1.0.0-beta.2.tgz#32a6ee76c3d7f52d46b2b1ae5d93fea8580a25e0" - integrity sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg== - -get-caller-file@^2.0.1, 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 sha512-Hm0ixYtaSZ/V7C8FJrtZIuBBI+iSgL+1Aq82zSu8VQNB4S3Gk8e7Qs3VwBDJAhmRZcFqkl3tQu36g/Foh5I5ig== - -get-intrinsic@^1.0.2, get-intrinsic@^1.1.0, get-intrinsic@^1.1.1, get-intrinsic@^1.1.3: - version "1.2.0" - resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.2.0.tgz#7ad1dc0535f3a2904bba075772763e5051f6d05f" - integrity sha512-L049y6nFOuom5wGyRc3/gdTLO94dySVKRACj1RmJZBQXlbTMhtNIgkWkUHq+jYmZvKf14EW1EoJnnjbmoHij0Q== - dependencies: - function-bind "^1.1.1" - has "^1.0.3" - has-symbols "^1.0.3" - -get-package-type@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/get-package-type/-/get-package-type-0.1.0.tgz#8de2d803cff44df3bc6c456e6668b36c3926e11a" - integrity sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q== - -get-pkg-repo@^4.0.0: - version "4.2.1" - resolved "https://registry.yarnpkg.com/get-pkg-repo/-/get-pkg-repo-4.2.1.tgz#75973e1c8050c73f48190c52047c4cee3acbf385" - integrity sha512-2+QbHjFRfGB74v/pYWjd5OhU3TDIC2Gv/YKUTk/tCvAz0pkn/Mz6P3uByuBimLOcPvN2jYdScl3xGFSrx0jEcA== - dependencies: - "@hutson/parse-repository-url" "^3.0.0" - hosted-git-info "^4.0.0" - through2 "^2.0.0" - yargs "^16.2.0" - -get-port@^5.1.1: - version "5.1.1" - resolved "https://registry.yarnpkg.com/get-port/-/get-port-5.1.1.tgz#0469ed07563479de6efb986baf053dcd7d4e3193" - integrity sha512-g/Q1aTSDOxFpchXC4i8ZWvxA1lnPqx/JHqcpIw0/LX9T8x/GBbi6YnlN5nhaKIFkT8oFsscUKgDJYxfwfS6QsQ== - -get-stdin@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-7.0.0.tgz#8d5de98f15171a125c5e516643c7a6d0ea8a96f6" - integrity sha512-zRKcywvrXlXsA0v0i9Io4KDRaAw7+a1ZpjRwl9Wox8PFlVCCHra7E9c4kqXCoCM9nR5tBkaTTZRBoCm60bFqTQ== - -get-stream@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-3.0.0.tgz#8e943d1358dc37555054ecbe2edb05aa174ede14" - integrity sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ= - -get-stream@^4.0.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-4.1.0.tgz#c1b255575f3dc21d59bfc79cd3d2b46b1c3a54b5" - integrity sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w== - dependencies: - pump "^3.0.0" - -get-stream@^5.0.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-5.2.0.tgz#4966a1795ee5ace65e706c4b7beb71257d6e22d3" - integrity sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA== - dependencies: - pump "^3.0.0" - -get-stream@^6.0.0: - version "6.0.1" - resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-6.0.1.tgz#a262d8eef67aced57c2852ad6167526a43cbf7b7" - integrity sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg== - -get-symbol-description@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/get-symbol-description/-/get-symbol-description-1.0.0.tgz#7fdb81c900101fbd564dd5f1a30af5aadc1e58d6" - integrity sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw== - dependencies: - call-bind "^1.0.2" - get-intrinsic "^1.1.1" - -get-value@^2.0.3, get-value@^2.0.6: - version "2.0.6" - resolved "https://registry.yarnpkg.com/get-value/-/get-value-2.0.6.tgz#dc15ca1c672387ca76bd37ac0a395ba2042a2c28" - integrity sha512-Ln0UQDlxH1BapMu3GPtf7CuYNwRZf2gwCuPqbyG6pB8WfmFpzqcy4xtAaAMUhnNqjMKTiCPZG2oMT3YSx8U2NA== - -git-raw-commits@^2.0.8: - version "2.0.11" - resolved "https://registry.yarnpkg.com/git-raw-commits/-/git-raw-commits-2.0.11.tgz#bc3576638071d18655e1cc60d7f524920008d723" - integrity sha512-VnctFhw+xfj8Va1xtfEqCUD2XDrbAPSJx+hSrE5K7fGdjZruW7XV+QOrN7LF/RJyvspRiD2I0asWsxFp0ya26A== - dependencies: - dargs "^7.0.0" - lodash "^4.17.15" - meow "^8.0.0" - split2 "^3.0.0" - through2 "^4.0.0" - -git-remote-origin-url@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/git-remote-origin-url/-/git-remote-origin-url-2.0.0.tgz#5282659dae2107145a11126112ad3216ec5fa65f" - integrity sha1-UoJlna4hBxRaERJhEq0yFuxfpl8= - dependencies: - gitconfiglocal "^1.0.0" - pify "^2.3.0" - -git-semver-tags@^4.1.1: - version "4.1.1" - resolved "https://registry.yarnpkg.com/git-semver-tags/-/git-semver-tags-4.1.1.tgz#63191bcd809b0ec3e151ba4751c16c444e5b5780" - integrity sha512-OWyMt5zBe7xFs8vglMmhM9lRQzCWL3WjHtxNNfJTMngGym7pC1kh8sP6jevfydJ6LP3ZvGxfb6ABYgPUM0mtsA== - dependencies: - meow "^8.0.0" - semver "^6.0.0" - -git-up@^7.0.0: - version "7.0.0" - resolved "https://registry.npmjs.org/git-up/-/git-up-7.0.0.tgz#bace30786e36f56ea341b6f69adfd83286337467" - integrity sha512-ONdIrbBCFusq1Oy0sC71F5azx8bVkvtZtMJAsv+a6lz5YAmbNnLD6HAB4gptHZVLPR8S2/kVN6Gab7lryq5+lQ== - dependencies: - is-ssh "^1.4.0" - parse-url "^8.1.0" - -git-url-parse@^13.1.0: - version "13.1.0" - resolved "https://registry.npmjs.org/git-url-parse/-/git-url-parse-13.1.0.tgz#07e136b5baa08d59fabdf0e33170de425adf07b4" - integrity sha512-5FvPJP/70WkIprlUZ33bm4UAaFdjcLkJLpWft1BeZKqwR0uhhNGoKwlUaPtVb4LxCSQ++erHapRak9kWGj+FCA== - dependencies: - git-up "^7.0.0" - -gitconfiglocal@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/gitconfiglocal/-/gitconfiglocal-1.0.0.tgz#41d045f3851a5ea88f03f24ca1c6178114464b9b" - integrity sha1-QdBF84UaXqiPA/JMocYXgRRGS5s= - dependencies: - ini "^1.3.2" - -glob-parent@^5.1.1, glob-parent@^5.1.2, glob-parent@~5.1.2: - 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-parent@^6.0.2: - version "6.0.2" - resolved "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz#6d237d99083950c79290f24c7642a3de9a28f9e3" - integrity sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A== - dependencies: - is-glob "^4.0.3" - -glob-to-regexp@^0.4.1: - version "0.4.1" - resolved "https://registry.yarnpkg.com/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz#c75297087c851b9a578bd217dd59a92f59fe546e" - integrity sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw== - -glob@7.1.3: - version "7.1.3" - resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.3.tgz#3960832d3f1574108342dafd3a67b332c0969df1" - integrity sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ== - 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.4: - version "7.1.4" - resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.4.tgz#aa608a2f6c577ad357e1ae5a5c26d9a8d1969255" - integrity sha512-hkLPepehmnKk41pUGm3sYxoFs/umurYfYJCerbXEyFIWcAzvpipAgVkBqqT9RBKMGjnq6kMuyYwha6csxbiM1A== - 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.1, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4, glob@^7.2.0: - version "7.2.3" - resolved "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b" - integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== - 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" - -glob@^8.0.1: - version "8.0.3" - resolved "https://registry.yarnpkg.com/glob/-/glob-8.0.3.tgz#415c6eb2deed9e502c68fa44a272e6da6eeca42e" - 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" - -glob@~7.1.6: - 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@^11.1.0: - version "11.12.0" - resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e" - integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== - -globals@^13.15.0: - version "13.18.0" - resolved "https://registry.npmjs.org/globals/-/globals-13.18.0.tgz#fb224daeeb2bb7d254cd2c640f003528b8d0c1dc" - integrity sha512-/mR4KI8Ps2spmoc0Ulu9L7agOF0du1CZNQ3dke8yItYlyKNmGrkONemBbd6V8UTc1Wgcqn21t3WYB7dbRmh6/A== - dependencies: - type-fest "^0.20.2" - -globby@^11.0.1, globby@^11.0.2, globby@^11.1.0: - version "11.1.0" - resolved "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz#bd4be98bb042f83d796f7e3811991fbe82a0d34b" - integrity sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g== - 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" - -google-auth-library@^7.14.0: - version "7.14.0" - resolved "https://registry.yarnpkg.com/google-auth-library/-/google-auth-library-7.14.0.tgz#9d6a20592f7b4d4c463cd3e93934c4b1711d5dc6" - integrity sha512-or8r7qUqGVI3W8lVSdPh0ZpeFyQHeE73g5c0p+bLNTTUFXJ+GSeDQmZRZ2p4H8cF/RJYa4PNvi/A1ar1uVNLFA== - dependencies: - arrify "^2.0.0" - base64-js "^1.3.0" - ecdsa-sig-formatter "^1.0.11" - fast-text-encoding "^1.0.0" - gaxios "^4.0.0" - gcp-metadata "^4.2.0" - gtoken "^5.0.4" - jws "^4.0.0" - lru-cache "^6.0.0" - -google-p12-pem@^3.1.3: - version "3.1.3" - resolved "https://registry.yarnpkg.com/google-p12-pem/-/google-p12-pem-3.1.3.tgz#5497998798ee86c2fc1f4bb1f92b7729baf37537" - integrity sha512-MC0jISvzymxePDVembypNefkAQp+DRP7dBE+zNUPaIjEspIlYg0++OrsNr248V9tPbz6iqtZ7rX1hxWA5B8qBQ== - dependencies: - node-forge "^1.0.0" - -gopd@^1.0.1: - version "1.0.1" - resolved "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz#29ff76de69dac7489b7c0918a5788e56477c332c" - integrity sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA== - dependencies: - get-intrinsic "^1.1.3" - -graceful-fs@^4.1.11, graceful-fs@^4.1.15, graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.4, graceful-fs@^4.2.6, graceful-fs@^4.2.9: - version "4.2.10" - resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.10.tgz#147d3a006da4ca3ce14728c7aefc287c367d7a6c" - integrity sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA== - -grapheme-splitter@^1.0.4: - version "1.0.4" - resolved "https://registry.npmjs.org/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz#9cf3a665c6247479896834af35cf1dbb4400767e" - integrity sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ== - -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== - -growly@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/growly/-/growly-1.3.0.tgz#f10748cbe76af964b7c96c93c6bcc28af120c081" - integrity sha512-+xGQY0YyAWCnqy7Cd++hc2JqMYzlm0dG30Jd0beaA64sROr8C4nt8Yc9V5Ro3avlSUDTN0ulqP/VBKi1/lLygw== - -gtoken@^5.0.4: - version "5.3.2" - resolved "https://registry.yarnpkg.com/gtoken/-/gtoken-5.3.2.tgz#deb7dc876abe002178e0515e383382ea9446d58f" - integrity sha512-gkvEKREW7dXWF8NV8pVrKfW7WqReAmjjkMBh6lNCCGOM4ucS0r0YyXXl0r/9Yj8wcW/32ISkfc8h5mPTDbtifQ== - dependencies: - gaxios "^4.0.0" - google-p12-pem "^3.1.3" - jws "^4.0.0" - -gud@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/gud/-/gud-1.0.0.tgz#a489581b17e6a70beca9abe3ae57de7a499852c0" - integrity sha512-zGEOVKFM5sVPPrYs7J5/hYEw2Pof8KCyOwyhG8sAF26mCAeUFAcYPu1mwB7hhpIP29zOIBaDqwuHdLp0jvZXjw== - -handlebars@^4.7.7: - version "4.7.7" - resolved "https://registry.yarnpkg.com/handlebars/-/handlebars-4.7.7.tgz#9ce33416aad02dbd6c8fafa8240d5d98004945a1" - 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" - optionalDependencies: - uglify-js "^3.1.4" - -hard-rejection@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/hard-rejection/-/hard-rejection-2.1.0.tgz#1c6eda5c1685c63942766d79bb40ae773cecd883" - integrity sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA== - -harmony-reflect@^1.4.6: - version "1.6.2" - resolved "https://registry.yarnpkg.com/harmony-reflect/-/harmony-reflect-1.6.2.tgz#31ecbd32e648a34d030d86adb67d4d47547fe710" - integrity sha512-HIp/n38R9kQjDEziXyDTuW3vvoxxyxjxFzXLrBr18uB47GnSt+G9D29fqrpM5ZkspMcPICud3XsBJQ4Y2URg8g== - -has-bigints@^1.0.1, has-bigints@^1.0.2: - version "1.0.2" - resolved "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz#0871bd3e3d51626f6ca0966668ba35d5602d6eaa" - integrity sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ== - -has-flag@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" - integrity sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw== - -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== - -has-property-descriptors@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz#610708600606d36961ed04c196193b6a607fa861" - integrity sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ== - dependencies: - get-intrinsic "^1.1.1" - -has-symbols@^1.0.0, has-symbols@^1.0.2, has-symbols@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.3.tgz#bb7b2c4349251dce87b125f7bdf874aa7c8b39f8" - integrity sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A== - -has-tostringtag@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/has-tostringtag/-/has-tostringtag-1.0.0.tgz#7e133818a7d394734f941e73c3d3f9291e658b25" - integrity sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ== - dependencies: - has-symbols "^1.0.2" - -has-unicode@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9" - integrity sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ== - -has-value@^0.3.1: - version "0.3.1" - resolved "https://registry.yarnpkg.com/has-value/-/has-value-0.3.1.tgz#7b1f58bada62ca827ec0a2078025654845995e1f" - integrity sha512-gpG936j8/MzaeID5Yif+577c17TxaDmhuyVgSwtnL/q8UUTySg8Mecb+8Cf1otgLoD7DDH75axp86ER7LFsf3Q== - dependencies: - get-value "^2.0.3" - has-values "^0.1.4" - isobject "^2.0.0" - -has-value@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/has-value/-/has-value-1.0.0.tgz#18b281da585b1c5c51def24c930ed29a0be6b177" - integrity sha512-IBXk4GTsLYdQ7Rvt+GRBrFSVEkmuOUy4re0Xjd9kJSUQpnTrWR4/y9RpfexN9vkAPMFuQoeWKwqzPozRTlasGw== - dependencies: - get-value "^2.0.6" - has-values "^1.0.0" - isobject "^3.0.0" - -has-values@^0.1.4: - version "0.1.4" - resolved "https://registry.yarnpkg.com/has-values/-/has-values-0.1.4.tgz#6d61de95d91dfca9b9a02089ad384bff8f62b771" - integrity sha512-J8S0cEdWuQbqD9//tlZxiMuMNmxB8PlEwvYwuxsTmR1G5RXUePEX/SJn7aD0GMLieuZYSwNH0cQuJGwnYunXRQ== - -has-values@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/has-values/-/has-values-1.0.0.tgz#95b0b63fec2146619a6fe57fe75628d5a39efe4f" - integrity sha512-ODYZC64uqzmtfGMEAX/FvZiRyWLpAC3vYnNunURUnkGVTS+mI0smVsWaPydRBsE3g+ok7h960jChO8mFcWlHaQ== - dependencies: - is-number "^3.0.0" - kind-of "^4.0.0" - -has@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" - integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== - dependencies: - function-bind "^1.1.1" - -he@1.2.0, he@1.2.x: - version "1.2.0" - resolved "https://registry.yarnpkg.com/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f" - integrity sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw== - -hosted-git-info@^2.1.4: - version "2.8.9" - resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.8.9.tgz#dffc0bf9a21c02209090f2aa69429e1414daf3f9" - integrity sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw== - -hosted-git-info@^3.0.6: - version "3.0.8" - resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-3.0.8.tgz#6e35d4cc87af2c5f816e4cb9ce350ba87a3f370d" - integrity sha512-aXpmwoOhRBrw6X3j0h5RloK4x1OzsxMPyxqIHyNfSe2pypkVTZFpEiRoSipPEPlMrh0HW/XsjkJ5WgnCirpNUw== - dependencies: - lru-cache "^6.0.0" - -hosted-git-info@^4.0.0, hosted-git-info@^4.0.1: - version "4.0.2" - resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-4.0.2.tgz#5e425507eede4fea846b7262f0838456c4209961" - integrity sha512-c9OGXbZ3guC/xOlCg1Ci/VgWlwsqDv1yMQL1CWqXDL0hDjXuNcq0zuR4xqPSuasI3kqFDhqSyTjREz5gzq0fXg== - dependencies: - lru-cache "^6.0.0" - -hosted-git-info@^5.0.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-5.1.0.tgz#9786123f92ef3627f24abc3f15c20d98ec4a6594" - integrity sha512-Ek+QmMEqZF8XrbFdwoDjSbm7rT23pCgEMOJmz6GPk/s4yH//RQfNPArhIxbguNxROq/+5lNBwCDHMhA903Kx1Q== - dependencies: - lru-cache "^7.5.1" - -html-encoding-sniffer@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/html-encoding-sniffer/-/html-encoding-sniffer-2.0.1.tgz#42a6dc4fd33f00281176e8b23759ca4e4fa185f3" - integrity sha512-D5JbOMBIR/TVZkubHT+OyT2705QvogUW4IBn6nHd756OwieSF9aDYFj4dv6HHEVGYbHaLETa3WggZYWWMyy3ZQ== - dependencies: - whatwg-encoding "^1.0.5" - -html-escaper@^2.0.0: - version "2.0.2" - resolved "https://registry.yarnpkg.com/html-escaper/-/html-escaper-2.0.2.tgz#dfd60027da36a36dfcbe236262c00a5822681453" - integrity sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg== - -html-loader@^0.5.1: - version "0.5.5" - resolved "https://registry.yarnpkg.com/html-loader/-/html-loader-0.5.5.tgz#6356dbeb0c49756d8ebd5ca327f16ff06ab5faea" - integrity sha512-7hIW7YinOYUpo//kSYcPB6dCKoceKLmOwjEMmhIobHuWGDVl0Nwe4l68mdG/Ru0wcUxQjVMEoZpkalZ/SE7zog== - dependencies: - es6-templates "^0.2.3" - fastparse "^1.1.1" - html-minifier "^3.5.8" - loader-utils "^1.1.0" - object-assign "^4.1.1" - -html-minifier@^3.5.8: - version "3.5.21" - resolved "https://registry.yarnpkg.com/html-minifier/-/html-minifier-3.5.21.tgz#d0040e054730e354db008463593194015212d20c" - integrity sha512-LKUKwuJDhxNa3uf/LPR/KVjm/l3rBqtYeCOAekvG8F1vItxMUpueGd94i/asDDr8/1u7InxzFA5EeGjhhG5mMA== - dependencies: - camel-case "3.0.x" - clean-css "4.2.x" - commander "2.17.x" - he "1.2.x" - param-case "2.1.x" - relateurl "0.2.x" - uglify-js "3.4.x" - -htmlparser2@^6.0.0: - version "6.1.0" - resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-6.1.0.tgz#c4d762b6c3371a05dbe65e94ae43a9f845fb8fb7" - integrity sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A== - dependencies: - domelementtype "^2.0.1" - domhandler "^4.0.0" - domutils "^2.5.2" - entities "^2.0.0" - -http-cache-semantics@^4.1.0: - version "4.1.1" - resolved "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz#abe02fcb2985460bf0323be664436ec3476a6d5a" - integrity sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ== - -http-proxy-agent@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/http-proxy-agent/-/http-proxy-agent-2.1.0.tgz#e4821beef5b2142a2026bd73926fe537631c5405" - integrity sha512-qwHbBLV7WviBl0rQsOzH6o5lwyOIvwp/BdFnvVxXORldu5TmjFfjzBcWUWS5kWAZhmv+JtiDhSuQCp4sBfbIgg== - dependencies: - agent-base "4" - debug "3.1.0" - -http-proxy-agent@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz#8a8c8ef7f5932ccf953c296ca8291b95aa74aa3a" - integrity sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg== - dependencies: - "@tootallnate/once" "1" - agent-base "6" - debug "4" - -http-proxy-agent@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz#5129800203520d434f142bc78ff3c170800f2b43" - integrity sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w== - dependencies: - "@tootallnate/once" "2" - agent-base "6" - debug "4" - -https-proxy-agent@^2.2.3: - version "2.2.4" - resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-2.2.4.tgz#4ee7a737abd92678a293d9b34a1af4d0d08c787b" - integrity sha512-OmvfoQ53WLjtA9HeYP9RNrWMJzzAz1JGaSFr1nijg0PVR1JaD/xbJq1mdEIIlxGpXp9eSe/O2LgU9DJmTPd0Eg== - dependencies: - agent-base "^4.3.0" - debug "^3.1.0" - -https-proxy-agent@^5.0.0: - version "5.0.1" - resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz#c59ef224a04fe8b754f3db0063a25ea30d0005d6" - integrity sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA== - dependencies: - agent-base "6" - debug "4" - -human-signals@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-1.1.1.tgz#c5b1cd14f50aeae09ab6c59fe63ba3395fe4dfa3" - integrity sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw== - -human-signals@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-2.1.0.tgz#dc91fcba42e4d06e4abaed33b3e7a3c02f514ea0" - integrity sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw== - -humanize-ms@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/humanize-ms/-/humanize-ms-1.2.1.tgz#c46e3159a293f6b896da29316d8b6fe8bb79bbed" - integrity sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ== - dependencies: - ms "^2.0.0" - -husky@^3.0.9: - version "3.1.0" - resolved "https://registry.yarnpkg.com/husky/-/husky-3.1.0.tgz#5faad520ab860582ed94f0c1a77f0f04c90b57c0" - integrity sha512-FJkPoHHB+6s4a+jwPqBudBDvYZsoQW5/HBuMSehC8qDiCe50kpcxeqFoDSlow+9I6wg47YxBoT3WxaURlrDIIQ== - dependencies: - chalk "^2.4.2" - ci-info "^2.0.0" - cosmiconfig "^5.2.1" - execa "^1.0.0" - get-stdin "^7.0.0" - opencollective-postinstall "^2.0.2" - pkg-dir "^4.2.0" - please-upgrade-node "^3.2.0" - read-pkg "^5.2.0" - run-node "^1.0.0" - slash "^3.0.0" - -iconv-lite@0.4.24, iconv-lite@^0.4.24: - version "0.4.24" - resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" - integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== - dependencies: - safer-buffer ">= 2.1.2 < 3" - -iconv-lite@^0.6.2, iconv-lite@^0.6.3: - version "0.6.3" - resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.6.3.tgz#a52f80bf38da1952eb5c681790719871a1a72501" - integrity sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw== - dependencies: - safer-buffer ">= 2.1.2 < 3.0.0" - -icss-utils@^5.0.0, icss-utils@^5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/icss-utils/-/icss-utils-5.1.0.tgz#c6be6858abd013d768e98366ae47e25d5887b1ae" - integrity sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA== - -identity-obj-proxy@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/identity-obj-proxy/-/identity-obj-proxy-3.0.0.tgz#94d2bda96084453ef36fbc5aaec37e0f79f1fc14" - integrity sha512-00n6YnVHKrinT9t0d9+5yZC6UBNJANpYEQvL2LlX6Ab9lnmxzIRcEmTPuyGScvl1+jKuCICX1Z0Ab1pPKKdikA== - dependencies: - harmony-reflect "^1.4.6" - -ieee754@^1.1.13, ieee754@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352" - integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== - -ignore-walk@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/ignore-walk/-/ignore-walk-5.0.1.tgz#5f199e23e1288f518d90358d461387788a154776" - integrity sha512-yemi4pMf51WKT7khInJqAvsIGzoqYXblnsz0ql8tM+yi1EKYTY1evX4NAbJrLL/Aanr2HyZeluqU+Oi7MGHokw== - dependencies: - minimatch "^5.0.1" - -ignore@^3.3.7: - version "3.3.10" - resolved "https://registry.yarnpkg.com/ignore/-/ignore-3.3.10.tgz#0a97fb876986e8081c631160f8f9f389157f0043" - integrity sha512-Pgs951kaMm5GXP7MOvxERINe3gsaVjUWFm+UZPSq9xYriQAksyhg0csnS0KXSNRD5NmNdapXEpjxG49+AKh/ug== - -ignore@^5.0.4, ignore@^5.2.0: - version "5.2.1" - resolved "https://registry.npmjs.org/ignore/-/ignore-5.2.1.tgz#c2b1f76cb999ede1502f3a226a9310fdfe88d46c" - integrity sha512-d2qQLzTJ9WxQftPAuEQpSPmKqzxePjzVbpAVv62AQ64NTL+wR4JkrVqR/LqFsFEUsHDAiId52mJteHDFuDkElA== - -immediate@^3.2.3: - version "3.3.0" - resolved "https://registry.yarnpkg.com/immediate/-/immediate-3.3.0.tgz#1aef225517836bcdf7f2a2de2600c79ff0269266" - integrity sha512-HR7EVodfFUdQCTIeySw+WDRFJlPcLOJbXfwwZ7Oom6tjsvZ3bOkCDJHehQC3nxJrv7+f9XecwazynjU8e4Vw3Q== - -import-fresh@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-2.0.0.tgz#d81355c15612d386c61f9ddd3922d4304822a546" - integrity sha1-2BNVwVYS04bGH53dOSLUMEgipUY= - dependencies: - caller-path "^2.0.0" - resolve-from "^3.0.0" - -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" - -import-local@^3.0.2: - version "3.1.0" - resolved "https://registry.yarnpkg.com/import-local/-/import-local-3.1.0.tgz#b4479df8a5fd44f6cdce24070675676063c95cb4" - integrity sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg== - dependencies: - pkg-dir "^4.2.0" - resolve-cwd "^3.0.0" - -imurmurhash@^0.1.4: - version "0.1.4" - resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" - integrity sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA== - -indent-string@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-4.0.0.tgz#624f8f4497d619b2d9768531d58f4122854d7251" - integrity sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg== - -infer-owner@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/infer-owner/-/infer-owner-1.0.4.tgz#c4cefcaa8e51051c2a40ba2ce8a3d27295af9467" - integrity sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A== - -inflight@^1.0.4: - version "1.0.6" - resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" - integrity sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA== - dependencies: - once "^1.3.0" - wrappy "1" - -inherits@2, inherits@^2.0.0, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.3, inherits@~2.0.4: - 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.2, ini@^1.3.4: - version "1.3.8" - resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.8.tgz#a29da425b48806f34767a4efce397269af28432c" - integrity sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew== - -init-package-json@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/init-package-json/-/init-package-json-3.0.2.tgz#f5bc9bac93f2bdc005778bc2271be642fecfcd69" - integrity sha512-YhlQPEjNFqlGdzrBfDNRLhvoSgX7iQRgSxgsNknRQ9ITXFT7UMfVMWhBTOh2Y+25lRnGrv5Xz8yZwQ3ACR6T3A== - dependencies: - npm-package-arg "^9.0.1" - promzard "^0.3.0" - read "^1.0.7" - read-package-json "^5.0.0" - semver "^7.3.5" - validate-npm-package-license "^3.0.4" - validate-npm-package-name "^4.0.0" - -inquirer@^8.2.4: - version "8.2.4" - resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-8.2.4.tgz#ddbfe86ca2f67649a67daa6f1051c128f684f0b4" - integrity sha512-nn4F01dxU8VeKfq192IjLsxu0/OmMZ4Lg3xKAns148rCaXP6ntAoEkVYZThWjwON8AlzdZZi6oqnhNbxUG9hVg== - dependencies: - ansi-escapes "^4.2.1" - chalk "^4.1.1" - cli-cursor "^3.1.0" - cli-width "^3.0.0" - external-editor "^3.0.3" - figures "^3.0.0" - lodash "^4.17.21" - mute-stream "0.0.8" - ora "^5.4.1" - run-async "^2.4.0" - rxjs "^7.5.5" - string-width "^4.1.0" - strip-ansi "^6.0.0" - through "^2.3.6" - wrap-ansi "^7.0.0" - -internal-slot@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/internal-slot/-/internal-slot-1.0.3.tgz#7347e307deeea2faac2ac6205d4bc7d34967f59c" - integrity sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA== - dependencies: - get-intrinsic "^1.1.0" - has "^1.0.3" - side-channel "^1.0.4" - -interpret@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/interpret/-/interpret-2.2.0.tgz#1a78a0b5965c40a5416d007ad6f50ad27c417df9" - integrity sha512-Ju0Bz/cEia55xDwUWEa8+olFpCiQoypjnQySseKtmjNrnps3P+xfpUmGr90T7yjlVJmOtybRvPXhKMbHr+fWnw== - -ip@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/ip/-/ip-2.0.0.tgz#4cf4ab182fee2314c75ede1276f8c80b479936da" - integrity sha512-WKa+XuLG1A1R0UWhl2+1XQSi+fZWMsYKffMZTTYsiZaUD8k2yDAj5atimTUD2TZkyCkNEeYE5NhFZmupOGtjYQ== - -irregular-plurals@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/irregular-plurals/-/irregular-plurals-2.0.0.tgz#39d40f05b00f656d0b7fa471230dd3b714af2872" - integrity sha512-Y75zBYLkh0lJ9qxeHlMjQ7bSbyiSqNW/UOPWDmzC7cXskL1hekSITh1Oc6JV0XCWWZ9DE8VYSB71xocLk3gmGw== - -is-accessor-descriptor@^0.1.6: - version "0.1.6" - resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz#a9e12cb3ae8d876727eeef3843f8a0897b5c98d6" - integrity sha512-e1BM1qnDbMRG3ll2U9dSK0UMHuWOs3pY3AtcFsmvwPtKL3MML/Q86i+GilLfvqEs4GW+ExB91tQ3Ig9noDIZ+A== - dependencies: - kind-of "^3.0.2" - -is-accessor-descriptor@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz#169c2f6d3df1f992618072365c9b0ea1f6878656" - integrity sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ== - dependencies: - kind-of "^6.0.0" - -is-alphabetical@^1.0.0: - version "1.0.4" - resolved "https://registry.yarnpkg.com/is-alphabetical/-/is-alphabetical-1.0.4.tgz#9e7d6b94916be22153745d184c298cbf986a686d" - integrity sha512-DwzsA04LQ10FHTZuL0/grVDk4rFoVH1pjAToYwBrHSxcrBIGQuXrQMtD5U1b0U2XVgKZCTLLP8u2Qxqhy3l2Vg== - -is-alphanumerical@^1.0.0: - version "1.0.4" - resolved "https://registry.yarnpkg.com/is-alphanumerical/-/is-alphanumerical-1.0.4.tgz#7eb9a2431f855f6b1ef1a78e326df515696c4dbf" - integrity sha512-UzoZUr+XfVz3t3v4KyGEniVL9BDRoQtY7tOyrRybkVNjDFWyo1yhXNGrrBTQxp3ib9BLAWs7k2YKBQsFRkZG9A== - dependencies: - is-alphabetical "^1.0.0" - is-decimal "^1.0.0" - -is-arguments@^1.0.4: - version "1.1.1" - resolved "https://registry.yarnpkg.com/is-arguments/-/is-arguments-1.1.1.tgz#15b3f88fda01f2a97fec84ca761a560f123efa9b" - integrity sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA== - dependencies: - call-bind "^1.0.2" - has-tostringtag "^1.0.0" - -is-arrayish@^0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" - integrity sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg== - -is-bigint@^1.0.1: - version "1.0.4" - resolved "https://registry.yarnpkg.com/is-bigint/-/is-bigint-1.0.4.tgz#08147a1875bc2b32005d41ccd8291dffc6691df3" - integrity sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg== - dependencies: - has-bigints "^1.0.1" - -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-boolean-object@^1.1.0: - version "1.1.2" - resolved "https://registry.yarnpkg.com/is-boolean-object/-/is-boolean-object-1.1.2.tgz#5c6dc200246dd9321ae4b885a114bb1f75f63719" - integrity sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA== - dependencies: - call-bind "^1.0.2" - has-tostringtag "^1.0.0" - -is-buffer@^1.1.5: - version "1.1.6" - resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be" - integrity sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w== - -is-buffer@^2.0.0, is-buffer@~2.0.3: - version "2.0.5" - resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-2.0.5.tgz#ebc252e400d22ff8d77fa09888821a24a658c191" - integrity sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ== - -is-callable@^1.1.4, is-callable@^1.2.7: - version "1.2.7" - resolved "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz#3bc2a85ea742d9e36205dcacdd72ca1fdc51b055" - integrity sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA== - -is-ci@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-2.0.0.tgz#6bc6334181810e04b5c22b3d589fdca55026404c" - integrity sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w== - dependencies: - ci-info "^2.0.0" - -is-core-module@^2.2.0, is-core-module@^2.5.0, is-core-module@^2.8.1, is-core-module@^2.9.0: - version "2.11.0" - resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.11.0.tgz#ad4cb3e3863e814523c96f3f58d26cc570ff0144" - integrity sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw== - dependencies: - has "^1.0.3" - -is-data-descriptor@^0.1.4: - version "0.1.4" - resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz#0b5ee648388e2c860282e793f1856fec3f301b56" - integrity sha512-+w9D5ulSoBNlmw9OHn3U2v51SyoCd0he+bB3xMl62oijhrspxowjU+AIcDY0N3iEJbUEkB15IlMASQsxYigvXg== - dependencies: - kind-of "^3.0.2" - -is-data-descriptor@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz#d84876321d0e7add03990406abbbbd36ba9268c7" - integrity sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ== - dependencies: - kind-of "^6.0.0" - -is-date-object@^1.0.1: - version "1.0.5" - resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.5.tgz#0841d5536e724c25597bf6ea62e1bd38298df31f" - integrity sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ== - dependencies: - has-tostringtag "^1.0.0" - -is-decimal@^1.0.0: - version "1.0.4" - resolved "https://registry.yarnpkg.com/is-decimal/-/is-decimal-1.0.4.tgz#65a3a5958a1c5b63a706e1b333d7cd9f630d3fa5" - integrity sha512-RGdriMmQQvZ2aqaQq3awNA6dCGtKpiDFcOzrTWrDAT2MiWrKQVPmxLGHl7Y2nNu6led0kEyoX0enY0qXYsv9zw== - -is-descriptor@^0.1.0: - version "0.1.6" - resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-0.1.6.tgz#366d8240dde487ca51823b1ab9f07a10a78251ca" - integrity sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg== - dependencies: - is-accessor-descriptor "^0.1.6" - is-data-descriptor "^0.1.4" - kind-of "^5.0.0" - -is-descriptor@^1.0.0, is-descriptor@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-1.0.2.tgz#3b159746a66604b04f8c81524ba365c5f14d86ec" - integrity sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg== - dependencies: - is-accessor-descriptor "^1.0.0" - is-data-descriptor "^1.0.0" - kind-of "^6.0.2" - -is-directory@^0.3.1: - version "0.3.1" - resolved "https://registry.yarnpkg.com/is-directory/-/is-directory-0.3.1.tgz#61339b6f2475fc772fd9c9d83f5c8575dc154ae1" - integrity sha1-YTObbyR1/Hcv2cnYP1yFddwVSuE= - -is-docker@^2.0.0, is-docker@^2.1.1: - version "2.2.1" - resolved "https://registry.yarnpkg.com/is-docker/-/is-docker-2.2.1.tgz#33eeabe23cfe86f14bde4408a02c0cfb853acdaa" - integrity sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ== - -is-extendable@^0.1.0, is-extendable@^0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89" - integrity sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw== - -is-extendable@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-1.0.1.tgz#a7470f9e426733d81bd81e1155264e3a3507cab4" - integrity sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA== - dependencies: - is-plain-object "^2.0.4" - -is-extglob@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" - integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ== - -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-generator-fn@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/is-generator-fn/-/is-generator-fn-2.1.0.tgz#7d140adc389aaf3011a8f2a2a4cfa6faadffb118" - integrity sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ== - -is-glob@^4.0.0, is-glob@^4.0.1, is-glob@^4.0.3, is-glob@~4.0.1: - version "4.0.3" - resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084" - integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== - dependencies: - is-extglob "^2.1.1" - -is-hexadecimal@^1.0.0: - version "1.0.4" - resolved "https://registry.yarnpkg.com/is-hexadecimal/-/is-hexadecimal-1.0.4.tgz#cc35c97588da4bd49a8eedd6bc4082d44dcb23a7" - integrity sha512-gyPJuv83bHMpocVYoqof5VDiZveEoGoFL8m3BXNb2VW8Xs+rz9kqO8LOQ5DH6EsuvilT1ApazU0pyl+ytbPtlw== - -is-interactive@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-interactive/-/is-interactive-1.0.0.tgz#cea6e6ae5c870a7b0a0004070b7b587e0252912e" - integrity sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w== - -is-lambda@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-lambda/-/is-lambda-1.0.1.tgz#3d9877899e6a53efc0160504cde15f82e6f061d5" - integrity sha512-z7CMFGNrENq5iFB9Bqo64Xk6Y9sg+epq1myIcdHaGnbMTYOxvzsEtdYqQUylB7LxfkvgrrjP32T6Ywciio9UIQ== - -is-negative-zero@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/is-negative-zero/-/is-negative-zero-2.0.2.tgz#7bf6f03a28003b8b3965de3ac26f664d765f3150" - integrity sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA== - -is-number-object@^1.0.4: - version "1.0.6" - resolved "https://registry.yarnpkg.com/is-number-object/-/is-number-object-1.0.6.tgz#6a7aaf838c7f0686a50b4553f7e54a96494e89f0" - integrity sha512-bEVOqiRcvo3zO1+G2lVMy+gkkEm9Yh7cDMRusKKu5ZJKPUYSJwICTKZrNKHA2EbSP0Tu0+6B/emsYNHZyn6K8g== - dependencies: - has-tostringtag "^1.0.0" - -is-number@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/is-number/-/is-number-3.0.0.tgz#24fd6201a4782cf50561c810276afc7d12d71195" - integrity sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg== - dependencies: - kind-of "^3.0.2" - -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-obj@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-2.0.0.tgz#473fb05d973705e3fd9620545018ca8e22ef4982" - integrity sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w== - -is-path-cwd@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/is-path-cwd/-/is-path-cwd-2.2.0.tgz#67d43b82664a7b5191fd9119127eb300048a9fdb" - integrity sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ== - -is-path-inside@^3.0.2, is-path-inside@^3.0.3: - version "3.0.3" - resolved "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz#d231362e53a07ff2b0e0ea7fed049161ffd16283" - integrity sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ== - -is-plain-obj@^1.0.0, is-plain-obj@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-1.1.0.tgz#71a50c8429dfca773c92a390a4a03b39fcd51d3e" - integrity sha1-caUMhCnfync8kqOQpKA7OfzVHT4= - -is-plain-obj@^2.0.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== - -is-plain-object@^2.0.3, is-plain-object@^2.0.4: - version "2.0.4" - resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677" - integrity sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og== - dependencies: - isobject "^3.0.1" - -is-plain-object@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-5.0.0.tgz#4427f50ab3429e9025ea7d52e9043a9ef4159344" - integrity sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q== - -is-potential-custom-element-name@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz#171ed6f19e3ac554394edf78caa05784a45bebb5" - integrity sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ== - -is-promise@^2.1: - version "2.2.2" - resolved "https://registry.yarnpkg.com/is-promise/-/is-promise-2.2.2.tgz#39ab959ccbf9a774cf079f7b40c7a26f763135f1" - integrity sha512-+lP4/6lKUBfQjZ2pdxThZvLUAafmZb8OAxFb8XXtiQmS35INgr85hdOGoEs124ez1FCnZJt6jau/T+alh58QFQ== - -is-property@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/is-property/-/is-property-1.0.2.tgz#57fe1c4e48474edd65b09911f26b1cd4095dda84" - integrity sha1-V/4cTkhHTt1lsJkR8msc1Ald2oQ= - -is-regex@^1.0.4, is-regex@^1.1.4: - version "1.1.4" - resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.1.4.tgz#eef5663cd59fa4c0ae339505323df6854bb15958" - integrity sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg== - dependencies: - call-bind "^1.0.2" - has-tostringtag "^1.0.0" - -is-shared-array-buffer@^1.0.2: - version "1.0.2" - resolved "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz#8f259c573b60b6a32d4058a1a07430c0a7344c79" - integrity sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA== - dependencies: - call-bind "^1.0.2" - -is-ssh@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/is-ssh/-/is-ssh-1.4.0.tgz#4f8220601d2839d8fa624b3106f8e8884f01b8b2" - integrity sha512-x7+VxdxOdlV3CYpjvRLBv5Lo9OJerlYanjwFrPR9fuGPjCiNiCzFgAWpiLAohSbsnH4ZAys3SBh+hq5rJosxUQ== - dependencies: - protocols "^2.0.1" - -is-stream@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" - integrity sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ== - -is-stream@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-2.0.1.tgz#fac1e3d53b97ad5a9d0ae9cef2389f5810a5c077" - integrity sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg== - -is-string@^1.0.5, is-string@^1.0.7: - version "1.0.7" - resolved "https://registry.yarnpkg.com/is-string/-/is-string-1.0.7.tgz#0dd12bf2006f255bb58f695110eff7491eebc0fd" - integrity sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg== - dependencies: - has-tostringtag "^1.0.0" - -is-symbol@^1.0.2, is-symbol@^1.0.3: - version "1.0.4" - resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.4.tgz#a6dac93b635b063ca6872236de88910a57af139c" - integrity sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg== - dependencies: - has-symbols "^1.0.2" - -is-text-path@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-text-path/-/is-text-path-1.0.1.tgz#4e1aa0fb51bfbcb3e92688001397202c1775b66e" - integrity sha1-Thqg+1G/vLPpJogAE5cgLBd1tm4= - dependencies: - text-extensions "^1.0.0" - -is-typedarray@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" - integrity sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA== - -is-unicode-supported@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz#3f26c76a809593b52bfa2ecb5710ed2779b522a7" - integrity sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw== - -is-weakref@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/is-weakref/-/is-weakref-1.0.2.tgz#9529f383a9338205e89765e0392efc2f100f06f2" - integrity sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ== - dependencies: - call-bind "^1.0.2" - -is-whitespace-character@^1.0.0: - version "1.0.4" - resolved "https://registry.yarnpkg.com/is-whitespace-character/-/is-whitespace-character-1.0.4.tgz#0858edd94a95594c7c9dd0b5c174ec6e45ee4aa7" - integrity sha512-SDweEzfIZM0SJV0EUga669UTKlmL0Pq8Lno0QDQsPnvECB3IM2aP0gdx5TrU0A01MAPfViaZiI2V1QMZLaKK5w== - -is-windows@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/is-windows/-/is-windows-1.0.2.tgz#d1850eb9791ecd18e6182ce12a30f396634bb19d" - integrity sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA== - -is-word-character@^1.0.0: - version "1.0.4" - resolved "https://registry.yarnpkg.com/is-word-character/-/is-word-character-1.0.4.tgz#ce0e73216f98599060592f62ff31354ddbeb0230" - integrity sha512-5SMO8RVennx3nZrqtKwCGyyetPE9VDba5ugvKLaD4KopPG5kR4mQ7tNt/r7feL5yt5h3lpuBbIUmCOG2eSzXHA== - -is-wsl@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-2.2.0.tgz#74a4c76e77ca9fd3f932f290c17ea326cd157271" - integrity sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww== - dependencies: - is-docker "^2.0.0" - -is@^3.3.0: - version "3.3.0" - resolved "https://registry.yarnpkg.com/is/-/is-3.3.0.tgz#61cff6dd3c4193db94a3d62582072b44e5645d79" - integrity sha512-nW24QBoPcFGGHJGUwnfpI7Yc5CdqWNdsyHQszVE/z2pKHXzh7FZ5GWhJqSyaQ9wMkQnsTx+kAI8bHlCX4tKdbg== - -isarray@0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/isarray/-/isarray-0.0.1.tgz#8a18acfca9a8f4177e09abfc6038939b05d1eedf" - integrity sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8= - -isarray@1.0.0, isarray@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" - integrity sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE= - -isexe@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" - integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== - -isobject@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/isobject/-/isobject-2.1.0.tgz#f065561096a3f1da2ef46272f815c840d87e0c89" - integrity sha512-+OUdGJlgjOBZDfxnDjYYG6zp487z0JGNQq3cYQYg5f5hKR+syHMsaztzGeml/4kGG55CSpKSpWTY+jYGgsHLgA== - dependencies: - isarray "1.0.0" - -isobject@^3.0.0, isobject@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df" - integrity sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg== - -isomorphic.js@^0.2.4: - version "0.2.5" - resolved "https://registry.yarnpkg.com/isomorphic.js/-/isomorphic.js-0.2.5.tgz#13eecf36f2dba53e85d355e11bf9d4208c6f7f88" - integrity sha512-PIeMbHqMt4DnUP3MA/Flc0HElYjMXArsw1qwJZcm9sqR8mq3l8NYizFMty0pWwE/tzIGH3EKK5+jes5mAr85yw== - -istanbul-lib-coverage@^3.0.0, istanbul-lib-coverage@^3.2.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz#189e7909d0a39fa5a3dfad5b03f71947770191d3" - integrity sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw== - -istanbul-lib-instrument@^4.0.3: - version "4.0.3" - resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-4.0.3.tgz#873c6fff897450118222774696a3f28902d77c1d" - integrity sha512-BXgQl9kf4WTCPCCpmFGoJkz/+uhvm7h7PFKUYxh7qarQd3ER33vHG//qaE8eN25l07YqZPpHXU9I09l/RD5aGQ== - dependencies: - "@babel/core" "^7.7.5" - "@istanbuljs/schema" "^0.1.2" - istanbul-lib-coverage "^3.0.0" - semver "^6.3.0" - -istanbul-lib-instrument@^5.0.4: - version "5.2.1" - resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz#d10c8885c2125574e1c231cacadf955675e1ce3d" - integrity sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg== - dependencies: - "@babel/core" "^7.12.3" - "@babel/parser" "^7.14.7" - "@istanbuljs/schema" "^0.1.2" - istanbul-lib-coverage "^3.2.0" - semver "^6.3.0" - -istanbul-lib-report@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz#7518fe52ea44de372f460a76b5ecda9ffb73d8a6" - integrity sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw== - dependencies: - istanbul-lib-coverage "^3.0.0" - make-dir "^3.0.0" - supports-color "^7.1.0" - -istanbul-lib-source-maps@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz#895f3a709fcfba34c6de5a42939022f3e4358551" - integrity sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw== - dependencies: - debug "^4.1.1" - istanbul-lib-coverage "^3.0.0" - source-map "^0.6.1" - -istanbul-reports@^3.0.2: - version "3.1.5" - resolved "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-3.1.5.tgz#cc9a6ab25cb25659810e4785ed9d9fb742578bae" - integrity sha512-nUsEMa9pBt/NOHqbcbeJEgqIlY/K7rVWUX6Lql2orY5e9roQOthbR3vtY4zzf2orPELg80fnxxk9zUyPlgwD1w== - dependencies: - html-escaper "^2.0.0" - istanbul-lib-report "^3.0.0" - -jake@^10.8.5: - version "10.8.5" - resolved "https://registry.npmjs.org/jake/-/jake-10.8.5.tgz#f2183d2c59382cb274226034543b9c03b8164c46" - integrity sha512-sVpxYeuAhWt0OTWITwT98oyV0GsXyMlXCF+3L1SuafBVUIr/uILGRB+NqwkzhgXKvoJpDIpQvqkUALgdmQsQxw== - dependencies: - async "^3.2.3" - chalk "^4.0.2" - filelist "^1.0.1" - minimatch "^3.0.4" - -jest-changed-files@^26.6.2: - version "26.6.2" - resolved "https://registry.yarnpkg.com/jest-changed-files/-/jest-changed-files-26.6.2.tgz#f6198479e1cc66f22f9ae1e22acaa0b429c042d0" - integrity sha512-fDS7szLcY9sCtIip8Fjry9oGf3I2ht/QT21bAHm5Dmf0mD4X3ReNUf17y+bO6fR8WgbIZTlbyG1ak/53cbRzKQ== - dependencies: - "@jest/types" "^26.6.2" - execa "^4.0.0" - throat "^5.0.0" - -jest-cli@^26.6.3: - version "26.6.3" - resolved "https://registry.yarnpkg.com/jest-cli/-/jest-cli-26.6.3.tgz#43117cfef24bc4cd691a174a8796a532e135e92a" - integrity sha512-GF9noBSa9t08pSyl3CY4frMrqp+aQXFGFkf5hEPbh/pIUFYWMK6ZLTfbmadxJVcJrdRoChlWQsA2VkJcDFK8hg== - dependencies: - "@jest/core" "^26.6.3" - "@jest/test-result" "^26.6.2" - "@jest/types" "^26.6.2" - chalk "^4.0.0" - exit "^0.1.2" - graceful-fs "^4.2.4" - import-local "^3.0.2" - is-ci "^2.0.0" - jest-config "^26.6.3" - jest-util "^26.6.2" - jest-validate "^26.6.2" - prompts "^2.0.1" - yargs "^15.4.1" - -jest-config@^26.6.3: - version "26.6.3" - resolved "https://registry.yarnpkg.com/jest-config/-/jest-config-26.6.3.tgz#64f41444eef9eb03dc51d5c53b75c8c71f645349" - integrity sha512-t5qdIj/bCj2j7NFVHb2nFB4aUdfucDn3JRKgrZnplb8nieAirAzRSHP8uDEd+qV6ygzg9Pz4YG7UTJf94LPSyg== - dependencies: - "@babel/core" "^7.1.0" - "@jest/test-sequencer" "^26.6.3" - "@jest/types" "^26.6.2" - babel-jest "^26.6.3" - chalk "^4.0.0" - deepmerge "^4.2.2" - glob "^7.1.1" - graceful-fs "^4.2.4" - jest-environment-jsdom "^26.6.2" - jest-environment-node "^26.6.2" - jest-get-type "^26.3.0" - jest-jasmine2 "^26.6.3" - jest-regex-util "^26.0.0" - jest-resolve "^26.6.2" - jest-util "^26.6.2" - jest-validate "^26.6.2" - micromatch "^4.0.2" - pretty-format "^26.6.2" - -jest-diff@^26.6.2: - version "26.6.2" - resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-26.6.2.tgz#1aa7468b52c3a68d7d5c5fdcdfcd5e49bd164394" - integrity sha512-6m+9Z3Gv9wN0WFVasqjCL/06+EFCMTqDEUl/b87HYK2rAPTyfz4ZIuSlPhY51PIQRWx5TaxeF1qmXKe9gfN3sA== - dependencies: - chalk "^4.0.0" - diff-sequences "^26.6.2" - jest-get-type "^26.3.0" - pretty-format "^26.6.2" - -jest-docblock@^26.0.0: - version "26.0.0" - resolved "https://registry.yarnpkg.com/jest-docblock/-/jest-docblock-26.0.0.tgz#3e2fa20899fc928cb13bd0ff68bd3711a36889b5" - integrity sha512-RDZ4Iz3QbtRWycd8bUEPxQsTlYazfYn/h5R65Fc6gOfwozFhoImx+affzky/FFBuqISPTqjXomoIGJVKBWoo0w== - dependencies: - detect-newline "^3.0.0" - -jest-each@^26.6.2: - version "26.6.2" - resolved "https://registry.yarnpkg.com/jest-each/-/jest-each-26.6.2.tgz#02526438a77a67401c8a6382dfe5999952c167cb" - integrity sha512-Mer/f0KaATbjl8MCJ+0GEpNdqmnVmDYqCTJYTvoo7rqmRiDllmp2AYN+06F93nXcY3ur9ShIjS+CO/uD+BbH4A== - dependencies: - "@jest/types" "^26.6.2" - chalk "^4.0.0" - jest-get-type "^26.3.0" - jest-util "^26.6.2" - pretty-format "^26.6.2" - -jest-environment-jsdom@^26.6.2: - version "26.6.2" - resolved "https://registry.yarnpkg.com/jest-environment-jsdom/-/jest-environment-jsdom-26.6.2.tgz#78d09fe9cf019a357009b9b7e1f101d23bd1da3e" - integrity sha512-jgPqCruTlt3Kwqg5/WVFyHIOJHsiAvhcp2qiR2QQstuG9yWox5+iHpU3ZrcBxW14T4fe5Z68jAfLRh7joCSP2Q== - dependencies: - "@jest/environment" "^26.6.2" - "@jest/fake-timers" "^26.6.2" - "@jest/types" "^26.6.2" - "@types/node" "*" - jest-mock "^26.6.2" - jest-util "^26.6.2" - jsdom "^16.4.0" - -jest-environment-node@^26.6.2: - version "26.6.2" - resolved "https://registry.yarnpkg.com/jest-environment-node/-/jest-environment-node-26.6.2.tgz#824e4c7fb4944646356f11ac75b229b0035f2b0c" - integrity sha512-zhtMio3Exty18dy8ee8eJ9kjnRyZC1N4C1Nt/VShN1apyXc8rWGtJ9lI7vqiWcyyXS4BVSEn9lxAM2D+07/Tag== - dependencies: - "@jest/environment" "^26.6.2" - "@jest/fake-timers" "^26.6.2" - "@jest/types" "^26.6.2" - "@types/node" "*" - jest-mock "^26.6.2" - jest-util "^26.6.2" - -jest-get-type@^24.9.0: - version "24.9.0" - resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-24.9.0.tgz#1684a0c8a50f2e4901b6644ae861f579eed2ef0e" - integrity sha512-lUseMzAley4LhIcpSP9Jf+fTrQ4a1yHQwLNeeVa2cEmbCGeoZAtYPOIv8JaxLD/sUpKxetKGP+gsHl8f8TSj8Q== - -jest-get-type@^26.3.0: - version "26.3.0" - resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-26.3.0.tgz#e97dc3c3f53c2b406ca7afaed4493b1d099199e0" - integrity sha512-TpfaviN1R2pQWkIihlfEanwOXK0zcxrKEE4MlU6Tn7keoXdN6/3gK/xl0yEh8DOunn5pOVGKf8hB4R9gVh04ig== - -jest-github-actions-reporter@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/jest-github-actions-reporter/-/jest-github-actions-reporter-1.0.3.tgz#6aa2b3a6599352e1043bbe42628a7f73a1ce48c2" - integrity sha512-IwLAKLSWLN8ZVfcfEEv6rfeWb78wKDeOhvOmH9KKXayKsKLSCwceopBcB+KUtwxfB5wYnT8Y9s2eZ+WdhA5yng== - dependencies: - "@actions/core" "^1.2.0" - -jest-haste-map@^26.6.2: - version "26.6.2" - resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-26.6.2.tgz#dd7e60fe7dc0e9f911a23d79c5ff7fb5c2cafeaa" - integrity sha512-easWIJXIw71B2RdR8kgqpjQrbMRWQBgiBwXYEhtGUTaX+doCjBheluShdDMeR8IMfJiTqH4+zfhtg29apJf/8w== - dependencies: - "@jest/types" "^26.6.2" - "@types/graceful-fs" "^4.1.2" - "@types/node" "*" - anymatch "^3.0.3" - fb-watchman "^2.0.0" - graceful-fs "^4.2.4" - jest-regex-util "^26.0.0" - jest-serializer "^26.6.2" - jest-util "^26.6.2" - jest-worker "^26.6.2" - micromatch "^4.0.2" - sane "^4.0.3" - walker "^1.0.7" - optionalDependencies: - fsevents "^2.1.2" - -jest-jasmine2@^26.6.3: - version "26.6.3" - resolved "https://registry.yarnpkg.com/jest-jasmine2/-/jest-jasmine2-26.6.3.tgz#adc3cf915deacb5212c93b9f3547cd12958f2edd" - integrity sha512-kPKUrQtc8aYwBV7CqBg5pu+tmYXlvFlSFYn18ev4gPFtrRzB15N2gW/Roew3187q2w2eHuu0MU9TJz6w0/nPEg== - dependencies: - "@babel/traverse" "^7.1.0" - "@jest/environment" "^26.6.2" - "@jest/source-map" "^26.6.2" - "@jest/test-result" "^26.6.2" - "@jest/types" "^26.6.2" - "@types/node" "*" - chalk "^4.0.0" - co "^4.6.0" - expect "^26.6.2" - is-generator-fn "^2.0.0" - jest-each "^26.6.2" - jest-matcher-utils "^26.6.2" - jest-message-util "^26.6.2" - jest-runtime "^26.6.3" - jest-snapshot "^26.6.2" - jest-util "^26.6.2" - pretty-format "^26.6.2" - throat "^5.0.0" - -jest-junit@^11.1.0: - version "11.1.0" - resolved "https://registry.yarnpkg.com/jest-junit/-/jest-junit-11.1.0.tgz#79cd53948e44d62b2b30fa23ea0d7a899d2c8d7a" - integrity sha512-c2LFOyKY7+ZxL5zSu+WHmHfsJ2wqbOpeYJ4Uu26yMhFxny2J2NQj6AVS7M+Eaxji9Q/oIDDK5tQy0DGzDp9xOw== - dependencies: - mkdirp "^1.0.4" - strip-ansi "^5.2.0" - uuid "^3.3.3" - xml "^1.0.1" - -jest-junit@^8.0.0: - version "8.0.0" - resolved "https://registry.yarnpkg.com/jest-junit/-/jest-junit-8.0.0.tgz#d4f7ff67e292a5426dc60bc38694c9f77cb94178" - integrity sha512-cuD2XM2youMjrOxOu/7H2pLfsO8LfAG4D3WsBxd9fFyI9U0uPpmr/CORH64kbIyZ47X5x1Rbzb9ovUkAEvhEEA== - dependencies: - jest-validate "^24.0.0" - mkdirp "^0.5.1" - strip-ansi "^4.0.0" - xml "^1.0.1" - -jest-leak-detector@^26.6.2: - version "26.6.2" - resolved "https://registry.yarnpkg.com/jest-leak-detector/-/jest-leak-detector-26.6.2.tgz#7717cf118b92238f2eba65054c8a0c9c653a91af" - integrity sha512-i4xlXpsVSMeKvg2cEKdfhh0H39qlJlP5Ex1yQxwF9ubahboQYMgTtz5oML35AVA3B4Eu+YsmwaiKVev9KCvLxg== - dependencies: - jest-get-type "^26.3.0" - pretty-format "^26.6.2" - -jest-matcher-utils@^26.6.2: - version "26.6.2" - resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-26.6.2.tgz#8e6fd6e863c8b2d31ac6472eeb237bc595e53e7a" - integrity sha512-llnc8vQgYcNqDrqRDXWwMr9i7rS5XFiCwvh6DTP7Jqa2mqpcCBBlpCbn+trkG0KNhPu/h8rzyBkriOtBstvWhw== - dependencies: - chalk "^4.0.0" - jest-diff "^26.6.2" - jest-get-type "^26.3.0" - pretty-format "^26.6.2" - -jest-message-util@^26.6.2: - version "26.6.2" - resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-26.6.2.tgz#58173744ad6fc0506b5d21150b9be56ef001ca07" - integrity sha512-rGiLePzQ3AzwUshu2+Rn+UMFk0pHN58sOG+IaJbk5Jxuqo3NYO1U2/MIR4S1sKgsoYSXSzdtSa0TgrmtUwEbmA== - dependencies: - "@babel/code-frame" "^7.0.0" - "@jest/types" "^26.6.2" - "@types/stack-utils" "^2.0.0" - chalk "^4.0.0" - graceful-fs "^4.2.4" - micromatch "^4.0.2" - pretty-format "^26.6.2" - slash "^3.0.0" - stack-utils "^2.0.2" - -jest-mock@^26.6.2: - version "26.6.2" - resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-26.6.2.tgz#d6cb712b041ed47fe0d9b6fc3474bc6543feb302" - integrity sha512-YyFjePHHp1LzpzYcmgqkJ0nm0gg/lJx2aZFzFy1S6eUqNjXsOqTK10zNRff2dNfssgokjkG65OlWNcIlgd3zew== - dependencies: - "@jest/types" "^26.6.2" - "@types/node" "*" - -jest-pnp-resolver@^1.2.2: - version "1.2.3" - resolved "https://registry.yarnpkg.com/jest-pnp-resolver/-/jest-pnp-resolver-1.2.3.tgz#930b1546164d4ad5937d5540e711d4d38d4cad2e" - integrity sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w== - -jest-raw-loader@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/jest-raw-loader/-/jest-raw-loader-1.0.1.tgz#ce9f56d54650f157c4a7d16d224ba5d613bcd626" - integrity sha512-g9oaAjeC4/rIJk1Wd3RxVbOfMizowM7LSjEJqa4R9qDX0OjQNABXOhH+GaznUp+DjTGVPi2vPPbQXyX87DOnYg== - -jest-regex-util@^26.0.0: - version "26.0.0" - resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-26.0.0.tgz#d25e7184b36e39fd466c3bc41be0971e821fee28" - integrity sha512-Gv3ZIs/nA48/Zvjrl34bf+oD76JHiGDUxNOVgUjh3j890sblXryjY4rss71fPtD/njchl6PSE2hIhvyWa1eT0A== - -jest-resolve-dependencies@^26.6.3: - version "26.6.3" - resolved "https://registry.yarnpkg.com/jest-resolve-dependencies/-/jest-resolve-dependencies-26.6.3.tgz#6680859ee5d22ee5dcd961fe4871f59f4c784fb6" - integrity sha512-pVwUjJkxbhe4RY8QEWzN3vns2kqyuldKpxlxJlzEYfKSvY6/bMvxoFrYYzUO1Gx28yKWN37qyV7rIoIp2h8fTg== - dependencies: - "@jest/types" "^26.6.2" - jest-regex-util "^26.0.0" - jest-snapshot "^26.6.2" - -jest-resolve@^26.6.2: - version "26.6.2" - resolved "https://registry.yarnpkg.com/jest-resolve/-/jest-resolve-26.6.2.tgz#a3ab1517217f469b504f1b56603c5bb541fbb507" - integrity sha512-sOxsZOq25mT1wRsfHcbtkInS+Ek7Q8jCHUB0ZUTP0tc/c41QHriU/NunqMfCUWsL4H3MHpvQD4QR9kSYhS7UvQ== - dependencies: - "@jest/types" "^26.6.2" - chalk "^4.0.0" - graceful-fs "^4.2.4" - jest-pnp-resolver "^1.2.2" - jest-util "^26.6.2" - read-pkg-up "^7.0.1" - resolve "^1.18.1" - slash "^3.0.0" - -jest-runner@^26.6.3: - version "26.6.3" - resolved "https://registry.yarnpkg.com/jest-runner/-/jest-runner-26.6.3.tgz#2d1fed3d46e10f233fd1dbd3bfaa3fe8924be159" - integrity sha512-atgKpRHnaA2OvByG/HpGA4g6CSPS/1LK0jK3gATJAoptC1ojltpmVlYC3TYgdmGp+GLuhzpH30Gvs36szSL2JQ== - dependencies: - "@jest/console" "^26.6.2" - "@jest/environment" "^26.6.2" - "@jest/test-result" "^26.6.2" - "@jest/types" "^26.6.2" - "@types/node" "*" - chalk "^4.0.0" - emittery "^0.7.1" - exit "^0.1.2" - graceful-fs "^4.2.4" - jest-config "^26.6.3" - jest-docblock "^26.0.0" - jest-haste-map "^26.6.2" - jest-leak-detector "^26.6.2" - jest-message-util "^26.6.2" - jest-resolve "^26.6.2" - jest-runtime "^26.6.3" - jest-util "^26.6.2" - jest-worker "^26.6.2" - source-map-support "^0.5.6" - throat "^5.0.0" - -jest-runtime@^26.6.3: - version "26.6.3" - resolved "https://registry.yarnpkg.com/jest-runtime/-/jest-runtime-26.6.3.tgz#4f64efbcfac398331b74b4b3c82d27d401b8fa2b" - integrity sha512-lrzyR3N8sacTAMeonbqpnSka1dHNux2uk0qqDXVkMv2c/A3wYnvQ4EXuI013Y6+gSKSCxdaczvf4HF0mVXHRdw== - dependencies: - "@jest/console" "^26.6.2" - "@jest/environment" "^26.6.2" - "@jest/fake-timers" "^26.6.2" - "@jest/globals" "^26.6.2" - "@jest/source-map" "^26.6.2" - "@jest/test-result" "^26.6.2" - "@jest/transform" "^26.6.2" - "@jest/types" "^26.6.2" - "@types/yargs" "^15.0.0" - chalk "^4.0.0" - cjs-module-lexer "^0.6.0" - collect-v8-coverage "^1.0.0" - exit "^0.1.2" - glob "^7.1.3" - graceful-fs "^4.2.4" - jest-config "^26.6.3" - jest-haste-map "^26.6.2" - jest-message-util "^26.6.2" - jest-mock "^26.6.2" - jest-regex-util "^26.0.0" - jest-resolve "^26.6.2" - jest-snapshot "^26.6.2" - jest-util "^26.6.2" - jest-validate "^26.6.2" - slash "^3.0.0" - strip-bom "^4.0.0" - yargs "^15.4.1" - -jest-serializer@^26.6.2: - version "26.6.2" - resolved "https://registry.yarnpkg.com/jest-serializer/-/jest-serializer-26.6.2.tgz#d139aafd46957d3a448f3a6cdabe2919ba0742d1" - integrity sha512-S5wqyz0DXnNJPd/xfIzZ5Xnp1HrJWBczg8mMfMpN78OJ5eDxXyf+Ygld9wX1DnUWbIbhM1YDY95NjR4CBXkb2g== - dependencies: - "@types/node" "*" - graceful-fs "^4.2.4" - -jest-snapshot@^26.6.2: - version "26.6.2" - resolved "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-26.6.2.tgz#f3b0af1acb223316850bd14e1beea9837fb39c84" - integrity sha512-OLhxz05EzUtsAmOMzuupt1lHYXCNib0ECyuZ/PZOx9TrZcC8vL0x+DUG3TL+GLX3yHG45e6YGjIm0XwDc3q3og== - dependencies: - "@babel/types" "^7.0.0" - "@jest/types" "^26.6.2" - "@types/babel__traverse" "^7.0.4" - "@types/prettier" "^2.0.0" - chalk "^4.0.0" - expect "^26.6.2" - graceful-fs "^4.2.4" - jest-diff "^26.6.2" - jest-get-type "^26.3.0" - jest-haste-map "^26.6.2" - jest-matcher-utils "^26.6.2" - jest-message-util "^26.6.2" - jest-resolve "^26.6.2" - natural-compare "^1.4.0" - pretty-format "^26.6.2" - semver "^7.3.2" - -jest-summary-reporter@^0.0.2: - version "0.0.2" - resolved "https://registry.yarnpkg.com/jest-summary-reporter/-/jest-summary-reporter-0.0.2.tgz#53b9997b56f343a0dd9af24199c68d371e01f534" - integrity sha512-rZ3ThO57l+ZJCxF74cXIGQU3cV9I7bSBe1ElBp0taE3x2JghgD69bNCKt0LvpVQX5azTRHG7LmcjIpwriVnTng== - dependencies: - chalk "^2.4.1" - -jest-util@^26.1.0, jest-util@^26.6.2: - version "26.6.2" - resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-26.6.2.tgz#907535dbe4d5a6cb4c47ac9b926f6af29576cbc1" - integrity sha512-MDW0fKfsn0OI7MS7Euz6h8HNDXVQ0gaM9uW6RjfDmd1DAFcaxX9OqIakHIqhbnmF08Cf2DLDG+ulq8YQQ0Lp0Q== - dependencies: - "@jest/types" "^26.6.2" - "@types/node" "*" - chalk "^4.0.0" - graceful-fs "^4.2.4" - is-ci "^2.0.0" - micromatch "^4.0.2" - -jest-validate@^24.0.0: - version "24.9.0" - resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-24.9.0.tgz#0775c55360d173cd854e40180756d4ff52def8ab" - integrity sha512-HPIt6C5ACwiqSiwi+OfSSHbK8sG7akG8eATl+IPKaeIjtPOeBUd/g3J7DghugzxrGjI93qS/+RPKe1H6PqvhRQ== - dependencies: - "@jest/types" "^24.9.0" - camelcase "^5.3.1" - chalk "^2.0.1" - jest-get-type "^24.9.0" - leven "^3.1.0" - pretty-format "^24.9.0" - -jest-validate@^26.6.2: - version "26.6.2" - resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-26.6.2.tgz#23d380971587150467342911c3d7b4ac57ab20ec" - integrity sha512-NEYZ9Aeyj0i5rQqbq+tpIOom0YS1u2MVu6+euBsvpgIme+FOfRmoC4R5p0JiAUpaFvFy24xgrpMknarR/93XjQ== - dependencies: - "@jest/types" "^26.6.2" - camelcase "^6.0.0" - chalk "^4.0.0" - jest-get-type "^26.3.0" - leven "^3.1.0" - pretty-format "^26.6.2" - -jest-watcher@^26.6.2: - version "26.6.2" - resolved "https://registry.yarnpkg.com/jest-watcher/-/jest-watcher-26.6.2.tgz#a5b683b8f9d68dbcb1d7dae32172d2cca0592975" - integrity sha512-WKJob0P/Em2csiVthsI68p6aGKTIcsfjH9Gsx1f0A3Italz43e3ho0geSAVsmj09RWOELP1AZ/DXyJgOgDKxXQ== - dependencies: - "@jest/test-result" "^26.6.2" - "@jest/types" "^26.6.2" - "@types/node" "*" - ansi-escapes "^4.2.1" - chalk "^4.0.0" - jest-util "^26.6.2" - string-length "^4.0.1" - -jest-worker@^26.5.0, jest-worker@^26.6.2: - version "26.6.2" - resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-26.6.2.tgz#7f72cbc4d643c365e27b9fd775f9d0eaa9c7a8ed" - integrity sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ== - dependencies: - "@types/node" "*" - merge-stream "^2.0.0" - supports-color "^7.0.0" - -jest-worker@^27.4.5: - version "27.5.1" - resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-27.5.1.tgz#8d146f0900e8973b106b6f73cc1e9a8cb86f8db0" - integrity sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg== - dependencies: - "@types/node" "*" - merge-stream "^2.0.0" - supports-color "^8.0.0" - -jest@^26.0.0, jest@^26.0.1, jest@^26.4.2: - version "26.6.3" - resolved "https://registry.yarnpkg.com/jest/-/jest-26.6.3.tgz#40e8fdbe48f00dfa1f0ce8121ca74b88ac9148ef" - integrity sha512-lGS5PXGAzR4RF7V5+XObhqz2KZIDUA1yD0DG6pBVmy10eh0ZIXQImRuzocsI/N2XZ1GrLFwTS27In2i2jlpq1Q== - dependencies: - "@jest/core" "^26.6.3" - import-local "^3.0.2" - jest-cli "^26.6.3" - -js-sdsl@^4.1.4: - version "4.2.0" - resolved "https://registry.npmjs.org/js-sdsl/-/js-sdsl-4.2.0.tgz#278e98b7bea589b8baaf048c20aeb19eb7ad09d0" - integrity sha512-dyBIzQBDkCqCu+0upx25Y2jGdbTGxE9fshMsCdK0ViOongpV+n5tXRcZY9v7CaVQ79AGS9KA1KHtojxiM7aXSQ== - -"js-tokens@^3.0.0 || ^4.0.0", 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@3.13.1: - version "3.13.1" - resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.13.1.tgz#aff151b30bfdfa8e49e05da22e7415e9dfa37847" - integrity sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw== - dependencies: - argparse "^1.0.7" - esprima "^4.0.0" - -js-yaml@4.1.0, js-yaml@^4.1.0: - version "4.1.0" - resolved "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz#c1fb65f8f5017901cdd2c951864ba18458a10602" - integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA== - dependencies: - argparse "^2.0.1" - -js-yaml@^3.10.0, js-yaml@^3.12.1, js-yaml@^3.13.1, js-yaml@^3.14.0: - 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" - -jsdom@^16.4.0: - version "16.7.0" - resolved "https://registry.yarnpkg.com/jsdom/-/jsdom-16.7.0.tgz#918ae71965424b197c819f8183a754e18977b710" - integrity sha512-u9Smc2G1USStM+s/x1ru5Sxrl6mPYCbByG1U/hUmqaVsm4tbNyS7CicOSRyuGQYZhTu0h84qkZZQ/I+dzizSVw== - dependencies: - abab "^2.0.5" - acorn "^8.2.4" - acorn-globals "^6.0.0" - cssom "^0.4.4" - cssstyle "^2.3.0" - data-urls "^2.0.0" - decimal.js "^10.2.1" - domexception "^2.0.1" - escodegen "^2.0.0" - form-data "^3.0.0" - html-encoding-sniffer "^2.0.1" - http-proxy-agent "^4.0.1" - https-proxy-agent "^5.0.0" - is-potential-custom-element-name "^1.0.1" - nwsapi "^2.2.0" - parse5 "6.0.1" - saxes "^5.0.1" - symbol-tree "^3.2.4" - tough-cookie "^4.0.0" - w3c-hr-time "^1.0.2" - w3c-xmlserializer "^2.0.0" - webidl-conversions "^6.1.0" - whatwg-encoding "^1.0.5" - whatwg-mimetype "^2.3.0" - whatwg-url "^8.5.0" - ws "^7.4.6" - xml-name-validator "^3.0.0" - -jsesc@^2.5.1: - version "2.5.2" - resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4" - integrity sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA== - -jsesc@~0.5.0: - version "0.5.0" - resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-0.5.0.tgz#e7dee66e35d6fc16f710fe91d5cf69f70f08911d" - integrity sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA== - -json-bigint@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/json-bigint/-/json-bigint-1.0.0.tgz#ae547823ac0cad8398667f8cd9ef4730f5b01ff1" - integrity sha512-SiPv/8VpZuWbvLSMtTDU8hEfrZWg/mH/nV/b4o0CYbSxu1UIQPLdwKOCIyLQX+VIPO5vrLX3i8qtqFyhdPSUSQ== - dependencies: - bignumber.js "^9.0.0" - -json-parse-better-errors@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz#bb867cfb3450e69107c131d1c514bab3dc8bcaa9" - integrity sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw== - -json-parse-even-better-errors@^2.3.0, json-parse-even-better-errors@^2.3.1: - version "2.3.1" - resolved "https://registry.yarnpkg.com/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz#7c47805a94319928e05777405dc12e1f7a4ee02d" - integrity sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w== - -json-schema-compare@^0.2.2: - version "0.2.2" - resolved "https://registry.yarnpkg.com/json-schema-compare/-/json-schema-compare-0.2.2.tgz#dd601508335a90c7f4cfadb6b2e397225c908e56" - integrity sha512-c4WYmDKyJXhs7WWvAWm3uIYnfyWFoIp+JEoX34rctVvEkMYCPGhXtvmFFXiffBbxfZsvQ0RNnV5H7GvDF5HCqQ== - dependencies: - lodash "^4.17.4" - -json-schema-merge-allof@^0.6.0: - version "0.6.0" - resolved "https://registry.yarnpkg.com/json-schema-merge-allof/-/json-schema-merge-allof-0.6.0.tgz#64d48820fec26b228db837475ce3338936bf59a5" - integrity sha512-LEw4VMQVRceOPLuGRWcxW5orTTiR9ZAtqTAe4rQUjNADTeR81bezBVFa0MqIwp0YmHIM1KkhSjZM7o+IQhaPbQ== - dependencies: - compute-lcm "^1.1.0" - json-schema-compare "^0.2.2" - lodash "^4.17.4" - -json-schema-ref-parser@^6.1.0: - version "6.1.0" - resolved "https://registry.yarnpkg.com/json-schema-ref-parser/-/json-schema-ref-parser-6.1.0.tgz#30af34aeab5bee0431da805dac0eb21b574bf63d" - integrity sha512-pXe9H1m6IgIpXmE5JSb8epilNTGsmTb2iPohAXpOdhqGFbQjNeHHsZxU+C8w6T81GZxSPFLeUoqDJmzxx5IGuw== - dependencies: - call-me-maybe "^1.0.1" - js-yaml "^3.12.1" - ono "^4.0.11" - -json-schema-to-typescript@^8.0.0: - version "8.2.0" - resolved "https://registry.yarnpkg.com/json-schema-to-typescript/-/json-schema-to-typescript-8.2.0.tgz#a859f836df89db63c5f17a6c9c2f1dea93e8dd9b" - integrity sha512-yvi4v9oLeJzJCktt+Zta6kOgEu8R93gNMZUJYo83aAPxoG0qB+cXIxVg5xa6gmdNkyffjH9Ebw1rvyaJKIor5A== - dependencies: - "@types/is-glob" "^4.0.1" - "@types/json-schema" "^7.0.3" - "@types/mkdirp" "^0.5.2" - "@types/prettier" "^1.16.1" - cli-color "^1.4.0" - glob "^7.1.4" - is-glob "^4.0.1" - json-schema-ref-parser "^6.1.0" - json-stringify-safe "^5.0.1" - lodash "^4.17.11" - minimist "^1.2.0" - mkdirp "^0.5.1" - mz "^2.7.0" - prettier "^1.19.1" - stdin "0.0.1" - -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= - -json-stringify-nice@^1.1.4: - version "1.1.4" - resolved "https://registry.yarnpkg.com/json-stringify-nice/-/json-stringify-nice-1.1.4.tgz#2c937962b80181d3f317dd39aa323e14f5a60a67" - integrity sha512-5Z5RFW63yxReJ7vANgW6eZFGWaQvnPE3WNmZoOJrSkGju2etKA2L5rrOa1sm877TVTFt57A80BH1bArcmlLfPw== - -json-stringify-safe@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" - integrity sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA== - -json-to-html@~0.1.2: - version "0.1.2" - resolved "https://registry.yarnpkg.com/json-to-html/-/json-to-html-0.1.2.tgz#7a095ae4a34b33534aad0970ca4b7417b2c11ee3" - integrity sha512-gwezGNdnxPnp+7m5aVFq080KGjURyLqLAMmoRlkfnapQYluxQX18Hu+MOPYOtPaipYSB1bawQem5cmvRo/aAMA== - -json5@2.x, json5@^2.1.1, json5@^2.1.2, json5@^2.2.2: - version "2.2.3" - resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.3.tgz#78cd6f1a19bdc12b73db5ad0c61efd66c1e29283" - integrity sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg== - -json5@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/json5/-/json5-1.0.2.tgz#63d98d60f21b313b77c4d6da18bfa69d80e1d593" - integrity sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA== - dependencies: - minimist "^1.2.0" - -jsonc-parser@3.2.0, jsonc-parser@^3.0.0: - version "3.2.0" - resolved "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.2.0.tgz#31ff3f4c2b9793f89c67212627c51c6394f88e76" - integrity sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w== - -jsonc-parser@^1.0.0: - version "1.0.3" - resolved "https://registry.yarnpkg.com/jsonc-parser/-/jsonc-parser-1.0.3.tgz#1d53d7160e401a783dbceabaad82473f80e6ad7e" - integrity sha512-hk/69oAeaIzchq/v3lS50PXuzn5O2ynldopMC+SWBql7J2WtdptfB9dy8Y7+Og5rPkTCpn83zTiO8FMcqlXJ/g== - -jsonc-parser@^2.3.1: - version "2.3.1" - resolved "https://registry.yarnpkg.com/jsonc-parser/-/jsonc-parser-2.3.1.tgz#59549150b133f2efacca48fe9ce1ec0659af2342" - integrity sha512-H8jvkz1O50L3dMZCsLqiuB2tA7muqbSg1AtGEkN0leAqGjsUzDJir3Zwr02BhqdcITPg3ei3mZ+HjMocAknhhg== - -jsonfile@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-4.0.0.tgz#8771aae0799b64076b76640fca058f9c10e33ecb" - integrity sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss= - optionalDependencies: - graceful-fs "^4.1.6" - -jsonfile@^6.0.1: - version "6.1.0" - resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-6.1.0.tgz#bc55b2634793c679ec6403094eb13698a6ec0aae" - integrity sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ== - dependencies: - universalify "^2.0.0" - optionalDependencies: - graceful-fs "^4.1.6" - -jsonparse@^1.2.0, jsonparse@^1.3.1: - version "1.3.1" - resolved "https://registry.yarnpkg.com/jsonparse/-/jsonparse-1.3.1.tgz#3f4dae4a91fac315f71062f8521cc239f1366280" - integrity sha1-P02uSpH6wxX3EGL4UhzCOfE2YoA= - -jsonpointer@^5.0.0: - version "5.0.1" - resolved "https://registry.yarnpkg.com/jsonpointer/-/jsonpointer-5.0.1.tgz#2110e0af0900fd37467b5907ecd13a7884a1b559" - integrity sha512-p/nXbhSEcu3pZRdkW1OfJhpsVtW1gd4Wa1fnQc9YLiTfAjn0312eMKimbdIQzuZl9aa9xUGaRlP9T/CJE/ditQ== - -"jsx-ast-utils@^2.4.1 || ^3.0.0": - version "3.2.1" - resolved "https://registry.yarnpkg.com/jsx-ast-utils/-/jsx-ast-utils-3.2.1.tgz#720b97bfe7d901b927d87c3773637ae8ea48781b" - integrity sha512-uP5vu8xfy2F9A6LGC22KO7e2/vGTS1MhP+18f++ZNlf0Ohaxbc9nIEwHAsejlJKyzfZzU5UIhe5ItYkitcZnZA== - dependencies: - array-includes "^3.1.3" - object.assign "^4.1.2" - -just-diff-apply@^5.2.0: - version "5.4.1" - resolved "https://registry.yarnpkg.com/just-diff-apply/-/just-diff-apply-5.4.1.tgz#1debed059ad009863b4db0e8d8f333d743cdd83b" - integrity sha512-AAV5Jw7tsniWwih8Ly3fXxEZ06y+6p5TwQMsw0dzZ/wPKilzyDgdAnL0Ug4NNIquPUOh1vfFWEHbmXUqM5+o8g== - -just-diff@^5.0.1: - version "5.1.1" - resolved "https://registry.yarnpkg.com/just-diff/-/just-diff-5.1.1.tgz#8da6414342a5ed6d02ccd64f5586cbbed3146202" - integrity sha512-u8HXJ3HlNrTzY7zrYYKjNEfBlyjqhdBkoyTVdjtn7p02RJD5NvR8rIClzeGA7t+UYP1/7eAkWNLU0+P3QrEqKQ== - -just-extend@^4.0.2: - version "4.1.1" - resolved "https://registry.yarnpkg.com/just-extend/-/just-extend-4.1.1.tgz#158f1fdb01f128c411dc8b286a7b4837b3545282" - integrity sha512-aWgeGFW67BP3e5181Ep1Fv2v8z//iBJfrvyTnq8wG86vEESwmonn1zPBJ0VfmT9CJq2FIT0VsETtrNFm2a+SHA== - -jwa@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/jwa/-/jwa-2.0.0.tgz#a7e9c3f29dae94027ebcaf49975c9345593410fc" - integrity sha512-jrZ2Qx916EA+fq9cEAeCROWPTfCwi1IVHqT2tapuqLEVVDKFDENFw1oL+MwrTvH6msKxsd1YTDVw6uKEcsrLEA== - dependencies: - buffer-equal-constant-time "1.0.1" - ecdsa-sig-formatter "1.0.11" - safe-buffer "^5.0.1" - -jws@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/jws/-/jws-4.0.0.tgz#2d4e8cf6a318ffaa12615e9dec7e86e6c97310f4" - integrity sha512-KDncfTmOZoOMTFG4mBlG0qUIOlc03fmzH+ru6RgYVZhPkyiy/92Owlt/8UEN+a4TXR1FQetfIpJE8ApdvdVxTg== - dependencies: - jwa "^2.0.0" - safe-buffer "^5.0.1" - -kind-of@^3.0.2, kind-of@^3.0.3, kind-of@^3.2.0: - version "3.2.2" - resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-3.2.2.tgz#31ea21a734bab9bbb0f32466d893aea51e4a3c64" - integrity sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ== - dependencies: - is-buffer "^1.1.5" - -kind-of@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-4.0.0.tgz#20813df3d712928b207378691a45066fae72dd57" - integrity sha512-24XsCxmEbRwEDbz/qz3stgin8TTzZ1ESR56OMCN0ujYg+vRutNSiOj9bHH9u85DKgXguraugV5sFuvbD4FW/hw== - dependencies: - is-buffer "^1.1.5" - -kind-of@^5.0.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-5.1.0.tgz#729c91e2d857b7a419a1f9aa65685c4c33f5845d" - integrity sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw== - -kind-of@^6.0.0, kind-of@^6.0.2, kind-of@^6.0.3: - version "6.0.3" - resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.3.tgz#07c05034a6c349fa06e24fa35aa76db4580ce4dd" - integrity sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw== - -kleur@^3.0.3: - version "3.0.3" - resolved "https://registry.yarnpkg.com/kleur/-/kleur-3.0.3.tgz#a79c9ecc86ee1ce3fa6206d1216c501f147fc07e" - integrity sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w== - -lerna@^6.0.0: - version "6.1.0" - resolved "https://registry.npmjs.org/lerna/-/lerna-6.1.0.tgz#693145393ec22fd3ca98d817deab2246c1e2b107" - integrity sha512-3qAjIj8dgBwHtCAiLbq4VU/C1V9D1tvTLm2owZubdGAN72aB5TxuCu2mcw+yeEorOcXuR9YWx7EXIkAf+G0N2w== - dependencies: - "@lerna/add" "6.1.0" - "@lerna/bootstrap" "6.1.0" - "@lerna/changed" "6.1.0" - "@lerna/clean" "6.1.0" - "@lerna/cli" "6.1.0" - "@lerna/command" "6.1.0" - "@lerna/create" "6.1.0" - "@lerna/diff" "6.1.0" - "@lerna/exec" "6.1.0" - "@lerna/import" "6.1.0" - "@lerna/info" "6.1.0" - "@lerna/init" "6.1.0" - "@lerna/link" "6.1.0" - "@lerna/list" "6.1.0" - "@lerna/publish" "6.1.0" - "@lerna/run" "6.1.0" - "@lerna/version" "6.1.0" - "@nrwl/devkit" ">=14.8.6 < 16" - import-local "^3.0.2" - inquirer "^8.2.4" - npmlog "^6.0.2" - nx ">=14.8.6 < 16" - typescript "^3 || ^4" - -level-codec@^9.0.0: - version "9.0.2" - resolved "https://registry.yarnpkg.com/level-codec/-/level-codec-9.0.2.tgz#fd60df8c64786a80d44e63423096ffead63d8cbc" - integrity sha512-UyIwNb1lJBChJnGfjmO0OR+ezh2iVu1Kas3nvBS/BzGnx79dv6g7unpKIDNPMhfdTEGoc7mC8uAu51XEtX+FHQ== - dependencies: - buffer "^5.6.0" - -level-concat-iterator@~2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/level-concat-iterator/-/level-concat-iterator-2.0.1.tgz#1d1009cf108340252cb38c51f9727311193e6263" - integrity sha512-OTKKOqeav2QWcERMJR7IS9CUo1sHnke2C0gkSmcR7QuEtFNLLzHQAvnMw8ykvEcv0Qtkg0p7FOwP1v9e5Smdcw== - -level-errors@^2.0.0, level-errors@~2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/level-errors/-/level-errors-2.0.1.tgz#2132a677bf4e679ce029f517c2f17432800c05c8" - integrity sha512-UVprBJXite4gPS+3VznfgDSU8PTRuVX0NXwoWW50KLxd2yw4Y1t2JUR5In1itQnudZqRMT9DlAM3Q//9NCjCFw== - dependencies: - errno "~0.1.1" - -level-iterator-stream@~4.0.0: - version "4.0.2" - resolved "https://registry.yarnpkg.com/level-iterator-stream/-/level-iterator-stream-4.0.2.tgz#7ceba69b713b0d7e22fcc0d1f128ccdc8a24f79c" - integrity sha512-ZSthfEqzGSOMWoUGhTXdX9jv26d32XJuHz/5YnuHZzH6wldfWMOVwI9TBtKcya4BKTyTt3XVA0A3cF3q5CY30Q== - dependencies: - inherits "^2.0.4" - readable-stream "^3.4.0" - xtend "^4.0.2" - -level-js@^5.0.0: - version "5.0.2" - resolved "https://registry.yarnpkg.com/level-js/-/level-js-5.0.2.tgz#5e280b8f93abd9ef3a305b13faf0b5397c969b55" - integrity sha512-SnBIDo2pdO5VXh02ZmtAyPP6/+6YTJg2ibLtl9C34pWvmtMEmRTWpra+qO/hifkUtBTOtfx6S9vLDjBsBK4gRg== - dependencies: - abstract-leveldown "~6.2.3" - buffer "^5.5.0" - inherits "^2.0.3" - ltgt "^2.1.2" - -level-packager@^5.1.0: - version "5.1.1" - resolved "https://registry.yarnpkg.com/level-packager/-/level-packager-5.1.1.tgz#323ec842d6babe7336f70299c14df2e329c18939" - integrity sha512-HMwMaQPlTC1IlcwT3+swhqf/NUO+ZhXVz6TY1zZIIZlIR0YSn8GtAAWmIvKjNY16ZkEg/JcpAuQskxsXqC0yOQ== - dependencies: - encoding-down "^6.3.0" - levelup "^4.3.2" - -level-supports@~1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/level-supports/-/level-supports-1.0.1.tgz#2f530a596834c7301622521988e2c36bb77d122d" - integrity sha512-rXM7GYnW8gsl1vedTJIbzOrRv85c/2uCMpiiCzO2fndd06U/kUXEEU9evYn4zFggBOg36IsBW8LzqIpETwwQzg== - dependencies: - xtend "^4.0.2" - -level@^6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/level/-/level-6.0.1.tgz#dc34c5edb81846a6de5079eac15706334b0d7cd6" - integrity sha512-psRSqJZCsC/irNhfHzrVZbmPYXDcEYhA5TVNwr+V92jF44rbf86hqGp8fiT702FyiArScYIlPSBTDUASCVNSpw== - dependencies: - level-js "^5.0.0" - level-packager "^5.1.0" - leveldown "^5.4.0" - -leveldown@^5.4.0: - version "5.6.0" - resolved "https://registry.yarnpkg.com/leveldown/-/leveldown-5.6.0.tgz#16ba937bb2991c6094e13ac5a6898ee66d3eee98" - integrity sha512-iB8O/7Db9lPaITU1aA2txU/cBEXAt4vWwKQRrrWuS6XDgbP4QZGj9BL2aNbwb002atoQ/lIotJkfyzz+ygQnUQ== - dependencies: - abstract-leveldown "~6.2.1" - napi-macros "~2.0.0" - node-gyp-build "~4.1.0" - -levelup@^4.3.2: - version "4.4.0" - resolved "https://registry.yarnpkg.com/levelup/-/levelup-4.4.0.tgz#f89da3a228c38deb49c48f88a70fb71f01cafed6" - integrity sha512-94++VFO3qN95cM/d6eBXvd894oJE0w3cInq9USsyQzzoJxmiYzPAocNcuGCPGGjoXqDVJcr3C1jzt1TSjyaiLQ== - dependencies: - deferred-leveldown "~5.3.0" - level-errors "~2.0.0" - level-iterator-stream "~4.0.0" - level-supports "~1.0.0" - xtend "~4.0.0" - -leven@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/leven/-/leven-3.1.0.tgz#77891de834064cccba82ae7842bb6b14a13ed7f2" - integrity sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A== - -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" - -levn@~0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/levn/-/levn-0.3.0.tgz#3b09924edf9f083c0490fdd4c0bc4421e04764ee" - integrity sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA== - dependencies: - prelude-ls "~1.1.2" - type-check "~0.3.2" - -lib0@^0.2.31, lib0@^0.2.42, lib0@^0.2.49, lib0@^0.2.52: - version "0.2.66" - resolved "https://registry.yarnpkg.com/lib0/-/lib0-0.2.66.tgz#791b21f825380fa7223ed074d26a45e34eaffda5" - integrity sha512-h63Jt0nmFGmE4aXMPHUuRBpDgkdr1gfeVn+epJJ8m6+gPK0AozP6akJ8rp9IqBP8RC/peLi+pwaOx/qpgAvqgA== - dependencies: - isomorphic.js "^0.2.4" - -libnpmaccess@^6.0.3: - version "6.0.3" - resolved "https://registry.yarnpkg.com/libnpmaccess/-/libnpmaccess-6.0.3.tgz#473cc3e4aadb2bc713419d92e45d23b070d8cded" - integrity sha512-4tkfUZprwvih2VUZYMozL7EMKgQ5q9VW2NtRyxWtQWlkLTAWHRklcAvBN49CVqEkhUw7vTX2fNgB5LzgUucgYg== - dependencies: - aproba "^2.0.0" - minipass "^3.1.1" - npm-package-arg "^9.0.1" - npm-registry-fetch "^13.0.0" - -libnpmpublish@^6.0.4: - version "6.0.4" - resolved "https://registry.yarnpkg.com/libnpmpublish/-/libnpmpublish-6.0.4.tgz#adb41ec6b0c307d6f603746a4d929dcefb8f1a0b" - integrity sha512-lvAEYW8mB8QblL6Q/PI/wMzKNvIrF7Kpujf/4fGS/32a2i3jzUXi04TNyIBcK6dQJ34IgywfaKGh+Jq4HYPFmg== - dependencies: - normalize-package-data "^4.0.0" - npm-package-arg "^9.0.1" - npm-registry-fetch "^13.0.0" - semver "^7.3.7" - ssri "^9.0.0" - -license-webpack-plugin@^2.3.14: - version "2.3.21" - resolved "https://registry.yarnpkg.com/license-webpack-plugin/-/license-webpack-plugin-2.3.21.tgz#152f5e82d5f51f8bab78905731f2b8042aa5691b" - integrity sha512-rVaYU9TddZN3ao8M/0PrRSCdTp2EW6VQymlgsuScld1vef0Ou7fALx3ePe83KLP3xAEDcPK5fkqUVqGBnbz1zQ== - dependencies: - "@types/webpack-sources" "^0.1.5" - webpack-sources "^1.2.0" - -lines-and-columns@^1.1.6: - version "1.2.4" - resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.2.4.tgz#eca284f75d2965079309dc0ad9255abb2ebc1632" - integrity sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg== - -load-json-file@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-4.0.0.tgz#2f5f45ab91e33216234fd53adab668eb4ec0993b" - integrity sha1-L19Fq5HjMhYjT9U62rZo607AmTs= - dependencies: - graceful-fs "^4.1.2" - parse-json "^4.0.0" - pify "^3.0.0" - strip-bom "^3.0.0" - -load-json-file@^6.2.0: - version "6.2.0" - resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-6.2.0.tgz#5c7770b42cafa97074ca2848707c61662f4251a1" - integrity sha512-gUD/epcRms75Cw8RT1pUdHugZYM5ce64ucs2GEISABwkRsOQr0q2wm/MV2TKThycIe5e0ytRweW2RZxclogCdQ== - dependencies: - graceful-fs "^4.1.15" - parse-json "^5.0.0" - strip-bom "^4.0.0" - type-fest "^0.6.0" - -loader-runner@^4.2.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/loader-runner/-/loader-runner-4.3.0.tgz#c1b4a163b99f614830353b16755e7149ac2314e1" - integrity sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg== - -loader-utils@^1.0.0, loader-utils@^1.1.0: - version "1.4.2" - resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-1.4.2.tgz#29a957f3a63973883eb684f10ffd3d151fec01a3" - integrity sha512-I5d00Pd/jwMD2QCduo657+YM/6L3KZu++pmX9VFncxaxvHcru9jx1lBaFft+r4Mt2jK0Yhp41XlRAihzPxHNCg== - dependencies: - big.js "^5.2.2" - emojis-list "^3.0.0" - json5 "^1.0.1" - -loader-utils@^2.0.0, loader-utils@~2.0.0: - version "2.0.4" - resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-2.0.4.tgz#8b5cb38b5c34a9a018ee1fc0e6a066d1dfcc528c" - integrity sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw== - dependencies: - big.js "^5.2.2" - emojis-list "^3.0.0" - json5 "^2.1.2" - -locate-path@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-2.0.0.tgz#2b568b265eec944c6d9c0de9c3dbbbca0354cd8e" - integrity sha1-K1aLJl7slExtnA3pw9u7ygNUzY4= - dependencies: - p-locate "^2.0.0" - path-exists "^3.0.0" - -locate-path@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-3.0.0.tgz#dbec3b3ab759758071b58fe59fc41871af21400e" - integrity sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A== - dependencies: - p-locate "^3.0.0" - path-exists "^3.0.0" - -locate-path@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-5.0.0.tgz#1afba396afd676a6d42504d0a67a3a7eb9f62aa0" - integrity sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g== - dependencies: - p-locate "^4.1.0" - -locate-path@^6.0.0: - version "6.0.0" - resolved "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz#55321eb309febbc59c4801d931a72452a681d286" - integrity sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw== - dependencies: - p-locate "^5.0.0" - -lodash.debounce@^4.0.8: - version "4.0.8" - resolved "https://registry.yarnpkg.com/lodash.debounce/-/lodash.debounce-4.0.8.tgz#82d79bff30a67c4005ffd5e2515300ad9ca4d7af" - integrity sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow== - -lodash.escape@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/lodash.escape/-/lodash.escape-4.0.1.tgz#c9044690c21e04294beaa517712fded1fa88de98" - integrity sha512-nXEOnb/jK9g0DYMr1/Xvq6l5xMD7GDG55+GSYIYmS0G4tBk/hURD4JR9WCavs04t33WmJx9kCyp9vJ+mr4BOUw== - -lodash.includes@^4.2.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/lodash.includes/-/lodash.includes-4.3.0.tgz#60bb98a87cb923c68ca1e51325483314849f553f" - integrity sha1-YLuYqHy5I8aMoeUTJUgzFISfVT8= - -lodash.ismatch@^4.4.0: - version "4.4.0" - resolved "https://registry.yarnpkg.com/lodash.ismatch/-/lodash.ismatch-4.4.0.tgz#756cb5150ca3ba6f11085a78849645f188f85f37" - integrity sha1-dWy1FQyjum8RCFp4hJZF8Yj4Xzc= - -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.mergewith@^4.6.1: - version "4.6.2" - resolved "https://registry.yarnpkg.com/lodash.mergewith/-/lodash.mergewith-4.6.2.tgz#617121f89ac55f59047c7aec1ccd6654c6590f55" - integrity sha512-GK3g5RPZWTRSeLSpgP8Xhra+pnjBC56q9FZYe1d5RN3TJ35dbkGy3YqBSMbyCrlbi+CM9Z3Jk5yTL7RCsqboyQ== - -lodash@4.x, lodash@^4.17.11, lodash@^4.17.15, lodash@^4.17.21, lodash@^4.17.4, lodash@^4.7.0: - version "4.17.21" - resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" - integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== - -log-symbols@2.2.0, log-symbols@^2.1.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-2.2.0.tgz#5740e1c5d6f0dfda4ad9323b5332107ef6b4c40a" - integrity sha512-VeIAFslyIerEJLXHziedo2basKbMKtTw3vfn5IzG0XTjhAVEJyNHnL2p7vc+wBDSdQuUpNw3M2u6xb9QsAY5Eg== - dependencies: - chalk "^2.0.1" - -log-symbols@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-4.1.0.tgz#3fbdbb95b4683ac9fc785111e792e558d4abd503" - integrity sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg== - dependencies: - chalk "^4.1.0" - is-unicode-supported "^0.1.0" - -log4js@^6.2.1: - version "6.4.3" - resolved "https://registry.yarnpkg.com/log4js/-/log4js-6.4.3.tgz#8bddd981846873895bcc55c0961560c7214a8ad7" - integrity sha512-H/oQKcCVIhQ8zCtUh5aftdp9eRpGyVB1M5sKzAJ0i10q5jS+YXk133vtLgzT1RIoWMbIn7QD1LUto8a1hqh6gA== - dependencies: - date-format "^4.0.5" - debug "^4.3.3" - flatted "^3.2.5" - rfdc "^1.3.0" - streamroller "^3.0.5" - -lolex@^4.2.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/lolex/-/lolex-4.2.0.tgz#ddbd7f6213ca1ea5826901ab1222b65d714b3cd7" - integrity sha512-gKO5uExCXvSm6zbF562EvM+rd1kQDnB9AZBbiQVzf1ZmdDpxUSvpnAaVOP83N/31mRK8Ml8/VE8DMvsAZQ+7wg== - -lolex@^5.0.1: - version "5.1.2" - resolved "https://registry.yarnpkg.com/lolex/-/lolex-5.1.2.tgz#953694d098ce7c07bc5ed6d0e42bc6c0c6d5a367" - integrity sha512-h4hmjAvHTmd+25JSwrtTIuwbKdwg5NzZVRMLn9saij4SZaepCrTCxPr35H/3bjwfMJtN+t3CX8672UIkglz28A== - dependencies: - "@sinonjs/commons" "^1.7.0" - -long@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/long/-/long-4.0.0.tgz#9a7b71cfb7d361a194ea555241c92f7468d5bf28" - integrity sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA== - -loose-envify@^1.0.0, loose-envify@^1.1.0, loose-envify@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf" - integrity sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q== - dependencies: - js-tokens "^3.0.0 || ^4.0.0" - -loupe@^2.3.1: - version "2.3.4" - resolved "https://registry.yarnpkg.com/loupe/-/loupe-2.3.4.tgz#7e0b9bffc76f148f9be769cb1321d3dcf3cb25f3" - integrity sha512-OvKfgCC2Ndby6aSTREl5aCCPTNIzlDfQZvZxNUrBrihDhL3xcrYegTblhmEiCrg2kKQz4XsFIaemE5BF4ybSaQ== - dependencies: - get-func-name "^2.0.0" - -lower-case@^1.1.1: - version "1.1.4" - resolved "https://registry.yarnpkg.com/lower-case/-/lower-case-1.1.4.tgz#9a2cabd1b9e8e0ae993a4bf7d5875c39c42e8eac" - integrity sha512-2Fgx1Ycm599x+WGpIYwJOvsjmXFzTSc34IwDWALRA/8AopUKAVPwfJ+h5+f85BCp0PWmmJcWzEpxOpoXycMpdA== - -lru-cache@^4.0.1, lru-cache@^4.1.3: - version "4.1.5" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-4.1.5.tgz#8bbe50ea85bed59bc9e33dcab8235ee9bcf443cd" - integrity sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g== - dependencies: - pseudomap "^1.0.2" - yallist "^2.1.2" - -lru-cache@^5.1.1: - version "5.1.1" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-5.1.1.tgz#1da27e6710271947695daf6848e847f01d84b920" - integrity sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w== - dependencies: - yallist "^3.0.2" - -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" - -lru-cache@^7.4.4, lru-cache@^7.5.1, lru-cache@^7.7.1: - version "7.14.0" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-7.14.0.tgz#21be64954a4680e303a09e9468f880b98a0b3c7f" - integrity sha512-EIRtP1GrSJny0dqb50QXRUNBxHJhcpxHC++M5tD7RYbvLLn5KVWKsbyswSSqDuU15UFi3bgTQIY8nhDMeF6aDQ== - -lru-queue@0.1: - version "0.1.0" - resolved "https://registry.yarnpkg.com/lru-queue/-/lru-queue-0.1.0.tgz#2738bd9f0d3cf4f84490c5736c48699ac632cda3" - integrity sha1-Jzi9nw089PhEkMVzbEhpmsYyzaM= - dependencies: - es5-ext "~0.10.2" - -"lsp-ws-connection@file:packages/lsp-ws-connection": - version "0.7.1" - dependencies: - vscode-jsonrpc "^6.0.0" - vscode-languageserver-protocol "^3.16.0" - vscode-languageserver-types "^3.16.0" - vscode-ws-jsonrpc "~1.0.2" - -ltgt@^2.1.2: - version "2.2.1" - resolved "https://registry.yarnpkg.com/ltgt/-/ltgt-2.2.1.tgz#f35ca91c493f7b73da0e07495304f17b31f87ee5" - integrity sha512-AI2r85+4MquTw9ZYqabu4nMwy9Oftlfa/e/52t9IjtfG+mGBbTNdAoZ3RQKLHR6r0wQnwZnPIEh/Ya6XTWAKNA== - -lunr@^2.3.9: - version "2.3.9" - resolved "https://registry.yarnpkg.com/lunr/-/lunr-2.3.9.tgz#18b123142832337dd6e964df1a5a7707b25d35e1" - integrity sha512-zTU3DaZaF3Rt9rhN3uBMGQD3dD2/vFQqnvZCDv4dl5iOzq2IZQqTxu90r4E5J+nP70J3ilqVCrbho2eWaeW8Ow== - -make-dir@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-2.1.0.tgz#5f0310e18b8be898cc07009295a30ae41e91e6f5" - integrity sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA== - dependencies: - pify "^4.0.1" - semver "^5.6.0" - -make-dir@^3.0.0, make-dir@^3.0.2, make-dir@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-3.1.0.tgz#415e967046b3a7f1d185277d84aa58203726a13f" - integrity sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw== - dependencies: - semver "^6.0.0" - -make-error@1.x: - version "1.3.6" - resolved "https://registry.yarnpkg.com/make-error/-/make-error-1.3.6.tgz#2eb2e37ea9b67c4891f684a1394799af484cf7a2" - integrity sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw== - -make-fetch-happen@^10.0.6: - version "10.2.1" - resolved "https://registry.yarnpkg.com/make-fetch-happen/-/make-fetch-happen-10.2.1.tgz#f5e3835c5e9817b617f2770870d9492d28678164" - integrity sha512-NgOPbRiaQM10DYXvN3/hhGVI2M5MtITFryzBGxHM5p4wnFxsVCbxkrBrDsk+EZ5OB4jEOT7AjDxtdF+KVEFT7w== - 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" - -make-fetch-happen@^9.1.0: - version "9.1.0" - resolved "https://registry.yarnpkg.com/make-fetch-happen/-/make-fetch-happen-9.1.0.tgz#53085a09e7971433e6765f7971bf63f4e05cb968" - integrity sha512-+zopwDy7DNknmwPQplem5lAZX/eCOzSvSNNcSKm5eVwTkOBzoktEfXsa9L23J/GIRhxRsaxzkPEhrJEpE2F4Gg== - 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" - -makeerror@1.0.12: - version "1.0.12" - resolved "https://registry.yarnpkg.com/makeerror/-/makeerror-1.0.12.tgz#3e5dd2079a82e812e983cc6610c4a2cb0eaa801a" - integrity sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg== - dependencies: - tmpl "1.0.5" - -map-cache@^0.2.2: - version "0.2.2" - resolved "https://registry.yarnpkg.com/map-cache/-/map-cache-0.2.2.tgz#c32abd0bd6525d9b051645bb4f26ac5dc98a0dbf" - integrity sha512-8y/eV9QQZCiyn1SprXSrCmqJN0yNRATe+PO8ztwqrvrbdRLA3eYJF0yaR0YayLWkMbsQSKWS9N2gPcGEc4UsZg== - -map-obj@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/map-obj/-/map-obj-1.0.1.tgz#d933ceb9205d82bdcf4886f6742bdc2b4dea146d" - integrity sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0= - -map-obj@^4.0.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/map-obj/-/map-obj-4.1.0.tgz#b91221b542734b9f14256c0132c897c5d7256fd5" - integrity sha512-glc9y00wgtwcDmp7GaE/0b0OnxpNJsVf3ael/An6Fe2Q51LLwN1er6sdomLRzz5h0+yMpiYLhWYF5R7HeqVd4g== - -map-visit@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/map-visit/-/map-visit-1.0.0.tgz#ecdca8f13144e660f1b5bd41f12f3479d98dfb8f" - integrity sha512-4y7uGv8bd2WdM9vpQsiQNo41Ln1NvhvDRuVt0k2JZQ+ezN2uaQes7lZeZ+QQUHOLQAtDaBJ+7wCbi+ab/KFs+w== - dependencies: - object-visit "^1.0.0" - -markdown-escapes@^1.0.0: - version "1.0.4" - resolved "https://registry.yarnpkg.com/markdown-escapes/-/markdown-escapes-1.0.4.tgz#c95415ef451499d7602b91095f3c8e8975f78535" - integrity sha512-8z4efJYk43E0upd0NbVXwgSTQs6cT3T06etieCMEg7dRbzCbxUCK/GHlX8mhHRDcp+OLlHkPKsvqQTCvsRl2cg== - -markdown-loader-jest@^0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/markdown-loader-jest/-/markdown-loader-jest-0.1.1.tgz#7de45f7e6c8644805bd02ca126dfb54a55cf8255" - integrity sha512-osdgJgjxP/9C+vcIkTxU5p91C3+IkD2yY+SvG4GcFOOfAK0mixqepDSkNdMIsCf10KK9DfHjPUslnzKLH1tktg== - dependencies: - html-loader "^0.5.1" - markdown-loader "^2.0.1" - -markdown-loader@^2.0.1: - version "2.0.2" - resolved "https://registry.yarnpkg.com/markdown-loader/-/markdown-loader-2.0.2.tgz#1cdcf11307658cd611046d7db34c2fe80542af7c" - integrity sha512-v/ej7DflZbb6t//3Yu9vg0T+sun+Q9EoqggifeyABKfvFROqPwwwpv+hd1NKT2QxTRg6VCFk10IIJcMI13yCoQ== - dependencies: - loader-utils "^1.1.0" - marked "^0.3.9" - -marked@^0.3.9: - version "0.3.19" - resolved "https://registry.yarnpkg.com/marked/-/marked-0.3.19.tgz#5d47f709c4c9fc3c216b6d46127280f40b39d790" - integrity sha512-ea2eGWOqNxPcXv8dyERdSr/6FmzvWwzjMxpfGB/sbMccXoct+xY+YukPD+QTUZwyvK7BZwcr4m21WBOW41pAkg== - -marked@^4.0.12, marked@^4.0.17: - version "4.2.12" - resolved "https://registry.yarnpkg.com/marked/-/marked-4.2.12.tgz#d69a64e21d71b06250da995dcd065c11083bebb5" - integrity sha512-yr8hSKa3Fv4D3jdZmtMMPghgVt6TWbk86WQaWhDloQjRSQhMMYCAro7jP7VDJrjjdV8pxVxMssXS8B8Y5DZ5aw== - -mdast-comment-marker@^1.0.0: - version "1.1.2" - resolved "https://registry.yarnpkg.com/mdast-comment-marker/-/mdast-comment-marker-1.1.2.tgz#5ad2e42cfcc41b92a10c1421a98c288d7b447a6d" - integrity sha512-vTFXtmbbF3rgnTh3Zl3irso4LtvwUq/jaDvT2D1JqTGAwaipcS7RpTxzi6KjoRqI9n2yuAhzLDAC8xVTF3XYVQ== - -mdast-util-heading-style@^1.0.2: - version "1.0.6" - resolved "https://registry.yarnpkg.com/mdast-util-heading-style/-/mdast-util-heading-style-1.0.6.tgz#6410418926fd5673d40f519406b35d17da10e3c5" - integrity sha512-8ZuuegRqS0KESgjAGW8zTx4tJ3VNIiIaGFNEzFpRSAQBavVc7AvOo9I4g3crcZBfYisHs4seYh0rAVimO6HyOw== - -mdast-util-to-nlcst@^3.2.0: - version "3.2.3" - resolved "https://registry.yarnpkg.com/mdast-util-to-nlcst/-/mdast-util-to-nlcst-3.2.3.tgz#dcd0f51b59515b11a0700aeb40f168ed7ba9ed3d" - integrity sha512-hPIsgEg7zCvdU6/qvjcR6lCmJeRuIEpZGY5xBV+pqzuMOvQajyyF8b6f24f8k3Rw8u40GwkI3aAxUXr3bB2xag== - dependencies: - nlcst-to-string "^2.0.0" - repeat-string "^1.5.2" - unist-util-position "^3.0.0" - vfile-location "^2.0.0" - -mdast-util-to-string@^1.0.2: - version "1.1.0" - resolved "https://registry.yarnpkg.com/mdast-util-to-string/-/mdast-util-to-string-1.1.0.tgz#27055500103f51637bd07d01da01eb1967a43527" - integrity sha512-jVU0Nr2B9X3MU4tSK7JP1CMkSvOj7X5l/GboG1tKRw52lLF1x2Ju92Ms9tNetCcbfX3hzlM73zYo2NKkWSfF/A== - -memoizee@^0.4.14: - version "0.4.14" - resolved "https://registry.yarnpkg.com/memoizee/-/memoizee-0.4.14.tgz#07a00f204699f9a95c2d9e77218271c7cd610d57" - integrity sha512-/SWFvWegAIYAO4NQMpcX+gcra0yEZu4OntmUdrBaWrJncxOqAziGFlHxc7yjKVK2uu3lpPW27P27wkR82wA8mg== - dependencies: - d "1" - es5-ext "^0.10.45" - es6-weak-map "^2.0.2" - event-emitter "^0.3.5" - is-promise "^2.1" - lru-queue "0.1" - next-tick "1" - timers-ext "^0.1.5" - -memorystream@^0.3.1: - version "0.3.1" - resolved "https://registry.yarnpkg.com/memorystream/-/memorystream-0.3.1.tgz#86d7090b30ce455d63fbae12dda51a47ddcaf9b2" - integrity sha1-htcJCzDORV1j+64S3aUaR93K+bI= - -meow@^8.0.0: - version "8.1.2" - resolved "https://registry.yarnpkg.com/meow/-/meow-8.1.2.tgz#bcbe45bda0ee1729d350c03cffc8395a36c4e897" - integrity sha512-r85E3NdZ+mpYk1C6RjPFEMSE+s1iZMuHtsHAqY0DT3jZczl0diWUZ8g6oU7h0M9cD2EL+PzaYghhCLzR0ZNn5Q== - dependencies: - "@types/minimist" "^1.2.0" - camelcase-keys "^6.2.2" - decamelize-keys "^1.1.0" - hard-rejection "^2.1.0" - minimist-options "4.1.0" - normalize-package-data "^3.0.0" - read-pkg-up "^7.0.1" - redent "^3.0.0" - trim-newlines "^3.0.0" - type-fest "^0.18.0" - yargs-parser "^20.2.3" - -merge-stream@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60" - integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w== - -merge2@^1.3.0, merge2@^1.4.1: - version "1.4.1" - resolved "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" - integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== - -micromatch@^3.1.4: - version "3.1.10" - resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-3.1.10.tgz#70859bc95c9840952f359a068a3fc49f9ecfac23" - integrity sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg== - dependencies: - arr-diff "^4.0.0" - array-unique "^0.3.2" - braces "^2.3.1" - define-property "^2.0.2" - extend-shallow "^3.0.2" - extglob "^2.0.4" - fragment-cache "^0.2.1" - kind-of "^6.0.2" - nanomatch "^1.2.9" - object.pick "^1.3.0" - regex-not "^1.0.0" - snapdragon "^0.8.1" - to-regex "^3.0.2" - -micromatch@^4.0.2, micromatch@^4.0.4: - version "4.0.5" - resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.5.tgz#bc8999a7cbbf77cdc89f132f6e467051b49090c6" - integrity sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA== - dependencies: - braces "^3.0.2" - picomatch "^2.3.1" - -mime-db@1.52.0: - version "1.52.0" - resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70" - integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg== - -mime-types@^2.1.12, mime-types@^2.1.27: - version "2.1.35" - resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.35.tgz#381a871b62a734450660ae3deee44813f70d959a" - integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw== - dependencies: - mime-db "1.52.0" - -mimic-fn@^1.0.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-1.2.0.tgz#820c86a39334640e99516928bd03fca88057d022" - integrity sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ== - -mimic-fn@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" - integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== - -min-indent@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/min-indent/-/min-indent-1.0.1.tgz#a63f681673b30571fbe8bc25686ae746eefa9869" - integrity sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg== - -mini-css-extract-plugin@~1.3.2: - version "1.3.9" - resolved "https://registry.yarnpkg.com/mini-css-extract-plugin/-/mini-css-extract-plugin-1.3.9.tgz#47a32132b0fd97a119acd530e8421e8f6ab16d5e" - integrity sha512-Ac4s+xhVbqlyhXS5J/Vh/QXUz3ycXlCqoCPpg0vdfhsIBH9eg/It/9L1r1XhSCH737M1lqcWnMuWL13zcygn5A== - dependencies: - loader-utils "^2.0.0" - schema-utils "^3.0.0" - webpack-sources "^1.1.0" - -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" - -minimatch@3.0.5: - version "3.0.5" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.5.tgz#4da8f1290ee0f0f8e83d60ca69f8f134068604a3" - integrity sha512-tUpxzX0VAzJHjLu0xUfFv1gwVp9ba3IOuRAVH2EGuRW8a5emA2FlACLqiT/lDVtS1W+TGNwqz3sWaNyLgDJWuw== - dependencies: - brace-expansion "^1.1.7" - -minimatch@^3.0.4, minimatch@^3.0.5, minimatch@^3.1.1, minimatch@^3.1.2: - version "3.1.2" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" - integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== - dependencies: - brace-expansion "^1.1.7" - -minimatch@^5.0.1: - version "5.1.6" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-5.1.6.tgz#1cfcb8cf5522ea69952cd2af95ae09477f122a96" - integrity sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g== - dependencies: - brace-expansion "^2.0.1" - -minimist-options@4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/minimist-options/-/minimist-options-4.1.0.tgz#c0655713c53a8a2ebd77ffa247d342c40f010619" - integrity sha512-Q4r8ghd80yhO/0j1O3B2BjweX3fiHg9cdOwjJd2J76Q135c+NDxGCqdYKQ1SKBuFfgWbAUzBfvYjPUEeNgqN1A== - dependencies: - arrify "^1.0.1" - is-plain-obj "^1.1.0" - kind-of "^6.0.3" - -minimist@^1.1.1, minimist@^1.2.0, minimist@^1.2.5, minimist@^1.2.6, minimist@~1.2.0: - version "1.2.8" - resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.8.tgz#c1a464e7693302e082a075cee0c057741ac4772c" - integrity sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA== - -minipass-collect@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/minipass-collect/-/minipass-collect-1.0.2.tgz#22b813bf745dc6edba2576b940022ad6edc8c617" - integrity sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA== - dependencies: - minipass "^3.0.0" - -minipass-fetch@^1.3.2: - version "1.4.1" - resolved "https://registry.yarnpkg.com/minipass-fetch/-/minipass-fetch-1.4.1.tgz#d75e0091daac1b0ffd7e9d41629faff7d0c1f1b6" - integrity sha512-CGH1eblLq26Y15+Azk7ey4xh0J/XfJfrCox5LDJiKqI2Q2iwOLOKrlmIaODiSQS8d18jalF6y2K2ePUm0CmShw== - dependencies: - minipass "^3.1.0" - minipass-sized "^1.0.3" - minizlib "^2.0.0" - optionalDependencies: - encoding "^0.1.12" - -minipass-fetch@^2.0.3: - version "2.1.2" - resolved "https://registry.yarnpkg.com/minipass-fetch/-/minipass-fetch-2.1.2.tgz#95560b50c472d81a3bc76f20ede80eaed76d8add" - integrity sha512-LT49Zi2/WMROHYoqGgdlQIZh8mLPZmOrN2NdJjMXxYe4nkN6FUyuPuOAOedNJDrx0IRGg9+4guZewtp8hE6TxA== - dependencies: - minipass "^3.1.6" - minipass-sized "^1.0.3" - minizlib "^2.1.2" - optionalDependencies: - encoding "^0.1.13" - -minipass-flush@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/minipass-flush/-/minipass-flush-1.0.5.tgz#82e7135d7e89a50ffe64610a787953c4c4cbb373" - integrity sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw== - dependencies: - minipass "^3.0.0" - -minipass-json-stream@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/minipass-json-stream/-/minipass-json-stream-1.0.1.tgz#7edbb92588fbfc2ff1db2fc10397acb7b6b44aa7" - integrity sha512-ODqY18UZt/I8k+b7rl2AENgbWE8IDYam+undIJONvigAz8KR5GWblsFTEfQs0WODsjbSXWlm+JHEv8Gr6Tfdbg== - dependencies: - jsonparse "^1.3.1" - minipass "^3.0.0" - -minipass-pipeline@^1.2.2, minipass-pipeline@^1.2.4: - version "1.2.4" - resolved "https://registry.yarnpkg.com/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz#68472f79711c084657c067c5c6ad93cddea8214c" - integrity sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A== - dependencies: - minipass "^3.0.0" - -minipass-sized@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/minipass-sized/-/minipass-sized-1.0.3.tgz#70ee5a7c5052070afacfbc22977ea79def353b70" - integrity sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g== - dependencies: - minipass "^3.0.0" - -minipass@^3.0.0, minipass@^3.1.0, minipass@^3.1.1, minipass@^3.1.3, minipass@^3.1.6: - version "3.3.6" - resolved "https://registry.yarnpkg.com/minipass/-/minipass-3.3.6.tgz#7bba384db3a1520d18c9c0e5251c3444e95dd94a" - integrity sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw== - dependencies: - yallist "^4.0.0" - -minipass@^4.0.0: - version "4.2.5" - resolved "https://registry.yarnpkg.com/minipass/-/minipass-4.2.5.tgz#9e0e5256f1e3513f8c34691dd68549e85b2c8ceb" - integrity sha512-+yQl7SX3bIT83Lhb4BVorMAHVuqsskxRdlmO9kTpyukp8vsm2Sn/fUOV9xlnG8/a5JsypJzap21lz/y3FBMJ8Q== - -minizlib@^2.0.0, minizlib@^2.1.1, minizlib@^2.1.2: - version "2.1.2" - resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-2.1.2.tgz#e90d3466ba209b932451508a11ce3d3632145931" - integrity sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg== - dependencies: - minipass "^3.0.0" - yallist "^4.0.0" - -mixin-deep@^1.2.0: - version "1.3.2" - resolved "https://registry.yarnpkg.com/mixin-deep/-/mixin-deep-1.3.2.tgz#1120b43dc359a785dce65b55b82e257ccf479566" - integrity sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA== - dependencies: - for-in "^1.0.2" - is-extendable "^1.0.1" - -mkdirp-infer-owner@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/mkdirp-infer-owner/-/mkdirp-infer-owner-2.0.0.tgz#55d3b368e7d89065c38f32fd38e638f0ab61d316" - integrity sha512-sdqtiFt3lkOaYvTXSRIUjkIdPTcxgv5+fgqYE/5qgwdw12cOrAuzzgzvVExIkH/ul1oeHN3bCLOWSG3XOqbKKw== - dependencies: - chownr "^2.0.0" - infer-owner "^1.0.4" - mkdirp "^1.0.3" - -mkdirp@0.5.4, mkdirp@^0.5.1: - version "0.5.4" - resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.4.tgz#fd01504a6797ec5c9be81ff43d204961ed64a512" - integrity sha512-iG9AK/dJLtJ0XNgTuDbSyNS3zECqDlAhnQW4CsNxBG3LQJBbHmRX1egw39DmtOdCAqY+dKXV+sgPgilNWUKMVw== - dependencies: - minimist "^1.2.5" - -mkdirp@1.x, mkdirp@^1.0.3, mkdirp@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e" - integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw== - -mocha@^6.1.4: - version "6.2.3" - resolved "https://registry.yarnpkg.com/mocha/-/mocha-6.2.3.tgz#e648432181d8b99393410212664450a4c1e31912" - integrity sha512-0R/3FvjIGH3eEuG17ccFPk117XL2rWxatr81a57D+r/x2uTYZRbdZ4oVidEUMh2W2TJDa7MdAb12Lm2/qrKajg== - dependencies: - ansi-colors "3.2.3" - browser-stdout "1.3.1" - debug "3.2.6" - diff "3.5.0" - escape-string-regexp "1.0.5" - find-up "3.0.0" - glob "7.1.3" - growl "1.10.5" - he "1.2.0" - js-yaml "3.13.1" - log-symbols "2.2.0" - minimatch "3.0.4" - mkdirp "0.5.4" - ms "2.1.1" - node-environment-flags "1.0.5" - object.assign "4.1.0" - strip-json-comments "2.0.1" - supports-color "6.0.0" - which "1.3.1" - wide-align "1.1.3" - yargs "13.3.2" - yargs-parser "13.1.2" - yargs-unparser "1.6.0" - -modify-values@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/modify-values/-/modify-values-1.0.1.tgz#b3939fa605546474e3e3e3c63d64bd43b4ee6022" - integrity sha512-xV2bxeN6F7oYjZWTe/YPAy6MN2M+sL4u/Rlm2AHCIVGfo2p1yGmBHQ6vHehl4bRTZBdHu3TSkWdYgkwpYzAGSw== - -moment@^2.24.0: - version "2.29.4" - resolved "https://registry.yarnpkg.com/moment/-/moment-2.29.4.tgz#3dbe052889fe7c1b2ed966fcb3a77328964ef108" - integrity sha512-5LC9SOxjSc2HF6vO2CyuTDNivEdoz2IvyJJGj6X8DJ0eFyfszE0QiEd+iXmBvUP3WHxSjFH/vIsA0EN00cgr8w== - -mri@^1.1.0: - version "1.1.6" - resolved "https://registry.yarnpkg.com/mri/-/mri-1.1.6.tgz#49952e1044db21dbf90f6cd92bc9c9a777d415a6" - integrity sha512-oi1b3MfbyGa7FJMP9GmLTttni5JoICpYBRlq+x5V16fZbLsnL9N3wFqqIm/nIG43FjUFkFh9Epzp/kzUGUnJxQ== - -ms@2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" - integrity sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A== - -ms@2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.1.tgz#30a5864eb3ebb0a66f2ebe6d727af06a09d86e0a" - integrity sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg== - -ms@2.1.2, ms@^2.0.0, ms@^2.1.1: - version "2.1.2" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" - integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== - -multimatch@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/multimatch/-/multimatch-5.0.0.tgz#932b800963cea7a31a033328fa1e0c3a1874dbe6" - integrity sha512-ypMKuglUrZUD99Tk2bUQ+xNQj43lPEfAeX2o9cTteAmShXy2VHDJpuwu1o0xqoKCt9jLVAvwyFKdLTPXKAfJyA== - dependencies: - "@types/minimatch" "^3.0.3" - array-differ "^3.0.0" - array-union "^2.1.0" - arrify "^2.0.1" - minimatch "^3.0.4" - -mute-stream@0.0.8, mute-stream@~0.0.4: - version "0.0.8" - resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.8.tgz#1630c42b2251ff81e2a283de96a5497ea92e5e0d" - integrity sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA== - -mysql2@^2.3.0: - version "2.3.3" - resolved "https://registry.yarnpkg.com/mysql2/-/mysql2-2.3.3.tgz#944f3deca4b16629052ff8614fbf89d5552545a0" - integrity sha512-wxJUev6LgMSgACDkb/InIFxDprRa6T95+VEoR+xPvtngtccNH2dGjEB/fVZ8yg1gWv1510c9CvXuJHi5zUm0ZA== - dependencies: - denque "^2.0.1" - generate-function "^2.3.1" - iconv-lite "^0.6.3" - long "^4.0.0" - lru-cache "^6.0.0" - named-placeholders "^1.1.2" - seq-queue "^0.0.5" - sqlstring "^2.3.2" - -mz@^2.7.0: - version "2.7.0" - resolved "https://registry.yarnpkg.com/mz/-/mz-2.7.0.tgz#95008057a56cafadc2bc63dde7f9ff6955948e32" - integrity sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q== - dependencies: - any-promise "^1.0.0" - object-assign "^4.0.1" - thenify-all "^1.0.0" - -named-placeholders@^1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/named-placeholders/-/named-placeholders-1.1.2.tgz#ceb1fbff50b6b33492b5cf214ccf5e39cef3d0e8" - integrity sha512-wiFWqxoLL3PGVReSZpjLVxyJ1bRqe+KKJVbr4hGs1KWfTZTQyezHFBbuKj9hsizHyGV2ne7EMjHdxEGAybD5SA== - dependencies: - lru-cache "^4.1.3" - -nanoid@^3.1.23, nanoid@^3.3.4: - version "3.3.4" - resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.4.tgz#730b67e3cd09e2deacf03c027c81c9d9dbc5e8ab" - integrity sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw== - -nanomatch@^1.2.9: - version "1.2.13" - resolved "https://registry.yarnpkg.com/nanomatch/-/nanomatch-1.2.13.tgz#b87a8aa4fc0de8fe6be88895b38983ff265bd119" - integrity sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA== - dependencies: - arr-diff "^4.0.0" - array-unique "^0.3.2" - define-property "^2.0.2" - extend-shallow "^3.0.2" - fragment-cache "^0.2.1" - is-windows "^1.0.2" - kind-of "^6.0.2" - object.pick "^1.3.0" - regex-not "^1.0.0" - snapdragon "^0.8.1" - to-regex "^3.0.1" - -napi-macros@~2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/napi-macros/-/napi-macros-2.0.0.tgz#2b6bae421e7b96eb687aa6c77a7858640670001b" - integrity sha512-A0xLykHtARfueITVDernsAWdtIMbOJgKgcluwENp3AlsKN/PloyO10HtmoqnFAQAcxPkgZN7wdfPfEd0zNGxbg== - -natural-compare-lite@^1.4.0: - version "1.4.0" - resolved "https://registry.npmjs.org/natural-compare-lite/-/natural-compare-lite-1.4.0.tgz#17b09581988979fddafe0201e931ba933c96cbb4" - integrity sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g== - -natural-compare@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" - integrity sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw== - -negotiator@^0.6.2, negotiator@^0.6.3: - version "0.6.3" - resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.3.tgz#58e323a72fedc0d6f9cd4d31fe49f51479590ccd" - integrity sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg== - -neo-async@^2.6.0, neo-async@^2.6.2: - version "2.6.2" - resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.2.tgz#b4aafb93e3aeb2d8174ca53cf163ab7d7308305f" - integrity sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw== - -next-tick@1, next-tick@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/next-tick/-/next-tick-1.1.0.tgz#1836ee30ad56d67ef281b22bd199f709449b35eb" - integrity sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ== - -nice-try@^1.0.4: - version "1.0.5" - resolved "https://registry.yarnpkg.com/nice-try/-/nice-try-1.0.5.tgz#a3378a7696ce7d223e88fc9b764bd7ef1089e366" - integrity sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ== - -nise@^1.5.2: - version "1.5.3" - resolved "https://registry.yarnpkg.com/nise/-/nise-1.5.3.tgz#9d2cfe37d44f57317766c6e9408a359c5d3ac1f7" - integrity sha512-Ymbac/94xeIrMf59REBPOv0thr+CJVFMhrlAkW/gjCIE58BGQdCj0x7KRCb3yz+Ga2Rz3E9XXSvUyyxqqhjQAQ== - dependencies: - "@sinonjs/formatio" "^3.2.1" - "@sinonjs/text-encoding" "^0.7.1" - just-extend "^4.0.2" - lolex "^5.0.1" - path-to-regexp "^1.7.0" - -nlcst-is-literal@^1.0.0: - version "1.2.2" - resolved "https://registry.yarnpkg.com/nlcst-is-literal/-/nlcst-is-literal-1.2.2.tgz#e64595ced168ae586ae905a2fe6825f39ccf1a7b" - integrity sha512-R+1OJEmRl3ZOp9d8PbiRxGpnvmpi3jU+lzSqCJoLeogdEh0FYDRH1aC223qUbaKffxNTJkEfeDOeQfziw749yA== - dependencies: - nlcst-to-string "^2.0.0" - -nlcst-to-string@^2.0.0: - version "2.0.4" - resolved "https://registry.yarnpkg.com/nlcst-to-string/-/nlcst-to-string-2.0.4.tgz#9315dfab80882bbfd86ddf1b706f53622dc400cc" - integrity sha512-3x3jwTd6UPG7vi5k4GEzvxJ5rDA7hVUIRNHPblKuMVP9Z3xmlsd9cgLcpAMkc5uPOBna82EeshROFhsPkbnTZg== - -no-case@^2.2.0: - version "2.3.2" - resolved "https://registry.yarnpkg.com/no-case/-/no-case-2.3.2.tgz#60b813396be39b3f1288a4c1ed5d1e7d28b464ac" - integrity sha512-rmTZ9kz+f3rCvK2TD1Ue/oZlns7OGoIWP4fc3llxxRXlOkHKoWPPWJOfFYpITabSow43QJbRIoHQXtt10VldyQ== - dependencies: - lower-case "^1.1.1" - -node-addon-api@^3.2.1: - version "3.2.1" - resolved "https://registry.yarnpkg.com/node-addon-api/-/node-addon-api-3.2.1.tgz#81325e0a2117789c0128dab65e7e38f07ceba161" - integrity sha512-mmcei9JghVNDYydghQmeDX8KoAm0FAiYyIcUt/N4nhyAipB17pllZQDOJD2fotxABnt4Mdz+dKTO7eftLg4d0A== - -node-addon-api@^4.2.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/node-addon-api/-/node-addon-api-4.3.0.tgz#52a1a0b475193e0928e98e0426a0d1254782b77f" - integrity sha512-73sE9+3UaLYYFmDsFZnqCInzPyh3MqIwZO9cw58yIqAZhONrrabrYyYe3TuIqtIiOuTXVhsGau8hcrhhwSsDIQ== - -node-environment-flags@1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/node-environment-flags/-/node-environment-flags-1.0.5.tgz#fa930275f5bf5dae188d6192b24b4c8bbac3d76a" - integrity sha512-VNYPRfGfmZLx0Ye20jWzHUjyTW/c+6Wq+iLhDzUI4XmhrDd9l/FozXV3F2xOaXjvp0co0+v1YSR3CMP6g+VvLQ== - dependencies: - object.getownpropertydescriptors "^2.0.3" - semver "^5.7.0" - -node-fetch@2.6.11, node-fetch@^2.6.7: - version "2.6.11" - resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.11.tgz#cde7fc71deef3131ef80a738919f999e6edfff25" - integrity sha512-4I6pdBY1EthSqDmJkiNk3JIT8cswwR9nfeW/cPdUagJYEQG7R95WRH74wpz7ma8Gh/9dI9FP+OU+0E4FvtA55w== - dependencies: - whatwg-url "^5.0.0" - -node-fetch@^2.6.0, node-fetch@^2.6.1: - version "2.6.9" - resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.9.tgz#7c7f744b5cc6eb5fd404e0c7a9fec630a55657e6" - integrity sha512-DJm/CJkZkRjKKj4Zi4BsKVZh3ValV5IR5s7LVZnW+6YMh0W1BfNA8XSs6DLMGYlId5F3KnA70uu2qepcR08Qqg== - dependencies: - whatwg-url "^5.0.0" - -node-forge@^1.0.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/node-forge/-/node-forge-1.3.0.tgz#37a874ea723855f37db091e6c186e5b67a01d4b2" - integrity sha512-08ARB91bUi6zNKzVmaj3QO7cr397uiDT2nJ63cHjyNtCTWIgvS47j3eT0WfzUwS9+6Z5YshRaoasFkXCKrIYbA== - -node-gyp-build@^4.3.0: - version "4.5.0" - resolved "https://registry.yarnpkg.com/node-gyp-build/-/node-gyp-build-4.5.0.tgz#7a64eefa0b21112f89f58379da128ac177f20e40" - integrity sha512-2iGbaQBV+ITgCz76ZEjmhUKAKVf7xfY1sRl4UiKQspfZMH2h06SyhNsnSVy50cwkFQDGLyif6m/6uFXHkOZ6rg== - -node-gyp-build@~4.1.0: - version "4.1.1" - resolved "https://registry.yarnpkg.com/node-gyp-build/-/node-gyp-build-4.1.1.tgz#d7270b5d86717068d114cc57fff352f96d745feb" - integrity sha512-dSq1xmcPDKPZ2EED2S6zw/b9NKsqzXRE6dVr8TVQnI3FJOTteUMuqF3Qqs6LZg+mLGYJWqQzMbIjMtJqTv87nQ== - -node-gyp@8.4.1, node-gyp@8.x, node-gyp@^9.0.0: - version "8.4.1" - resolved "https://registry.yarnpkg.com/node-gyp/-/node-gyp-8.4.1.tgz#3d49308fc31f768180957d6b5746845fbd429937" - integrity sha512-olTJRgUtAb/hOXG0E93wZDs5YiJlgbXxTwQAFHyNlRsXQnYzUaF2aGgujZbw+hR8aF4ZG/rST57bWMWD16jr9w== - 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" - -node-int64@^0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/node-int64/-/node-int64-0.4.0.tgz#87a9065cdb355d3182d8f94ce11188b825c68a3b" - integrity sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw== - -node-notifier@^8.0.0: - version "8.0.2" - resolved "https://registry.yarnpkg.com/node-notifier/-/node-notifier-8.0.2.tgz#f3167a38ef0d2c8a866a83e318c1ba0efeb702c5" - integrity sha512-oJP/9NAdd9+x2Q+rfphB2RJCHjod70RcRLjosiPMMu5gjIfwVnOUGq2nbTjTUbmy0DJ/tFIVT30+Qe3nzl4TJg== - dependencies: - growly "^1.3.0" - is-wsl "^2.2.0" - semver "^7.3.2" - shellwords "^0.1.1" - uuid "^8.3.0" - which "^2.0.2" - -node-releases@^2.0.8: - version "2.0.10" - resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.10.tgz#c311ebae3b6a148c89b1813fd7c4d3c024ef537f" - integrity sha512-5GFldHPXVG/YZmFzJvKK2zDSzPKhEp0+ZR5SVaoSag9fsL5YgHbUHDfnG5494ISANDcK4KwPXAx2xqVEydmd7w== - -node-ssh-forward@^0.6.3: - version "0.6.3" - resolved "https://registry.yarnpkg.com/node-ssh-forward/-/node-ssh-forward-0.6.3.tgz#487d65391bb485836df8d30d8b529e0059665c9c" - integrity sha512-iGO0N7zB66mo1sVF9kP6b81TGATMURfwWEUK6P2nimgG/jDR9Q7nHbMUFjNqd+VuWgMqWzURF1jRJwcVM2s8yg== - dependencies: - debug "^4.1.1" - ssh2 "^0.8.9" - -nopt@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/nopt/-/nopt-5.0.0.tgz#530942bb58a512fccafe53fe210f13a25355dc88" - integrity sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ== - dependencies: - abbrev "1" - -normalize-package-data@^2.3.2, normalize-package-data@^2.5.0: - version "2.5.0" - resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.5.0.tgz#e66db1838b200c1dfc233225d12cb36520e234a8" - integrity sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA== - dependencies: - hosted-git-info "^2.1.4" - resolve "^1.10.0" - semver "2 || 3 || 4 || 5" - validate-npm-package-license "^3.0.1" - -normalize-package-data@^3.0.0: - version "3.0.3" - resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-3.0.3.tgz#dbcc3e2da59509a0983422884cd172eefdfa525e" - integrity sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA== - dependencies: - hosted-git-info "^4.0.1" - is-core-module "^2.5.0" - semver "^7.3.4" - validate-npm-package-license "^3.0.1" - -normalize-package-data@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-4.0.1.tgz#b46b24e0616d06cadf9d5718b29b6d445a82a62c" - integrity sha512-EBk5QKKuocMJhB3BILuKhmaPjI8vNRSpIfO9woLC6NyHVkKKdVEdAO1mrT0ZfxNR1lKwCcTkuZfmGIFdizZ8Pg== - dependencies: - 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@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-2.1.1.tgz#1ab28b556e198363a8c1a6f7e6fa20137fe6aed9" - integrity sha512-3pKJwH184Xo/lnH6oyP1q2pMd7HcypqqmRs91/6/i2CGtWwIKGCkOOMTm/zXbgTEWHw1uNpNi/igc3ePOYHb6w== - dependencies: - remove-trailing-separator "^1.0.1" - -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== - -normalize.css@^8.0.1: - version "8.0.1" - resolved "https://registry.yarnpkg.com/normalize.css/-/normalize.css-8.0.1.tgz#9b98a208738b9cc2634caacbc42d131c97487bf3" - integrity sha512-qizSNPO93t1YUuUhP22btGOo3chcvDFqFaj2TRybP0DMxkHOCTYwp3n34fel4a31ORXy4m1Xq0Gyqpb5m33qIg== - -npm-bundled@^1.1.1, npm-bundled@^1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/npm-bundled/-/npm-bundled-1.1.2.tgz#944c78789bd739035b70baa2ca5cc32b8d860bc1" - integrity sha512-x5DHup0SuyQcmL3s7Rx/YQ8sbw/Hzg0rj48eN0dV7hf5cmQq5PXIeioroH3raV1QC1yh3uTYuMThvEQF3iKgGQ== - dependencies: - npm-normalize-package-bin "^1.0.1" - -npm-install-checks@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/npm-install-checks/-/npm-install-checks-5.0.0.tgz#5ff27d209a4e3542b8ac6b0c1db6063506248234" - integrity sha512-65lUsMI8ztHCxFz5ckCEC44DRvEGdZX5usQFriauxHEwt7upv1FKaQEmAtU0YnOAdwuNWCmk64xYiQABNrEyLA== - dependencies: - semver "^7.1.1" - -npm-normalize-package-bin@^1.0.0, npm-normalize-package-bin@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/npm-normalize-package-bin/-/npm-normalize-package-bin-1.0.1.tgz#6e79a41f23fd235c0623218228da7d9c23b8f6e2" - integrity sha512-EPfafl6JL5/rU+ot6P3gRSCpPDW5VmIzX959Ob1+ySFUuuYHWHekXpwdUZcKP5C+DS4GEtdJluwBjnsNDl+fSA== - -npm-package-arg@8.1.1: - version "8.1.1" - resolved "https://registry.yarnpkg.com/npm-package-arg/-/npm-package-arg-8.1.1.tgz#00ebf16ac395c63318e67ce66780a06db6df1b04" - integrity sha512-CsP95FhWQDwNqiYS+Q0mZ7FAEDytDZAkNxQqea6IaAFJTAY9Lhhqyl0irU/6PMc7BGfUmnsbHcqxJD7XuVM/rg== - dependencies: - hosted-git-info "^3.0.6" - semver "^7.0.0" - validate-npm-package-name "^3.0.0" - -npm-package-arg@^9.0.0, npm-package-arg@^9.0.1: - version "9.1.0" - resolved "https://registry.yarnpkg.com/npm-package-arg/-/npm-package-arg-9.1.0.tgz#a60e9f1e7c03e4e3e4e994ea87fff8b90b522987" - integrity sha512-4J0GL+u2Nh6OnhvUKXRr2ZMG4lR8qtLp+kv7UiV00Y+nGiSxtttCyIRHCt5L5BNkXQld/RceYItau3MDOoGiBw== - dependencies: - hosted-git-info "^5.0.0" - proc-log "^2.0.1" - semver "^7.3.5" - validate-npm-package-name "^4.0.0" - -npm-packlist@^5.1.0, npm-packlist@^5.1.1: - version "5.1.1" - resolved "https://registry.yarnpkg.com/npm-packlist/-/npm-packlist-5.1.1.tgz#79bcaf22a26b6c30aa4dd66b976d69cc286800e0" - integrity sha512-UfpSvQ5YKwctmodvPPkK6Fwk603aoVsf8AEbmVKAEECrfvL8SSe1A2YIwrJ6xmTHAITKPwwZsWo7WwEbNk0kxw== - dependencies: - glob "^8.0.1" - ignore-walk "^5.0.1" - npm-bundled "^1.1.2" - npm-normalize-package-bin "^1.0.1" - -npm-pick-manifest@^7.0.0: - version "7.0.1" - resolved "https://registry.yarnpkg.com/npm-pick-manifest/-/npm-pick-manifest-7.0.1.tgz#76dda30a7cd6b99be822217a935c2f5eacdaca4c" - integrity sha512-IA8+tuv8KujbsbLQvselW2XQgmXWS47t3CB0ZrzsRZ82DbDfkcFunOaPm4X7qNuhMfq+FmV7hQT4iFVpHqV7mg== - dependencies: - 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@^13.0.0, npm-registry-fetch@^13.0.1, npm-registry-fetch@^13.3.0: - version "13.3.1" - resolved "https://registry.yarnpkg.com/npm-registry-fetch/-/npm-registry-fetch-13.3.1.tgz#bb078b5fa6c52774116ae501ba1af2a33166af7e" - integrity sha512-eukJPi++DKRTjSBRcDZSDDsGqRK3ehbxfFUcgaRd0Yp6kRwOwh2WVn0r+8rMB4nnuzvAk6rQVzl6K5CkYOmnvw== - 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" - -npm-run-all@^4.1.5: - version "4.1.5" - resolved "https://registry.yarnpkg.com/npm-run-all/-/npm-run-all-4.1.5.tgz#04476202a15ee0e2e214080861bff12a51d98fba" - integrity sha512-Oo82gJDAVcaMdi3nuoKFavkIHBRVqQ1qvMb+9LHk/cF4P6B2m8aP04hGf7oL6wZ9BuGwX1onlLhpuoofSyoQDQ== - dependencies: - ansi-styles "^3.2.1" - chalk "^2.4.1" - cross-spawn "^6.0.5" - memorystream "^0.3.1" - minimatch "^3.0.4" - pidtree "^0.3.0" - read-pkg "^3.0.0" - shell-quote "^1.6.1" - string.prototype.padend "^3.0.0" - -npm-run-path@^2.0.0: - version "2.0.2" - resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-2.0.2.tgz#35a9232dfa35d7067b4cb2ddf2357b1871536c5f" - integrity sha512-lJxZYlT4DW/bRUtFh1MQIWqmLwQfAxnqWG4HhEdjMlkrJYnJn0Jrr2u3mgxqaWsdiBc76TYkTG/mhrnYTuzfHw== - dependencies: - path-key "^2.0.0" - -npm-run-path@^4.0.0, npm-run-path@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-4.0.1.tgz#b7ecd1e5ed53da8e37a55e1c2269e0b97ed748ea" - integrity sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw== - dependencies: - path-key "^3.0.0" - -npmlog@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-5.0.1.tgz#f06678e80e29419ad67ab964e0fa69959c1eb8b0" - integrity sha512-AqZtDUWOMKs1G/8lwylVjrdYgqA4d9nu8hc+0gzRxlDb1I10+FHBGMXs6aiQHFdCUUlqH99MUMuLfzWDNDtfxw== - dependencies: - are-we-there-yet "^2.0.0" - console-control-strings "^1.1.0" - gauge "^3.0.0" - set-blocking "^2.0.0" - -npmlog@^6.0.0, npmlog@^6.0.2: - version "6.0.2" - resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-6.0.2.tgz#c8166017a42f2dea92d6453168dd865186a70830" - integrity sha512-/vBvz5Jfr9dT/aFWd0FIRf+T/Q2WBsLENygUaFUqstqsycmZAP/t5BvFJTK0viFmSUxiUKTUplWy5vt+rvKIxg== - dependencies: - are-we-there-yet "^3.0.0" - console-control-strings "^1.1.0" - gauge "^4.0.3" - set-blocking "^2.0.0" - -nspell@^2.0.0: - version "2.1.4" - resolved "https://registry.yarnpkg.com/nspell/-/nspell-2.1.4.tgz#2057f11ad19bf43ee510d2c2f6ba4082865bc9e6" - integrity sha512-nlMEyhE6kyR2GoTm2ldrVlEmK5xgFHXayQEqLhb+3yYa8ncKtjsoYJo3ahYwrZsNaCZr822S5ZRlEqYdMQy9xw== - dependencies: - is-buffer "^2.0.0" - -nwsapi@^2.2.0: - version "2.2.2" - resolved "https://registry.yarnpkg.com/nwsapi/-/nwsapi-2.2.2.tgz#e5418863e7905df67d51ec95938d67bf801f0bb0" - integrity sha512-90yv+6538zuvUMnN+zCr8LuV6bPFdq50304114vJYJ8RDyK8D5O9Phpbd6SZWgI7PwzmmfN1upeOJlvybDSgCw== - -nx@15.3.0, "nx@>=14.8.6 < 16": - version "15.3.0" - resolved "https://registry.npmjs.org/nx/-/nx-15.3.0.tgz#50916064145cf33ba68fb8bd03ff8ffc2b9ebc7b" - integrity sha512-5tBrEF2zDkGBDfe8wThazJqBDhsVkRrxc6OttzfBmkXP4VPp8w5MMtUEOry181AXKfjDGkw//UnCSkUNynTDlw== - dependencies: - "@nrwl/cli" "15.3.0" - "@nrwl/tao" "15.3.0" - "@parcel/watcher" "2.0.4" - "@yarnpkg/lockfile" "^1.1.0" - "@yarnpkg/parsers" "^3.0.0-rc.18" - "@zkochan/js-yaml" "0.0.6" - axios "^1.0.0" - chalk "4.1.0" - chokidar "^3.5.1" - cli-cursor "3.1.0" - cli-spinners "2.6.1" - cliui "^7.0.2" - dotenv "~10.0.0" - enquirer "~2.3.6" - fast-glob "3.2.7" - figures "3.2.0" - flat "^5.0.2" - fs-extra "^10.1.0" - glob "7.1.4" - ignore "^5.0.4" - js-yaml "4.1.0" - jsonc-parser "3.2.0" - minimatch "3.0.5" - npm-run-path "^4.0.1" - open "^8.4.0" - semver "7.3.4" - string-width "^4.2.3" - strong-log-transformer "^2.1.0" - tar-stream "~2.2.0" - tmp "~0.2.1" - tsconfig-paths "^3.9.0" - tslib "^2.3.0" - v8-compile-cache "2.3.0" - yargs "^17.6.2" - yargs-parser "21.1.1" - -object-assign@^4.0.1, object-assign@^4.1.1: - version "4.1.1" - resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" - integrity sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg== - -object-copy@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/object-copy/-/object-copy-0.1.0.tgz#7e7d858b781bd7c991a41ba975ed3812754e998c" - integrity sha512-79LYn6VAb63zgtmAteVOWo9Vdj71ZVBy3Pbse+VqxDpEP83XuujMrGqHIwAXJ5I/aM0zU7dIyIAhifVTPrNItQ== - dependencies: - copy-descriptor "^0.1.0" - define-property "^0.2.5" - kind-of "^3.0.3" - -object-inspect@^1.12.2, object-inspect@^1.9.0: - version "1.12.2" - resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.12.2.tgz#c0641f26394532f28ab8d796ab954e43c009a8ea" - integrity sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ== - -object-is@^1.0.1: - version "1.1.5" - resolved "https://registry.yarnpkg.com/object-is/-/object-is-1.1.5.tgz#b9deeaa5fc7f1846a0faecdceec138e5778f53ac" - integrity sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw== - dependencies: - call-bind "^1.0.2" - define-properties "^1.1.3" - -object-keys@^1.0.11, object-keys@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" - integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== - -object-visit@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/object-visit/-/object-visit-1.0.1.tgz#f79c4493af0c5377b59fe39d395e41042dd045bb" - integrity sha512-GBaMwwAVK9qbQN3Scdo0OyvgPW7l3lnaVMj84uTOZlswkX0KpF6fyDBJhtTthf7pymztoN36/KEr1DyhF96zEA== - dependencies: - isobject "^3.0.0" - -object.assign@4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.0.tgz#968bf1100d7956bb3ca086f006f846b3bc4008da" - integrity sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w== - dependencies: - define-properties "^1.1.2" - function-bind "^1.1.1" - has-symbols "^1.0.0" - object-keys "^1.0.11" - -object.assign@^4.1.0, object.assign@^4.1.2, object.assign@^4.1.4: - version "4.1.4" - resolved "https://registry.npmjs.org/object.assign/-/object.assign-4.1.4.tgz#9673c7c7c351ab8c4d0b516f4343ebf4dfb7799f" - integrity sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ== - dependencies: - call-bind "^1.0.2" - define-properties "^1.1.4" - has-symbols "^1.0.3" - object-keys "^1.1.1" - -object.entries@^1.1.6: - version "1.1.6" - resolved "https://registry.npmjs.org/object.entries/-/object.entries-1.1.6.tgz#9737d0e5b8291edd340a3e3264bb8a3b00d5fa23" - integrity sha512-leTPzo4Zvg3pmbQ3rDK69Rl8GQvIqMWubrkxONG9/ojtFE2rD9fjMKfSI5BxW3osRH1m6VdzmqK8oAY9aT4x5w== - dependencies: - call-bind "^1.0.2" - define-properties "^1.1.4" - es-abstract "^1.20.4" - -object.fromentries@^2.0.6: - version "2.0.6" - resolved "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.6.tgz#cdb04da08c539cffa912dcd368b886e0904bfa73" - integrity sha512-VciD13dswC4j1Xt5394WR4MzmAQmlgN72phd/riNp9vtD7tp4QQWJ0R4wvclXcafgcYK8veHRed2W6XeGBvcfg== - dependencies: - call-bind "^1.0.2" - define-properties "^1.1.4" - es-abstract "^1.20.4" - -object.getownpropertydescriptors@^2.0.3: - version "2.1.0" - resolved "https://registry.yarnpkg.com/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.0.tgz#369bf1f9592d8ab89d712dced5cb81c7c5352649" - integrity sha512-Z53Oah9A3TdLoblT7VKJaTDdXdT+lQO+cNpKVnya5JDe9uLvzu1YyY1yFDFrcxrlRgWrEFH0jJtD/IbuwjcEVg== - dependencies: - define-properties "^1.1.3" - es-abstract "^1.17.0-next.1" - -object.hasown@^1.1.2: - version "1.1.2" - resolved "https://registry.npmjs.org/object.hasown/-/object.hasown-1.1.2.tgz#f919e21fad4eb38a57bc6345b3afd496515c3f92" - integrity sha512-B5UIT3J1W+WuWIU55h0mjlwaqxiE5vYENJXIXZ4VFe05pNYrkKuK0U/6aFcb0pKywYJh7IhfoqUfKVmrJJHZHw== - dependencies: - define-properties "^1.1.4" - es-abstract "^1.20.4" - -object.pick@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/object.pick/-/object.pick-1.3.0.tgz#87a10ac4c1694bd2e1cbf53591a66141fb5dd747" - integrity sha512-tqa/UMy/CCoYmj+H5qc07qvSL9dqcs/WZENZ1JbtWBlATP+iVOe778gE6MSijnyCnORzDuX6hU+LA4SZ09YjFQ== - dependencies: - isobject "^3.0.1" - -object.values@^1.1.5, object.values@^1.1.6: - version "1.1.6" - resolved "https://registry.npmjs.org/object.values/-/object.values-1.1.6.tgz#4abbaa71eba47d63589d402856f908243eea9b1d" - integrity sha512-FVVTkD1vENCsAcwNs9k6jea2uHC/X0+JcjG8YA60FN5CMaJmG95wT9jek/xX9nornqGRrBkKtzuAu2wuHpKqvw== - dependencies: - call-bind "^1.0.2" - define-properties "^1.1.4" - es-abstract "^1.20.4" - -once@^1.3.0, once@^1.3.1, once@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" - integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w== - dependencies: - wrappy "1" - -onetime@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/onetime/-/onetime-2.0.1.tgz#067428230fd67443b2794b22bba528b6867962d4" - integrity sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ= - dependencies: - mimic-fn "^1.0.0" - -onetime@^5.1.0, onetime@^5.1.2: - version "5.1.2" - resolved "https://registry.yarnpkg.com/onetime/-/onetime-5.1.2.tgz#d0e96ebb56b07476df1dd9c4806e5237985ca45e" - integrity sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg== - dependencies: - mimic-fn "^2.1.0" - -ono@^4.0.11: - version "4.0.11" - resolved "https://registry.yarnpkg.com/ono/-/ono-4.0.11.tgz#c7f4209b3e396e8a44ef43b9cedc7f5d791d221d" - integrity sha512-jQ31cORBFE6td25deYeD80wxKBMj+zBmHTrVxnc6CKhx8gho6ipmWM5zj/oeoqioZ99yqBls9Z/9Nss7J26G2g== - dependencies: - format-util "^1.0.3" - -open@^8.4.0: - version "8.4.0" - resolved "https://registry.yarnpkg.com/open/-/open-8.4.0.tgz#345321ae18f8138f82565a910fdc6b39e8c244f8" - integrity sha512-XgFPPM+B28FtCCgSb9I+s9szOC1vZRSwgWsRUA5ylIxRTgKozqjOCrVOqGsYABPYK5qnfqClxZTFBa8PKt2v6Q== - dependencies: - define-lazy-prop "^2.0.0" - is-docker "^2.1.1" - is-wsl "^2.2.0" - -opencollective-postinstall@^2.0.2: - version "2.0.3" - resolved "https://registry.yarnpkg.com/opencollective-postinstall/-/opencollective-postinstall-2.0.3.tgz#7a0fff978f6dbfa4d006238fbac98ed4198c3259" - integrity sha512-8AV/sCtuzUeTo8gQK5qDZzARrulB3egtLzFgteqB2tcT4Mw7B8Kt7JcDHmltjz6FOAHsvTevk70gZEbhM4ZS9Q== - -optionator@^0.8.1: - version "0.8.3" - resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.8.3.tgz#84fa1d036fe9d3c7e21d99884b601167ec8fb495" - integrity sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA== - dependencies: - deep-is "~0.1.3" - fast-levenshtein "~2.0.6" - levn "~0.3.0" - prelude-ls "~1.1.2" - type-check "~0.3.2" - word-wrap "~1.2.3" - -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" - -ora@^1.3.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/ora/-/ora-1.4.0.tgz#884458215b3a5d4097592285f93321bb7a79e2e5" - integrity sha512-iMK1DOQxzzh2MBlVsU42G80mnrvUhqsMh74phHtDlrcTZPK0pH6o7l7DRshK+0YsxDyEuaOkziVdvM3T0QTzpw== - dependencies: - chalk "^2.1.0" - cli-cursor "^2.1.0" - cli-spinners "^1.0.1" - log-symbols "^2.1.0" - -ora@^5.4.1: - version "5.4.1" - resolved "https://registry.yarnpkg.com/ora/-/ora-5.4.1.tgz#1b2678426af4ac4a509008e5e4ac9e9959db9e18" - integrity sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ== - dependencies: - bl "^4.1.0" - chalk "^4.1.0" - cli-cursor "^3.1.0" - cli-spinners "^2.5.0" - is-interactive "^1.0.0" - is-unicode-supported "^0.1.0" - log-symbols "^4.1.0" - strip-ansi "^6.0.0" - wcwidth "^1.0.1" - -os-tmpdir@~1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" - integrity sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g== - -p-debounce@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/p-debounce/-/p-debounce-2.1.0.tgz#e79f70c6e325cbb9bddbcbec0b81025084671ad3" - integrity sha512-M9bMt62TTnozdZhqFgs+V7XD2MnuKCaz+7fZdlu2/T7xruI3uIE5CicQ0vx1hV7HIUYF0jF+4/R1AgfOkl74Qw== - -p-each-series@^2.1.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/p-each-series/-/p-each-series-2.2.0.tgz#105ab0357ce72b202a8a8b94933672657b5e2a9a" - integrity sha512-ycIL2+1V32th+8scbpTvyHNaHe02z0sjgh91XXjAk+ZeXoPN4Z46DVUnzdso0aX4KckKw0FNNFHdjZ2UsZvxiA== - -p-event@^4.1.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/p-event/-/p-event-4.2.0.tgz#af4b049c8acd91ae81083ebd1e6f5cae2044c1b5" - integrity sha512-KXatOjCRXXkSePPb1Nbi0p0m+gQAwdlbhi4wQKJPI1HsMQS9g+Sqp2o+QHziPr7eYJyOZet836KoHEVM1mwOrQ== - dependencies: - p-timeout "^3.1.0" - -p-finally@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae" - integrity sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow== - -p-limit@^1.1.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-1.3.0.tgz#b86bd5f0c25690911c7590fcbfc2010d54b3ccb8" - integrity sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q== - dependencies: - p-try "^1.0.0" - -p-limit@^2.0.0, p-limit@^2.2.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.3.0.tgz#3dd33c647a214fdfffd835933eb086da0dc21db1" - integrity sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w== - dependencies: - p-try "^2.0.0" - -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@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-2.0.0.tgz#20a0103b222a70c8fd39cc2e580680f3dde5ec43" - integrity sha1-IKAQOyIqcMj9OcwuWAaA893l7EM= - dependencies: - p-limit "^1.1.0" - -p-locate@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-3.0.0.tgz#322d69a05c0264b25997d9f40cd8a891ab0064a4" - integrity sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ== - dependencies: - p-limit "^2.0.0" - -p-locate@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-4.1.0.tgz#a3428bb7088b3a60292f66919278b7c297ad4f07" - integrity sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A== - dependencies: - p-limit "^2.2.0" - -p-locate@^5.0.0: - version "5.0.0" - resolved "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz#83c8315c6785005e3bd021839411c9e110e6d834" - integrity sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw== - dependencies: - p-limit "^3.0.2" - -p-map-series@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/p-map-series/-/p-map-series-2.1.0.tgz#7560d4c452d9da0c07e692fdbfe6e2c81a2a91f2" - integrity sha512-RpYIIK1zXSNEOdwxcfe7FdvGcs7+y5n8rifMhMNWvaxRNMPINJHF5GDeuVxWqnfrcHPSCnp7Oo5yNXHId9Av2Q== - -p-map@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/p-map/-/p-map-4.0.0.tgz#bb2f95a5eda2ec168ec9274e06a747c3e2904d2b" - integrity sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ== - dependencies: - aggregate-error "^3.0.0" - -p-pipe@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/p-pipe/-/p-pipe-3.1.0.tgz#48b57c922aa2e1af6a6404cb7c6bf0eb9cc8e60e" - integrity sha512-08pj8ATpzMR0Y80x50yJHn37NF6vjrqHutASaX5LiH5npS9XPvrUmscd9MF5R4fuYRHOxQR1FfMIlF7AzwoPqw== - -p-queue@^6.6.2: - version "6.6.2" - resolved "https://registry.yarnpkg.com/p-queue/-/p-queue-6.6.2.tgz#2068a9dcf8e67dd0ec3e7a2bcb76810faa85e426" - integrity sha512-RwFpb72c/BhQLEXIZ5K2e+AhgNVmIejGlTgiB9MzZ0e93GRvqZ7uSi0dvRF7/XIXDeNkra2fNHBxTyPDGySpjQ== - dependencies: - eventemitter3 "^4.0.4" - p-timeout "^3.2.0" - -p-reduce@^2.0.0, p-reduce@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/p-reduce/-/p-reduce-2.1.0.tgz#09408da49507c6c274faa31f28df334bc712b64a" - integrity sha512-2USApvnsutq8uoxZBGbbWM0JIYLiEMJ9RlaN7fAzVNb9OZN0SHjjTTfIcb667XynS5Y1VhwDJVDa72TnPzAYWw== - -p-timeout@^3.1.0, p-timeout@^3.2.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/p-timeout/-/p-timeout-3.2.0.tgz#c7e17abc971d2a7962ef83626b35d635acf23dfe" - integrity sha512-rhIwUycgwwKcP9yTOOFK/AKsAopjjCakVqLHePO3CC6Mir1Z99xT+R63jZxAT5lFZLa2inS5h+ZS2GvR99/FBg== - dependencies: - p-finally "^1.0.0" - -p-try@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/p-try/-/p-try-1.0.0.tgz#cbc79cdbaf8fd4228e13f621f2b1a237c1b207b3" - integrity sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M= - -p-try@^2.0.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6" - integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== - -p-waterfall@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/p-waterfall/-/p-waterfall-2.1.1.tgz#63153a774f472ccdc4eb281cdb2967fcf158b2ee" - integrity sha512-RRTnDb2TBG/epPRI2yYXsimO0v3BXC8Yd3ogr1545IaqKK17VGhbWVeGGN+XfCm/08OK8635nH31c8bATkHuSw== - dependencies: - p-reduce "^2.0.0" - -packet-reader@1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/packet-reader/-/packet-reader-1.0.0.tgz#9238e5480dedabacfe1fe3f2771063f164157d74" - integrity sha512-HAKu/fG3HpHFO0AA8WE8q2g+gBJaZ9MG7fcKk+IJPLTGAD6Psw4443l+9DGRbOIh3/aXr7Phy0TjilYivJo5XQ== - -pacote@^13.0.3, pacote@^13.6.1: - version "13.6.2" - resolved "https://registry.yarnpkg.com/pacote/-/pacote-13.6.2.tgz#0d444ba3618ab3e5cd330b451c22967bbd0ca48a" - integrity sha512-Gu8fU3GsvOPkak2CkbojR7vjs3k3P9cA6uazKTHdsdV0gpCEQq2opelnEv30KRQWgVzP5Vd/5umjcedma3MKtg== - 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" - 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" - 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" - tar "^6.1.11" - -param-case@2.1.x: - version "2.1.1" - resolved "https://registry.yarnpkg.com/param-case/-/param-case-2.1.1.tgz#df94fd8cf6531ecf75e6bef9a0858fbc72be2247" - integrity sha512-eQE845L6ot89sk2N8liD8HAuH4ca6Vvr7VWAWwt7+kvvG5aBcPmmphQ68JsEG2qa9n1TykS2DLeMt363AAH8/w== - dependencies: - no-case "^2.2.0" - -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" - -parse-conflict-json@^2.0.1: - version "2.0.2" - resolved "https://registry.yarnpkg.com/parse-conflict-json/-/parse-conflict-json-2.0.2.tgz#3d05bc8ffe07d39600dc6436c6aefe382033d323" - integrity sha512-jDbRGb00TAPFsKWCpZZOT93SxVP9nONOSgES3AevqRq/CHvavEBvKAjxX9p5Y5F0RZLxH9Ufd9+RwtCsa+lFDA== - dependencies: - json-parse-even-better-errors "^2.3.1" - just-diff "^5.0.1" - just-diff-apply "^5.2.0" - -parse-english@^4.0.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/parse-english/-/parse-english-4.2.0.tgz#037b68f34d1a1bdf3d33668b87791bdfc1f01e1e" - integrity sha512-jw5N6wZUZViIw3VLG/FUSeL3vDhfw5Q2g4E3nYC69Mm5ANbh9ZWd+eligQbeUoyObZM8neynTn3l14e09pjEWg== - dependencies: - nlcst-to-string "^2.0.0" - parse-latin "^4.0.0" - unist-util-modify-children "^2.0.0" - unist-util-visit-children "^1.0.0" - -parse-entities@^1.1.0: - version "1.2.2" - resolved "https://registry.yarnpkg.com/parse-entities/-/parse-entities-1.2.2.tgz#c31bf0f653b6661354f8973559cb86dd1d5edf50" - integrity sha512-NzfpbxW/NPrzZ/yYSoQxyqUZMZXIdCfE0OIN4ESsnptHJECoUk3FZktxNuzQf4tjt5UEopnxpYJbvYuxIFDdsg== - dependencies: - character-entities "^1.0.0" - character-entities-legacy "^1.0.0" - character-reference-invalid "^1.0.0" - is-alphanumerical "^1.0.0" - is-decimal "^1.0.0" - is-hexadecimal "^1.0.0" - -parse-json@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-4.0.0.tgz#be35f5425be1f7f6c747184f98a788cb99477ee0" - integrity sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA= - dependencies: - error-ex "^1.3.1" - json-parse-better-errors "^1.0.1" - -parse-json@^5.0.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-5.2.0.tgz#c76fc66dee54231c962b22bcc8a72cf2f99753cd" - integrity sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg== - dependencies: - "@babel/code-frame" "^7.0.0" - error-ex "^1.3.1" - json-parse-even-better-errors "^2.3.0" - lines-and-columns "^1.1.6" - -parse-latin@^4.0.0, parse-latin@^4.1.1: - version "4.3.0" - resolved "https://registry.yarnpkg.com/parse-latin/-/parse-latin-4.3.0.tgz#1a70fc5601743baa06c5f12253c334fc94b4a917" - integrity sha512-TYKL+K98dcAWoCw/Ac1yrPviU8Trk+/gmjQVaoWEFDZmVD4KRg6c/80xKqNNFQObo2mTONgF8trzAf2UTwKafw== - dependencies: - nlcst-to-string "^2.0.0" - unist-util-modify-children "^2.0.0" - unist-util-visit-children "^1.0.0" - -parse-path@^7.0.0: - version "7.0.0" - resolved "https://registry.npmjs.org/parse-path/-/parse-path-7.0.0.tgz#605a2d58d0a749c8594405d8cc3a2bf76d16099b" - integrity sha512-Euf9GG8WT9CdqwuWJGdf3RkUcTBArppHABkO7Lm8IzRQp0e2r/kkFnmhu4TSK30Wcu5rVAZLmfPKSBBi9tWFog== - dependencies: - protocols "^2.0.0" - -parse-srcset@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/parse-srcset/-/parse-srcset-1.0.2.tgz#f2bd221f6cc970a938d88556abc589caaaa2bde1" - integrity sha512-/2qh0lav6CmI15FzA3i/2Bzk2zCgQhGMkvhOhKNcBVQ1ldgpbfiNTVslmooUmWJcADi1f1kIeynbDRVzNlfR6Q== - -parse-url@^8.1.0: - version "8.1.0" - resolved "https://registry.npmjs.org/parse-url/-/parse-url-8.1.0.tgz#972e0827ed4b57fc85f0ea6b0d839f0d8a57a57d" - integrity sha512-xDvOoLU5XRrcOZvnI6b8zA6n9O9ejNk/GExuz1yBuWUGn9KA97GI6HTs6u02wKara1CeVmZhH+0TZFdWScR89w== - dependencies: - parse-path "^7.0.0" - -parse5@6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/parse5/-/parse5-6.0.1.tgz#e1a1c085c569b3dc08321184f19a39cc27f7c30b" - integrity sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw== - -pascalcase@^0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/pascalcase/-/pascalcase-0.1.1.tgz#b363e55e8006ca6fe21784d2db22bd15d7917f14" - integrity sha512-XHXfu/yOQRy9vYOtUDVMN60OEJjW013GoObG1o+xwQTpB9eYJX/BjXMsdW13ZDPruFhYYn0AG22w0xgQMwl3Nw== - -path-browserify@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/path-browserify/-/path-browserify-1.0.1.tgz#d98454a9c3753d5790860f16f68867b9e46be1fd" - integrity sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g== - -path-exists@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515" - integrity sha1-zg6+ql94yxiSXqfYENe1mwEP1RU= - -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 sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg== - -path-key@^2.0.0, path-key@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40" - integrity sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw== - -path-key@^3.0.0, 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-parse@^1.0.6, path-parse@^1.0.7: - version "1.0.7" - resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" - integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== - -path-to-regexp@^1.7.0: - version "1.8.0" - resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-1.8.0.tgz#887b3ba9d84393e87a0a0b9f4cb756198b53548a" - integrity sha512-n43JRhlUKUAlibEJhPeir1ncUID16QnEjNpwzNdO3Lm4ywrBpBZ5oLD0I6br9evr1Y9JTqwRtAh7JLoOzAQdVA== - dependencies: - isarray "0.0.1" - -path-type@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/path-type/-/path-type-3.0.0.tgz#cef31dc8e0a1a3bb0d105c0cd97cf3bf47f4e36f" - integrity sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg== - dependencies: - pify "^3.0.0" - -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== - -pg-connection-string@0.1.3: - version "0.1.3" - resolved "https://registry.yarnpkg.com/pg-connection-string/-/pg-connection-string-0.1.3.tgz#da1847b20940e42ee1492beaf65d49d91b245df7" - integrity sha1-2hhHsglA5C7hSSvq9l1J2RskXfc= - -pg-int8@1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/pg-int8/-/pg-int8-1.0.1.tgz#943bd463bf5b71b4170115f80f8efc9a0c0eb78c" - integrity sha512-WCtabS6t3c8SkpDBUlb1kjOs7l66xsGdKpIPZsg4wR+B3+u9UAum2odSsF9tnvxg80h4ZxLWMy4pRjOsFIqQpw== - -pg-packet-stream@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/pg-packet-stream/-/pg-packet-stream-1.1.0.tgz#e45c3ae678b901a2873af1e17b92d787962ef914" - integrity sha512-kRBH0tDIW/8lfnnOyTwKD23ygJ/kexQVXZs7gEyBljw4FYqimZFxnMMx50ndZ8In77QgfGuItS5LLclC2TtjYg== - -pg-pool@^2.0.10: - version "2.0.10" - resolved "https://registry.yarnpkg.com/pg-pool/-/pg-pool-2.0.10.tgz#842ee23b04e86824ce9d786430f8365082d81c4a" - integrity sha512-qdwzY92bHf3nwzIUcj+zJ0Qo5lpG/YxchahxIN8+ZVmXqkahKXsnl2aiJPHLYN9o5mB/leG+Xh6XKxtP7e0sjg== - -pg-protocol@^1.2.0: - version "1.5.0" - resolved "https://registry.yarnpkg.com/pg-protocol/-/pg-protocol-1.5.0.tgz#b5dd452257314565e2d54ab3c132adc46565a6a0" - integrity sha512-muRttij7H8TqRNu/DxrAJQITO4Ac7RmX3Klyr/9mJEOBeIpgnF8f9jAfRz5d3XwQZl5qBjF9gLsUtMPJE0vezQ== - -pg-types@^2.1.0, pg-types@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/pg-types/-/pg-types-2.2.0.tgz#2d0250d636454f7cfa3b6ae0382fdfa8063254a3" - integrity sha512-qTAAlrEsl8s4OiEQY69wDvcMIdQN6wdz5ojQiOy6YRMuynxenON0O5oCpJI6lshc6scgAY8qvJ2On/p+CXY0GA== - dependencies: - pg-int8 "1.0.1" - postgres-array "~2.0.0" - postgres-bytea "~1.0.0" - postgres-date "~1.0.4" - postgres-interval "^1.1.0" - -pg@^7.4.3: - version "7.18.2" - resolved "https://registry.yarnpkg.com/pg/-/pg-7.18.2.tgz#4e219f05a00aff4db6aab1ba02f28ffa4513b0bb" - integrity sha512-Mvt0dGYMwvEADNKy5PMQGlzPudKcKKzJds/VbOeZJpb6f/pI3mmoXX0JksPgI3l3JPP/2Apq7F36O63J7mgveA== - dependencies: - buffer-writer "2.0.0" - packet-reader "1.0.0" - pg-connection-string "0.1.3" - pg-packet-stream "^1.1.0" - pg-pool "^2.0.10" - pg-types "^2.1.0" - pgpass "1.x" - semver "4.3.2" - -pgpass@1.x: - version "1.0.5" - resolved "https://registry.yarnpkg.com/pgpass/-/pgpass-1.0.5.tgz#9b873e4a564bb10fa7a7dbd55312728d422a223d" - integrity sha512-FdW9r/jQZhSeohs1Z3sI1yxFQNFvMcnmfuj4WBMUTxOrAyLMaTcE1aAMBiTlbMNaXvBCQuVi0R7hd8udDSP7ug== - dependencies: - split2 "^4.1.0" - -picocolors@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.0.0.tgz#cb5bdc74ff3f51892236eaf79d68bc44564ab81c" - integrity sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ== - -picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.3.1: - version "2.3.1" - resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" - integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== - -pidtree@^0.3.0: - version "0.3.1" - resolved "https://registry.yarnpkg.com/pidtree/-/pidtree-0.3.1.tgz#ef09ac2cc0533df1f3250ccf2c4d366b0d12114a" - integrity sha512-qQbW94hLHEqCg7nhby4yRC7G2+jYHY4Rguc2bjw7Uug4GIJuu1tvf2uHaZv5Q8zdt+WKJ6qK1FOI6amaWUo5FA== - -pify@^2.3.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" - integrity sha1-7RQaasBDqEnqWISY59yosVMw6Qw= - -pify@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/pify/-/pify-3.0.0.tgz#e5a4acd2c101fdf3d9a4d07f0dbc4db49dd28176" - integrity sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg== - -pify@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/pify/-/pify-4.0.1.tgz#4b2cd25c50d598735c50292224fd8c6df41e3231" - integrity sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g== - -pify@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/pify/-/pify-5.0.0.tgz#1f5eca3f5e87ebec28cc6d54a0e4aaf00acc127f" - integrity sha512-eW/gHNMlxdSP6dmG6uJip6FXN0EQBwm2clYYd8Wul42Cwu/DK8HEftzsapcNdYe2MfLiIwZqsDk2RDEsTE79hA== - -pirates@^4.0.1: - version "4.0.5" - resolved "https://registry.yarnpkg.com/pirates/-/pirates-4.0.5.tgz#feec352ea5c3268fb23a37c702ab1699f35a5f3b" - integrity sha512-8V9+HQPupnaXMA23c5hvl69zXvTwTzyAYasnkb0Tts4XvO4CliqONMOnvlq26rkhLC3nWDFBJf73LU1e1VZLaQ== - -pkg-dir@^4.1.0, pkg-dir@^4.2.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-4.2.0.tgz#f099133df7ede422e81d1d8448270eeb3e4261f3" - integrity sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ== - dependencies: - find-up "^4.0.0" - -please-upgrade-node@^3.2.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/please-upgrade-node/-/please-upgrade-node-3.2.0.tgz#aeddd3f994c933e4ad98b99d9a556efa0e2fe942" - integrity sha512-gQR3WpIgNIKwBMVLkpMUeR3e1/E1y42bqDQZfql+kDeXd8COYfM8PQA4X6y7a8u9Ua9FHmsrrmirW2vHs45hWg== - dependencies: - semver-compare "^1.0.0" - -plur@^3.0.0: - version "3.1.1" - resolved "https://registry.yarnpkg.com/plur/-/plur-3.1.1.tgz#60267967866a8d811504fe58f2faaba237546a5b" - integrity sha512-t1Ax8KUvV3FFII8ltczPn2tJdjqbd1sIzu6t4JL7nQ3EyeL/lTrj5PWKb06ic5/6XYDr65rQ4uzQEGN70/6X5w== - dependencies: - irregular-plurals "^2.0.0" - -popper.js@^1.14.4, popper.js@^1.16.1: - version "1.16.1" - resolved "https://registry.yarnpkg.com/popper.js/-/popper.js-1.16.1.tgz#2a223cb3dc7b6213d740e40372be40de43e65b1b" - integrity sha512-Wb4p1J4zyFTbM+u6WuO4XstYx4Ky9Cewe4DWrel7B0w6VVICvPwdOpotjzcf6eD8TsckVnIMNONQyPIUFOUbCQ== - -posix-character-classes@^0.1.0: - version "0.1.1" - resolved "https://registry.yarnpkg.com/posix-character-classes/-/posix-character-classes-0.1.1.tgz#01eac0fe3b5af71a2a6c02feabb8c1fef7e00eab" - integrity sha512-xTgYBc3fuo7Yt7JbiuFxSYGToMoz8fLoE6TC9Wx1P/u+LfeThMOAqmuyECnlBaaJb+u1m9hHiXUEtwW4OzfUJg== - -postcss-modules-extract-imports@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.0.0.tgz#cda1f047c0ae80c97dbe28c3e76a43b88025741d" - integrity sha512-bdHleFnP3kZ4NYDhuGlVK+CMrQ/pqUm8bx/oGL93K6gVwiclvX5x0n76fYMKuIGKzlABOy13zsvqjb0f92TEXw== - -postcss-modules-local-by-default@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.0.0.tgz#ebbb54fae1598eecfdf691a02b3ff3b390a5a51c" - integrity sha512-sT7ihtmGSF9yhm6ggikHdV0hlziDTX7oFoXtuVWeDd3hHObNkcHRo9V3yg7vCAY7cONyxJC/XXCmmiHHcvX7bQ== - dependencies: - icss-utils "^5.0.0" - postcss-selector-parser "^6.0.2" - postcss-value-parser "^4.1.0" - -postcss-modules-scope@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/postcss-modules-scope/-/postcss-modules-scope-3.0.0.tgz#9ef3151456d3bbfa120ca44898dfca6f2fa01f06" - integrity sha512-hncihwFA2yPath8oZ15PZqvWGkWf+XUfQgUGamS4LqoP1anQLOsOJw0vr7J7IwLpoY9fatA2qiGUGmuZL0Iqlg== - dependencies: - postcss-selector-parser "^6.0.4" - -postcss-modules-values@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/postcss-modules-values/-/postcss-modules-values-4.0.0.tgz#d7c5e7e68c3bb3c9b27cbf48ca0bb3ffb4602c9c" - integrity sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ== - dependencies: - icss-utils "^5.0.0" - -postcss-selector-parser@^6.0.2, postcss-selector-parser@^6.0.4: - version "6.0.11" - resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-6.0.11.tgz#2e41dc39b7ad74046e1615185185cd0b17d0c8dc" - integrity sha512-zbARubNdogI9j7WY4nQJBiNqQf3sLS3wCP4WfOidu+p28LofJqDH1tcXypGrcmMHhDk2t9wGhCsYe/+szLTy1g== - dependencies: - cssesc "^3.0.0" - util-deprecate "^1.0.2" - -postcss-value-parser@^4.1.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz#723c09920836ba6d3e5af019f92bc0971c02e514" - integrity sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ== - -postcss@^8.2.15, postcss@^8.3.11: - version "8.4.21" - resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.21.tgz#c639b719a57efc3187b13a1d765675485f4134f4" - integrity sha512-tP7u/Sn/dVxK2NnruI4H9BG+x+Wxz6oeZ1cJ8P6G/PZY0IKk4k/63TDsQf2kQq3+qoJeLm2kIBUNlZe3zgb4Zg== - dependencies: - nanoid "^3.3.4" - picocolors "^1.0.0" - source-map-js "^1.0.2" - -postgres-array@~2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/postgres-array/-/postgres-array-2.0.0.tgz#48f8fce054fbc69671999329b8834b772652d82e" - integrity sha512-VpZrUqU5A69eQyW2c5CA1jtLecCsN2U/bD6VilrFDWq5+5UIEVO7nazS3TEcHf1zuPYO/sqGvUvW62g86RXZuA== - -postgres-bytea@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/postgres-bytea/-/postgres-bytea-1.0.0.tgz#027b533c0aa890e26d172d47cf9ccecc521acd35" - integrity sha1-AntTPAqokOJtFy1Hz5zOzFIazTU= - -postgres-date@~1.0.4: - version "1.0.7" - resolved "https://registry.yarnpkg.com/postgres-date/-/postgres-date-1.0.7.tgz#51bc086006005e5061c591cee727f2531bf641a8" - integrity sha512-suDmjLVQg78nMK2UZ454hAG+OAW+HQPZ6n++TNDUX+L0+uUlLywnoxJKDou51Zm+zTCjrCl0Nq6J9C5hP9vK/Q== - -postgres-interval@^1.1.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/postgres-interval/-/postgres-interval-1.2.0.tgz#b460c82cb1587507788819a06aa0fffdb3544695" - integrity sha512-9ZhXKM/rw350N1ovuWHbGxnGh/SNJ4cnxHiM0rxE4VN41wsg8P8zWn9hv/buK00RP4WvlOyr/RBDiptyxVbkZQ== - dependencies: - xtend "^4.0.0" - -precise-commits@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/precise-commits/-/precise-commits-1.0.2.tgz#4659be01a9c3310f50ce51ddf913fead1d7cc940" - integrity sha512-PYkoNTFXVvZRzJTDxdgzmPanhSNGj5Wtj2NgSo7IhwNXGcKktX+L4DJhyIrhFSLsWWAvd+cYyyU2eXlaX5QxzA== - dependencies: - diff-match-patch "^1.0.0" - execa "^0.9.0" - find-up "^2.1.0" - glob "^7.1.2" - ignore "^3.3.7" - mri "^1.1.0" - ora "^1.3.0" - -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== - -prelude-ls@~1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54" - integrity sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w== - -prettier-linter-helpers@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz#d23d41fe1375646de2d0104d3454a3008802cf7b" - integrity sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w== - dependencies: - fast-diff "^1.1.2" - -prettier@2.0.5, prettier@^1.19.1, prettier@^2.1.2, prettier@^2.8.1: - version "2.8.1" - resolved "https://registry.npmjs.org/prettier/-/prettier-2.8.1.tgz#4e1fd11c34e2421bc1da9aea9bd8127cd0a35efc" - integrity sha512-lqGoSJBQNJidqCHE80vqZJHWHRFoNYsSpP9AjFhlhi9ODCJA541svILes/+/1GM3VaL/abZi7cpFzOpdR9UPKg== - -pretty-format@^24.9.0: - version "24.9.0" - resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-24.9.0.tgz#12fac31b37019a4eea3c11aa9a959eb7628aa7c9" - integrity sha512-00ZMZUiHaJrNfk33guavqgvfJS30sLYf0f8+Srklv0AMPodGGHcoHgksZ3OThYnIvOd+8yMCn0YiEOogjlgsnA== - dependencies: - "@jest/types" "^24.9.0" - ansi-regex "^4.0.0" - ansi-styles "^3.2.0" - react-is "^16.8.4" - -pretty-format@^26.6.2: - version "26.6.2" - resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-26.6.2.tgz#e35c2705f14cb7fe2fe94fa078345b444120fc93" - integrity sha512-7AeGuCYNGmycyQbCqd/3PWH4eOoX/OiCa0uphp57NVTeAGdJGaAliecxwBDHYQCIvrW7aDBZCYeNTP/WX69mkg== - dependencies: - "@jest/types" "^26.6.2" - ansi-regex "^5.0.0" - ansi-styles "^4.0.0" - react-is "^17.0.1" - -private@~0.1.5: - version "0.1.8" - resolved "https://registry.yarnpkg.com/private/-/private-0.1.8.tgz#2381edb3689f7a53d653190060fcf822d2f368ff" - integrity sha512-VvivMrbvd2nKkiG38qjULzlc+4Vx4wm/whI9pQD35YrARNnhxeiRktSOhSukRLFNlzg6Br/cJPet5J/u19r/mg== - -proc-log@^2.0.0, proc-log@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/proc-log/-/proc-log-2.0.1.tgz#8f3f69a1f608de27878f91f5c688b225391cb685" - integrity sha512-Kcmo2FhfDTXdcbfDH76N7uBYHINxc/8GW7UAVuVP9I+Va3uHSerrnKV6dLooga/gh7GlgzuCCr/eoldnL1muGw== - -process-nextick-args@~2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" - integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag== - -process@^0.11.10: - version "0.11.10" - resolved "https://registry.yarnpkg.com/process/-/process-0.11.10.tgz#7332300e840161bda3e69a1d1d91a7d4bc16f182" - integrity sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A== - -promise-all-reject-late@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/promise-all-reject-late/-/promise-all-reject-late-1.0.1.tgz#f8ebf13483e5ca91ad809ccc2fcf25f26f8643c2" - integrity sha512-vuf0Lf0lOxyQREH7GDIOUMLS7kz+gs8i6B+Yi8dC68a2sychGrHTJYghMBD6k7eUcH0H5P73EckCA48xijWqXw== - -promise-call-limit@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/promise-call-limit/-/promise-call-limit-1.0.1.tgz#4bdee03aeb85674385ca934da7114e9bcd3c6e24" - integrity sha512-3+hgaa19jzCGLuSCbieeRsu5C2joKfYn8pY6JAuXFRVfF4IO+L7UPpFWNTeWT9pM7uhskvbPPd/oEOktCn317Q== - -promise-inflight@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/promise-inflight/-/promise-inflight-1.0.1.tgz#98472870bf228132fcbdd868129bad12c3c029e3" - integrity sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g== - -promise-retry@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/promise-retry/-/promise-retry-2.0.1.tgz#ff747a13620ab57ba688f5fc67855410c370da22" - integrity sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g== - dependencies: - err-code "^2.0.2" - retry "^0.12.0" - -prompts@^2.0.1: - version "2.4.2" - resolved "https://registry.yarnpkg.com/prompts/-/prompts-2.4.2.tgz#7b57e73b3a48029ad10ebd44f74b01722a4cb069" - integrity sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q== - dependencies: - kleur "^3.0.3" - sisteransi "^1.0.5" - -promzard@^0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/promzard/-/promzard-0.3.0.tgz#26a5d6ee8c7dee4cb12208305acfb93ba382a9ee" - integrity sha1-JqXW7ox97kyxIggwWs+5O6OCqe4= - dependencies: - read "1" - -prop-types@^15.6.1, prop-types@^15.6.2, prop-types@^15.7.2, prop-types@^15.8.1: - version "15.8.1" - resolved "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz#67d87bf1a694f48435cf332c24af10214a3140b5" - integrity sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg== - dependencies: - loose-envify "^1.4.0" - object-assign "^4.1.1" - react-is "^16.13.1" - -proto-list@~1.2.1: - version "1.2.4" - resolved "https://registry.yarnpkg.com/proto-list/-/proto-list-1.2.4.tgz#212d5bfe1318306a420f6402b8e26ff39647a849" - integrity sha1-IS1b/hMYMGpCD2QCuOJv85ZHqEk= - -protocols@^2.0.0, protocols@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/protocols/-/protocols-2.0.1.tgz#8f155da3fc0f32644e83c5782c8e8212ccf70a86" - integrity sha512-/XJ368cyBJ7fzLMwLKv1e4vLxOju2MNAIokcr7meSaNcVbWz/CPcW22cP04mwxOErdA5mwjA8Q6w/cdAQxVn7Q== - -proxy-from-env@^1.1.0: - version "1.1.0" - resolved "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz#e102f16ca355424865755d2c9e8ea4f24d58c3e2" - integrity sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg== - -prr@~1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/prr/-/prr-1.0.1.tgz#d3fc114ba06995a45ec6893f484ceb1d78f5f476" - integrity sha512-yPw4Sng1gWghHQWj0B3ZggWUm4qVbPwPFcRG8KyxiU7J2OHFSoEHKS+EZ3fv5l1t9CyCiop6l/ZYeWbrgoQejw== - -pseudomap@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/pseudomap/-/pseudomap-1.0.2.tgz#f052a28da70e618917ef0a8ac34c1ae5a68286b3" - integrity sha1-8FKijacOYYkX7wqKw0wa5aaChrM= - -psl@^1.1.33: - version "1.9.0" - resolved "https://registry.yarnpkg.com/psl/-/psl-1.9.0.tgz#d0df2a137f00794565fcaf3b2c00cd09f8d5a5a7" - integrity sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag== - -pump@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/pump/-/pump-3.0.0.tgz#b4a2116815bde2f4e1ea602354e8c75565107a64" - integrity sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww== - dependencies: - end-of-stream "^1.1.0" - once "^1.3.1" - -punycode@1.3.2: - version "1.3.2" - resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.3.2.tgz#9653a036fb7c1ee42342f2325cceefea3926c48d" - integrity sha512-RofWgt/7fL5wP1Y7fxE7/EmTLzQVnB0ycyibJ0OOHIlJqTNzglYFxVwETOcIoJqJmpDXJ9xImDv+Fq34F/d4Dw== - -punycode@^2.1.0, punycode@^2.1.1: - version "2.3.0" - resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.3.0.tgz#f67fa67c94da8f4d0cfff981aee4118064199b8f" - integrity sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA== - -pyright@^1.1: - version "1.1.267" - resolved "https://registry.yarnpkg.com/pyright/-/pyright-1.1.267.tgz#97c0a1997916127ff9fdcaa51576d0a9222aa75c" - integrity sha512-hkSreugqPmP0Oqi36LNVlmEwoUzXaf3OXAr/UMKB0VQpIHTvRF53vTELnFtXoAmI1HJQyW+/+jJVyy5sRScGEg== - -q@^1.5.1: - version "1.5.1" - resolved "https://registry.yarnpkg.com/q/-/q-1.5.1.tgz#7e32f75b41381291d04611f1bf14109ac00651d7" - integrity sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc= - -querystring@0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/querystring/-/querystring-0.2.0.tgz#b209849203bb25df820da756e747005878521620" - integrity sha512-X/xY82scca2tau62i9mDyU9K+I+djTMUsvwf7xnUX5GLvVzgJybOJf4Y6o9Zx3oJK/LSXg5tTZBjwzqVPaPO2g== - -querystringify@^2.1.1: - version "2.2.0" - resolved "https://registry.yarnpkg.com/querystringify/-/querystringify-2.2.0.tgz#3345941b4153cb9d082d8eee4cda2016a9aef7f6" - integrity sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ== - -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== - -quick-lru@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/quick-lru/-/quick-lru-4.0.1.tgz#5b8878f113a58217848c6482026c73e1ba57727f" - integrity sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g== - -quotation@^1.1.0: - version "1.1.3" - resolved "https://registry.yarnpkg.com/quotation/-/quotation-1.1.3.tgz#2a4d11f70105ad398b577883f310469367f53351" - integrity sha512-45gUgmX/RtQOQV1kwM06boP49OYXcKCPrYwdmAvs5YqkpiobhNKKwo524JM6Ma0ko3oN9tXNcWs9+ABq3Ry7YA== - -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" - -raw-loader@~4.0.0: - version "4.0.2" - resolved "https://registry.yarnpkg.com/raw-loader/-/raw-loader-4.0.2.tgz#1aac6b7d1ad1501e66efdac1522c73e59a584eb6" - integrity sha512-ZnScIV3ag9A4wPX/ZayxL/jZH+euYb6FcUinPcgiQW0+UBtEv0O6Q3lGd3cqJ+GHH+rksEv3Pj99oxJ3u3VIKA== - dependencies: - loader-utils "^2.0.0" - schema-utils "^3.0.0" - -react-dom@^17.0.1: - version "17.0.2" - resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-17.0.2.tgz#ecffb6845e3ad8dbfcdc498f0d0a939736502c23" - integrity sha512-s4h96KtLDUQlsENhMn1ar8t2bEa+q/YAtj8pPPdIjPDGBDIVNsrD9aXNWqspUe6AzKCIG0C1HZZLqLV7qpOBGA== - dependencies: - loose-envify "^1.1.0" - object-assign "^4.1.1" - scheduler "^0.20.2" - -react-is@^16.13.1, react-is@^16.8.4, react-is@^16.9.0: - version "16.13.1" - resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.13.1.tgz#789729a4dc36de2999dc156dd6c1d9c18cea56a4" - integrity sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ== - -react-is@^17.0.1: - version "17.0.2" - resolved "https://registry.yarnpkg.com/react-is/-/react-is-17.0.2.tgz#e691d4a8e9c789365655539ab372762b0efb54f0" - integrity sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w== - -react-lifecycles-compat@^3.0.4: - version "3.0.4" - resolved "https://registry.yarnpkg.com/react-lifecycles-compat/-/react-lifecycles-compat-3.0.4.tgz#4f1a273afdfc8f3488a8c516bfda78f872352362" - integrity sha512-fBASbA6LnOU9dOU2eW7aQ8xmYBSXUIWr+UmF9b1efZBazGNO+rcXT/icdKnYm2pTwcRylVUYwW7H1PHfLekVzA== - -react-popper@^1.3.7: - version "1.3.11" - resolved "https://registry.yarnpkg.com/react-popper/-/react-popper-1.3.11.tgz#a2cc3f0a67b75b66cfa62d2c409f9dd1fcc71ffd" - integrity sha512-VSA/bS+pSndSF2fiasHK/PTEEAyOpX60+H5EPAjoArr8JGm+oihu4UbrqcEBpQibJxBVCpYyjAX7abJ+7DoYVg== - dependencies: - "@babel/runtime" "^7.1.2" - "@hypnosphi/create-react-context" "^0.3.1" - deep-equal "^1.1.1" - popper.js "^1.14.4" - prop-types "^15.6.1" - typed-styles "^0.0.7" - warning "^4.0.2" - -react-transition-group@^2.9.0: - version "2.9.0" - resolved "https://registry.yarnpkg.com/react-transition-group/-/react-transition-group-2.9.0.tgz#df9cdb025796211151a436c69a8f3b97b5b07c8d" - integrity sha512-+HzNTCHpeQyl4MJ/bdE0u6XRMe9+XG/+aL4mCxVN4DnPBQ0/5bfHWPDuOZUzYdMj94daZaZdCCc1Dzt9R/xSSg== - dependencies: - dom-helpers "^3.4.0" - loose-envify "^1.4.0" - prop-types "^15.6.2" - react-lifecycles-compat "^3.0.4" - -react@^17.0.1: - version "17.0.2" - resolved "https://registry.yarnpkg.com/react/-/react-17.0.2.tgz#d0b5cc516d29eb3eee383f75b62864cfb6800037" - integrity sha512-gnhPt75i/dq/z3/6q/0asP78D0u592D5L1pd7M8P+dck6Fu/jJeL6iVVK23fptSUZj8Vjf++7wXA8UNclGQcbA== - dependencies: - loose-envify "^1.1.0" - object-assign "^4.1.1" - -read-cmd-shim@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/read-cmd-shim/-/read-cmd-shim-3.0.1.tgz#868c235ec59d1de2db69e11aec885bc095aea087" - integrity sha512-kEmDUoYf/CDy8yZbLTmhB1X9kkjf9Q80PCNsDMb7ufrGd6zZSQA1+UyjrO+pZm5K/S4OXCWJeiIt1JA8kAsa6g== - -read-package-json-fast@^2.0.2, read-package-json-fast@^2.0.3: - version "2.0.3" - resolved "https://registry.yarnpkg.com/read-package-json-fast/-/read-package-json-fast-2.0.3.tgz#323ca529630da82cb34b36cc0b996693c98c2b83" - integrity sha512-W/BKtbL+dUjTuRL2vziuYhp76s5HZ9qQhd/dKfWIZveD0O40453QNyZhC0e63lqZrAQ4jiOapVoeJ7JrszenQQ== - dependencies: - json-parse-even-better-errors "^2.3.0" - npm-normalize-package-bin "^1.0.1" - -read-package-json@^5.0.0, read-package-json@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/read-package-json/-/read-package-json-5.0.1.tgz#1ed685d95ce258954596b13e2e0e76c7d0ab4c26" - integrity sha512-MALHuNgYWdGW3gKzuNMuYtcSSZbGQm94fAp16xt8VsYTLBjUSc55bLMKe6gzpWue0Tfi6CBgwCSdDAqutGDhMg== - 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" - -read-pkg-up@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-3.0.0.tgz#3ed496685dba0f8fe118d0691dc51f4a1ff96f07" - integrity sha1-PtSWaF26D4/hGNBpHcUfSh/5bwc= - dependencies: - find-up "^2.0.0" - read-pkg "^3.0.0" - -read-pkg-up@^7.0.1: - version "7.0.1" - resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-7.0.1.tgz#f3a6135758459733ae2b95638056e1854e7ef507" - integrity sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg== - dependencies: - find-up "^4.1.0" - read-pkg "^5.2.0" - type-fest "^0.8.1" - -read-pkg@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-3.0.0.tgz#9cbc686978fee65d16c00e2b19c237fcf6e38389" - integrity sha1-nLxoaXj+5l0WwA4rGcI3/Pbjg4k= - dependencies: - load-json-file "^4.0.0" - normalize-package-data "^2.3.2" - path-type "^3.0.0" - -read-pkg@^5.2.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-5.2.0.tgz#7bf295438ca5a33e56cd30e053b34ee7250c93cc" - integrity sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg== - dependencies: - "@types/normalize-package-data" "^2.4.0" - normalize-package-data "^2.5.0" - parse-json "^5.0.0" - type-fest "^0.6.0" - -read@1, read@^1.0.7: - version "1.0.7" - resolved "https://registry.yarnpkg.com/read/-/read-1.0.7.tgz#b3da19bd052431a97671d44a42634adf710b40c4" - integrity sha1-s9oZvQUkMal2cdRKQmNK33ELQMQ= - dependencies: - mute-stream "~0.0.4" - -readable-stream@3, readable-stream@^3.0.0, readable-stream@^3.0.2, readable-stream@^3.1.1, readable-stream@^3.4.0, readable-stream@^3.5.0, readable-stream@^3.6.0: - version "3.6.2" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.2.tgz#56a9b36ea965c00c5a93ef31eb111a0f11056967" - integrity sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA== - dependencies: - inherits "^2.0.3" - string_decoder "^1.1.1" - util-deprecate "^1.0.1" - -readable-stream@~2.3.6: - version "2.3.7" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.7.tgz#1eca1cf711aef814c04f62252a36a62f6cb23b57" - integrity sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw== - dependencies: - core-util-is "~1.0.0" - inherits "~2.0.3" - isarray "~1.0.0" - process-nextick-args "~2.0.0" - safe-buffer "~5.1.1" - string_decoder "~1.1.1" - util-deprecate "~1.0.1" - -readdir-scoped-modules@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/readdir-scoped-modules/-/readdir-scoped-modules-1.1.0.tgz#8d45407b4f870a0dcaebc0e28670d18e74514309" - integrity sha512-asaikDeqAQg7JifRsZn1NJZXo9E+VwlyCfbkZhwyISinqk5zNS6266HS5kah6P0SaQKGF6SkNnZVHUzHFYxYDw== - dependencies: - debuglog "^1.0.1" - dezalgo "^1.0.0" - graceful-fs "^4.1.2" - once "^1.3.0" - -readdirp@~3.6.0: - version "3.6.0" - resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.6.0.tgz#74a370bd857116e245b29cc97340cd431a02a6c7" - integrity sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA== - dependencies: - picomatch "^2.2.1" - -recast@~0.11.12: - version "0.11.23" - resolved "https://registry.yarnpkg.com/recast/-/recast-0.11.23.tgz#451fd3004ab1e4df9b4e4b66376b2a21912462d3" - integrity sha512-+nixG+3NugceyR8O1bLU45qs84JgI3+8EauyRZafLgC9XbdAOIVgwV1Pe2da0YzGo62KzWoZwUpVEQf6qNAXWA== - dependencies: - ast-types "0.9.6" - esprima "~3.1.0" - private "~0.1.5" - source-map "~0.5.0" - -rechoir@^0.7.0: - version "0.7.1" - resolved "https://registry.yarnpkg.com/rechoir/-/rechoir-0.7.1.tgz#9478a96a1ca135b5e88fc027f03ee92d6c645686" - integrity sha512-/njmZ8s1wVeR6pjTZ+0nCnv8SpZNRMT2D1RLOJQESlYFDBvwpTA4KWJpZ+sBJ4+vhjILRcK7JIFdGCdxEAAitg== - dependencies: - resolve "^1.9.0" - -redent@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/redent/-/redent-3.0.0.tgz#e557b7998316bb53c9f1f56fa626352c6963059f" - integrity sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg== - dependencies: - indent-string "^4.0.0" - strip-indent "^3.0.0" - -redeyed@~2.1.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/redeyed/-/redeyed-2.1.1.tgz#8984b5815d99cb220469c99eeeffe38913e6cc0b" - integrity sha1-iYS1gV2ZyyIEacme7v/jiRPmzAs= - dependencies: - esprima "~4.0.0" - -regenerate-unicode-properties@^10.0.1: - version "10.0.1" - resolved "https://registry.yarnpkg.com/regenerate-unicode-properties/-/regenerate-unicode-properties-10.0.1.tgz#7f442732aa7934a3740c779bb9b3340dccc1fb56" - integrity sha512-vn5DU6yg6h8hP/2OkQo3K7uVILvY4iu0oI4t3HFa81UPkhGJwkRwM10JEc3upjdhHjs/k8GJY1sRBhk5sr69Bw== - dependencies: - regenerate "^1.4.2" - -regenerate@^1.4.2: - version "1.4.2" - resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.4.2.tgz#b9346d8827e8f5a32f7ba29637d398b69014848a" - integrity sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A== - -regenerator-runtime@^0.13.11: - version "0.13.11" - resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz#f6dca3e7ceec20590d07ada785636a90cdca17f9" - integrity sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg== - -regenerator-transform@^0.15.0: - version "0.15.0" - resolved "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.15.0.tgz#cbd9ead5d77fae1a48d957cf889ad0586adb6537" - integrity sha512-LsrGtPmbYg19bcPHwdtmXwbW+TqNvtY4riE3P83foeHRroMbH6/2ddFBfab3t7kbzc7v7p4wbkIecHImqt0QNg== - dependencies: - "@babel/runtime" "^7.8.4" - -regex-not@^1.0.0, regex-not@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/regex-not/-/regex-not-1.0.2.tgz#1f4ece27e00b0b65e0247a6810e6a85d83a5752c" - integrity sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A== - dependencies: - extend-shallow "^3.0.2" - safe-regex "^1.1.0" - -regexp.prototype.flags@^1.2.0, regexp.prototype.flags@^1.4.3: - version "1.4.3" - resolved "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.4.3.tgz#87cab30f80f66660181a3bb7bf5981a872b367ac" - integrity sha512-fjggEOO3slI6Wvgjwflkc4NFRCTZAu5CnNfBd5qOMYhWdn67nJBBu34/TkD++eeFmd8C9r9jfXJ27+nSiRkSUA== - dependencies: - call-bind "^1.0.2" - define-properties "^1.1.3" - functions-have-names "^1.2.2" - -regexpp@^3.2.0: - version "3.2.0" - resolved "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz#0425a2768d8f23bad70ca4b90461fa2f1213e1b2" - integrity sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg== - -regexpu-core@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-5.0.1.tgz#c531122a7840de743dcf9c83e923b5560323ced3" - integrity sha512-CriEZlrKK9VJw/xQGJpQM5rY88BtuL8DM+AEwvcThHilbxiTAy8vq4iJnd2tqq8wLmjbGZzP7ZcKFjbGkmEFrw== - dependencies: - regenerate "^1.4.2" - regenerate-unicode-properties "^10.0.1" - regjsgen "^0.6.0" - regjsparser "^0.8.2" - unicode-match-property-ecmascript "^2.0.0" - unicode-match-property-value-ecmascript "^2.0.0" - -regjsgen@^0.6.0: - version "0.6.0" - resolved "https://registry.yarnpkg.com/regjsgen/-/regjsgen-0.6.0.tgz#83414c5354afd7d6627b16af5f10f41c4e71808d" - integrity sha512-ozE883Uigtqj3bx7OhL1KNbCzGyW2NQZPl6Hs09WTvCuZD5sTI4JY58bkbQWa/Y9hxIsvJ3M8Nbf7j54IqeZbA== - -regjsparser@^0.8.2: - version "0.8.4" - resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.8.4.tgz#8a14285ffcc5de78c5b95d62bbf413b6bc132d5f" - integrity sha512-J3LABycON/VNEu3abOviqGHuB/LOtOQj8SKmfP9anY5GfAVw/SPjwzSjxGjbZXIxbGfqTHtJw58C2Li/WkStmA== - dependencies: - jsesc "~0.5.0" - -relateurl@0.2.x: - version "0.2.7" - resolved "https://registry.yarnpkg.com/relateurl/-/relateurl-0.2.7.tgz#54dbf377e51440aca90a4cd274600d3ff2d888a9" - integrity sha512-G08Dxvm4iDN3MLM0EsP62EDV9IuhXPR6blNz6Utcp7zyV3tr4HVNINt6MpaRWbxoOHT3Q7YN2P+jaHX8vUbgog== - -remark-lint-blockquote-indentation@^1.0.0: - version "1.0.4" - resolved "https://registry.yarnpkg.com/remark-lint-blockquote-indentation/-/remark-lint-blockquote-indentation-1.0.4.tgz#246b0bcf6ce83ed3eb3e306bba65d08e8cdeb5d2" - integrity sha512-ExcDP7lufshEBNkVddSHa+Bz/97PtFstIniQ8ZF2TahHPmpx92z3mkI/nXL2Qt5d3B09eTVvh4Pvhgp6x2470g== - dependencies: - mdast-util-to-string "^1.0.2" - plur "^3.0.0" - unified-lint-rule "^1.0.0" - unist-util-generated "^1.1.0" - unist-util-position "^3.0.0" - unist-util-visit "^1.1.1" - -remark-lint-code-block-style@^1.0.0: - version "1.0.4" - resolved "https://registry.yarnpkg.com/remark-lint-code-block-style/-/remark-lint-code-block-style-1.0.4.tgz#c7d2fc493e4212e6c18a46b3396dae052bd223ad" - integrity sha512-Wq5F94nkaWTx8W/9C/ydG+DhVWLirBrWb0xnoMQ0cHnizAd3BWw8g0x5L7yglMYSUSVLWY0jfMHgOe9UW3JfTw== - dependencies: - unified-lint-rule "^1.0.0" - unist-util-generated "^1.1.0" - unist-util-position "^3.0.0" - unist-util-visit "^1.1.1" - -remark-lint-definition-case@^1.0.0: - version "1.0.5" - resolved "https://registry.yarnpkg.com/remark-lint-definition-case/-/remark-lint-definition-case-1.0.5.tgz#14746987b90bb91944bf2f7f9c2e0efdac48d9e9" - integrity sha512-iirq74fKhJZsFw7x4FJuLVRkXclntutG1YKajfLaE3Gm14YlJWBEoabNTk+ENR4QXoB9rTdEqn3Cc3ImO8qciQ== - dependencies: - unified-lint-rule "^1.0.0" - unist-util-generated "^1.1.0" - unist-util-position "^3.0.0" - unist-util-visit "^1.4.0" - -remark-lint-definition-spacing@^1.0.0: - version "1.0.5" - resolved "https://registry.yarnpkg.com/remark-lint-definition-spacing/-/remark-lint-definition-spacing-1.0.5.tgz#d334b418fa66954c13450038056fd383963a6436" - integrity sha512-ss8OQmK4c/1amEAJpDjkFiByLyXpsYFNzmk6rEZQkxZZd+DVHI0oF+CzSeMVHu48rF2qHOkKhVghqrCM0vleAA== - dependencies: - unified-lint-rule "^1.0.0" - unist-util-generated "^1.1.0" - unist-util-position "^3.0.0" - unist-util-visit "^1.4.0" - -remark-lint-emphasis-marker@^1.0.0: - version "1.0.4" - resolved "https://registry.yarnpkg.com/remark-lint-emphasis-marker/-/remark-lint-emphasis-marker-1.0.4.tgz#86b5824a6d568726a8e5cb675ede92825e3297b7" - integrity sha512-TdYISSw7Ib6EJDApDj9zcZNDCJEaEoQIrYS3+QH2TQxoDx96B0t1bbErRM5L/hx1UWPBpeFLKpgIWL163eMmYA== - dependencies: - unified-lint-rule "^1.0.0" - unist-util-generated "^1.1.0" - unist-util-position "^3.0.0" - unist-util-visit "^1.1.1" - -remark-lint-fenced-code-flag@^1.0.0: - version "1.0.4" - resolved "https://registry.yarnpkg.com/remark-lint-fenced-code-flag/-/remark-lint-fenced-code-flag-1.0.4.tgz#9b0b2f1b0e3a919697d6b24230cd250353b1d5c8" - integrity sha512-bkQvlEYco6ZzdzvGPrY7DBsqSq/2mZEmdhpn0KdMEZ9kcKJP4unQdVQys04SKnf9QISqQ446VnQj5Q4E3HMSkQ== - dependencies: - unified-lint-rule "^1.0.0" - unist-util-generated "^1.1.0" - unist-util-position "^3.0.0" - unist-util-visit "^1.1.1" - -remark-lint-fenced-code-marker@^1.0.0: - version "1.0.4" - resolved "https://registry.yarnpkg.com/remark-lint-fenced-code-marker/-/remark-lint-fenced-code-marker-1.0.4.tgz#80a6cc501c21435dad4a4ec635e6b3901b04fd2e" - integrity sha512-aJF4ISIEvK3NX+C2rN93QoS/32SSiytQKRSeGa+HwsAn3sTwqmy2IoAwbFeZIZA2vqKcVB4h1b9yKamSlfX30Q== - dependencies: - unified-lint-rule "^1.0.0" - unist-util-generated "^1.1.0" - unist-util-position "^3.0.0" - unist-util-visit "^1.1.1" - -remark-lint-file-extension@^1.0.0: - version "1.0.5" - resolved "https://registry.yarnpkg.com/remark-lint-file-extension/-/remark-lint-file-extension-1.0.5.tgz#7e2feec02919aa3db5c71fda19d726a9e24a4c6c" - integrity sha512-oVQdf5vEomwHkfQ7R/mgmsWW2H/t9kSvnrxtVoNOHr+qnOEafKKDn+AFhioN2kqtjCZBAjSSrePs6xGKmXKDTw== - dependencies: - unified-lint-rule "^1.0.0" - -remark-lint-final-definition@^1.0.0: - version "1.0.4" - resolved "https://registry.yarnpkg.com/remark-lint-final-definition/-/remark-lint-final-definition-1.0.4.tgz#4ebf6f45a54b457d426e3247ef6727e3ce7aff60" - integrity sha512-y9aDZPhqWcI7AtrJtL69HE6MoWMqDqLQUyWMadzAYUYb9/m4ciLdygJ4cWVpEN3n4mkBepHIsWzASaKHHBDJOQ== - dependencies: - unified-lint-rule "^1.0.0" - unist-util-generated "^1.1.0" - unist-util-position "^3.0.0" - unist-util-visit "^1.1.1" - -remark-lint-hard-break-spaces@^1.0.0: - version "1.0.5" - resolved "https://registry.yarnpkg.com/remark-lint-hard-break-spaces/-/remark-lint-hard-break-spaces-1.0.5.tgz#875c0b25d69eaadf71e6c5f2a5ebc8cd705e26ec" - integrity sha512-Rss7ujNtxipO/hasWYc0QdiO8D5VyliSwj3zAZ8GeDn0ix2KH+pY4/AJC7i9IGcVVbUGvvXLpJB3Pp1VeY7oKw== - dependencies: - unified-lint-rule "^1.0.0" - unist-util-generated "^1.1.0" - unist-util-position "^3.0.0" - unist-util-visit "^1.1.1" - -remark-lint-heading-increment@^1.0.0: - version "1.0.4" - resolved "https://registry.yarnpkg.com/remark-lint-heading-increment/-/remark-lint-heading-increment-1.0.4.tgz#a2bfb6449dda639ed65d361305e5f19a0243ee01" - integrity sha512-3PJj32G7W1OUyRVSZiZbSOxyFAsw/mNssIosS9G8+6Lq2yeTSMDoCJy0+LC+s00nORFcbzeMedMK5U/eLbDe4w== - dependencies: - unified-lint-rule "^1.0.0" - unist-util-generated "^1.1.0" - unist-util-visit "^1.1.1" - -remark-lint-heading-style@^1.0.0: - version "1.0.4" - resolved "https://registry.yarnpkg.com/remark-lint-heading-style/-/remark-lint-heading-style-1.0.4.tgz#eee857c25da86c0e68473d3a61794886a7d06c37" - integrity sha512-ASssbw0vj9urTMxDJGpOn4K7d9MgPQPJGaCD+7v7je42krofvqC4CxpYvO/fOAkRZcttE91VfFHxkaPjiBtQLw== - dependencies: - mdast-util-heading-style "^1.0.2" - unified-lint-rule "^1.0.0" - unist-util-generated "^1.1.0" - unist-util-visit "^1.1.1" - -remark-lint-link-title-style@^1.0.0: - version "1.0.5" - resolved "https://registry.yarnpkg.com/remark-lint-link-title-style/-/remark-lint-link-title-style-1.0.5.tgz#55e098d1d1640ac2275efae8f3147a9b9b701744" - integrity sha512-Nu0cKj220q/PmUzELhYRUR2uxXabWuFJq9sApkgsc59uh+NKDtCEdpxkx7Zwvn6kUEwpuQVimeRfdesiKxX52g== - dependencies: - unified-lint-rule "^1.0.0" - unist-util-generated "^1.1.0" - unist-util-position "^3.0.0" - unist-util-visit "^1.1.1" - vfile-location "^2.0.1" - -remark-lint-list-item-content-indent@^1.0.0: - version "1.0.4" - resolved "https://registry.yarnpkg.com/remark-lint-list-item-content-indent/-/remark-lint-list-item-content-indent-1.0.4.tgz#966640afa93d3e42377851bb47ac4c4d551b83f4" - integrity sha512-zfEeAayZjEKkPr07fnhkGLENxOhnm0WZJTj6UBIXhtGu7rX23WNKSZaiou8iUoHxcO6ySCvIUJAEmq/XN1FxkQ== - dependencies: - plur "^3.0.0" - unified-lint-rule "^1.0.0" - unist-util-generated "^1.1.0" - unist-util-position "^3.0.0" - unist-util-visit "^1.1.1" - -remark-lint-list-item-indent@^1.0.0: - version "1.0.5" - resolved "https://registry.yarnpkg.com/remark-lint-list-item-indent/-/remark-lint-list-item-indent-1.0.5.tgz#873c51c24ec673af0816347ecf941361a04b1ff4" - integrity sha512-DjRgxjqaVMrnlQFJypizTPtLa9gSM5ad0LVIFDSstV2UVXSgpBi2+bSsFJEXb4Fkjo/d2JAgt27UhzhcoF2lnw== - dependencies: - plur "^3.0.0" - unified-lint-rule "^1.0.0" - unist-util-generated "^1.1.0" - unist-util-position "^3.0.0" - unist-util-visit "^1.1.1" - -remark-lint-list-item-spacing@^1.0.0: - version "1.1.4" - resolved "https://registry.yarnpkg.com/remark-lint-list-item-spacing/-/remark-lint-list-item-spacing-1.1.4.tgz#ea0df16f8378ef6414a2473755ade9544adc0888" - integrity sha512-zZELzTPYCoOCnOWh/nYTfQWnGXWg4/I5KpwrjBqe7WYwoMtvLVU9mqjRj2jHEbmirEXas54NZnYnkCoIBMS4bw== - dependencies: - unified-lint-rule "^1.0.0" - unist-util-generated "^1.1.0" - unist-util-position "^3.0.0" - unist-util-visit "^1.1.1" - -remark-lint-maximum-heading-length@^1.0.0: - version "1.0.4" - resolved "https://registry.yarnpkg.com/remark-lint-maximum-heading-length/-/remark-lint-maximum-heading-length-1.0.4.tgz#49f6d2df870dcf993c053a67fb82344d5aac0af8" - integrity sha512-dhDBnUFXMuHoW8LSV/VICJAJO+wWumnvuu3ND7MJquCYrsjX2vcRmJXL5cusJSY4yqPosKlOowIkzdV5B6/SDQ== - dependencies: - mdast-util-to-string "^1.0.2" - unified-lint-rule "^1.0.0" - unist-util-generated "^1.1.0" - unist-util-visit "^1.1.1" - -remark-lint-maximum-line-length@^1.0.0: - version "1.2.2" - resolved "https://registry.yarnpkg.com/remark-lint-maximum-line-length/-/remark-lint-maximum-line-length-1.2.2.tgz#9bb53292a0d3263596bd84e23007ead081558bd1" - integrity sha512-ItAdjK+tUhqggqFvtAJ8iJ0MbBgShLl0HDgpG3In0QSYp/dmofO77DjvRjCJQo1pQYS8/LwlBii9cqg/3MwFfA== - dependencies: - unified-lint-rule "^1.0.0" - unist-util-generated "^1.1.0" - unist-util-position "^3.0.0" - unist-util-visit "^1.4.0" - -remark-lint-no-auto-link-without-protocol@^1.0.0: - version "1.0.4" - resolved "https://registry.yarnpkg.com/remark-lint-no-auto-link-without-protocol/-/remark-lint-no-auto-link-without-protocol-1.0.4.tgz#c7417ee8f5ab7eb45aa1f7c6a345ff6db1acf843" - integrity sha512-dhDHQLeaI79p7SRoKfxJ9c8J5otQsGua7ILeNbs2Onzn46/tp9ir6zjq3Lfh4VJJr4OVign2e8u+MzXsS7Uu/A== - dependencies: - mdast-util-to-string "^1.0.2" - unified-lint-rule "^1.0.0" - unist-util-generated "^1.1.0" - unist-util-position "^3.0.0" - unist-util-visit "^1.1.1" - -remark-lint-no-blockquote-without-marker@^2.0.0: - version "2.0.4" - resolved "https://registry.yarnpkg.com/remark-lint-no-blockquote-without-marker/-/remark-lint-no-blockquote-without-marker-2.0.4.tgz#96fe200cd738ee2857c82a549622ed999243a990" - integrity sha512-a5LFGj7It2z7aBRGaAcztk4D2pax2b7dK9iOarIWv/JBus/PSjZJxzZCma2aAAOQhv3wbNTwqQwuQC0UJHMbPg== - dependencies: - unified-lint-rule "^1.0.0" - unist-util-generated "^1.1.0" - unist-util-position "^3.0.0" - unist-util-visit "^1.1.1" - vfile-location "^2.0.1" - -remark-lint-no-consecutive-blank-lines@^1.0.0: - version "1.0.4" - resolved "https://registry.yarnpkg.com/remark-lint-no-consecutive-blank-lines/-/remark-lint-no-consecutive-blank-lines-1.0.4.tgz#8819e358e9e609360ced6d61e0076ca1a6a2c971" - integrity sha512-33rYrp+3OQ2UjG2/xhctruCvkP2iKLuHJhoUOAUV3BGwqJjAB+xNOl+0DdvDo0fxh5dyZuNesBuos3xr2yVR+w== - dependencies: - plur "^3.0.0" - unified-lint-rule "^1.0.0" - unist-util-generated "^1.1.0" - unist-util-position "^3.0.0" - unist-util-visit "^1.1.1" - -remark-lint-no-duplicate-headings@^1.0.0: - version "1.0.5" - resolved "https://registry.yarnpkg.com/remark-lint-no-duplicate-headings/-/remark-lint-no-duplicate-headings-1.0.5.tgz#c65f65f254df4a6d5ccfff6f370141bbe142aa21" - integrity sha512-4GKPxhKpN797V/6Jg1K4Zwqq+PhsjC633+wQMrZcTvOJfY+Rq1i7sNJ9lJVZnsDAlZJI56VqZCKnPJmS2br87g== - dependencies: - mdast-util-to-string "^1.0.2" - unified-lint-rule "^1.0.0" - unist-util-generated "^1.1.0" - unist-util-position "^3.0.0" - unist-util-stringify-position "^2.0.0" - unist-util-visit "^1.1.1" - -remark-lint-no-emphasis-as-heading@^1.0.0: - version "1.0.4" - resolved "https://registry.yarnpkg.com/remark-lint-no-emphasis-as-heading/-/remark-lint-no-emphasis-as-heading-1.0.4.tgz#144aef1df77bfcdc7112bd0616a571a484e82538" - integrity sha512-gnsInLxTkc59eVD3/qelFagD/NcrMPKXT1sy7i4e8D2jqQyrIHHl0p3TfiyNNt8qIjKMKhlIii4k4kVk/3Mczg== - dependencies: - unified-lint-rule "^1.0.0" - unist-util-generated "^1.1.0" - unist-util-visit "^1.1.1" - -remark-lint-no-file-name-articles@^1.0.0: - version "1.0.5" - resolved "https://registry.yarnpkg.com/remark-lint-no-file-name-articles/-/remark-lint-no-file-name-articles-1.0.5.tgz#4ca3425f6613f94feaef6941028583299727c339" - integrity sha512-AQk5eTb3s3TAPPjiglZgqlQj4ycao+gPs8/XkdN1VCPUtewW0GgwoQe7YEuBKayJ6ioN8dGP37Kg/P/PlKaRQA== - dependencies: - unified-lint-rule "^1.0.0" - -remark-lint-no-file-name-consecutive-dashes@^1.0.0: - version "1.0.5" - resolved "https://registry.yarnpkg.com/remark-lint-no-file-name-consecutive-dashes/-/remark-lint-no-file-name-consecutive-dashes-1.0.5.tgz#e9a6f2aeab948aa249c8a8356359e3d8843a4c5c" - integrity sha512-Mg2IDsi790/dSdAzwnBnsMYdZm3qC2QgGwqOWcr0TPABJhhjC3p8r5fX4MNMTXI5It7B7bW9+ImmCeLOZiXkLg== - dependencies: - unified-lint-rule "^1.0.0" - -remark-lint-no-file-name-irregular-characters@^1.0.0: - version "1.0.5" - resolved "https://registry.yarnpkg.com/remark-lint-no-file-name-irregular-characters/-/remark-lint-no-file-name-irregular-characters-1.0.5.tgz#6866f5b8370cdc916d55e7cf87bb6a55f9b6e0c6" - integrity sha512-Oe5i99qNUKc2bxmiH421o5B/kqlf1dfjAxpHNLhi2X2dXE91zRGavrlRM/4f4oR0N9Bqb3qB9JZPyMPWrzu9XA== - dependencies: - unified-lint-rule "^1.0.0" - -remark-lint-no-file-name-mixed-case@^1.0.0: - version "1.0.5" - resolved "https://registry.yarnpkg.com/remark-lint-no-file-name-mixed-case/-/remark-lint-no-file-name-mixed-case-1.0.5.tgz#3e37bfef74bbdd4b07aa9ef9dd452758f8b46731" - integrity sha512-ilrUCbHZin/ENwr8c3SC2chgkFsizXjBQIB/oZ7gnm1IkCkZPiMyXZAHdpwC/DjbrpGxfMYh9JmIHao4giS5+A== - dependencies: - unified-lint-rule "^1.0.0" - -remark-lint-no-file-name-outer-dashes@^1.0.0: - version "1.0.6" - resolved "https://registry.yarnpkg.com/remark-lint-no-file-name-outer-dashes/-/remark-lint-no-file-name-outer-dashes-1.0.6.tgz#4e0e4d42a63f0fdfb856bb5d8d8112725656e700" - integrity sha512-rT8CmcIlenegS0Yst4maYXdZfqIjBOiRUY8j/KJkORF5tKH+3O1/S07025qPGmcRihzK3w4yO0K8rgkKQw0b9w== - dependencies: - unified-lint-rule "^1.0.0" - -remark-lint-no-heading-punctuation@^1.0.0: - version "1.0.4" - resolved "https://registry.yarnpkg.com/remark-lint-no-heading-punctuation/-/remark-lint-no-heading-punctuation-1.0.4.tgz#f13adfd3a8b87646fb2e337120e22483a2a8b03e" - integrity sha512-++/HXg/qtVssJjzq2ZgEreoxaazw9KkYrAbTDImKV7Fypo+7bZFELUvFicq0/i9qwAwt1tvhkKtLYt1W/sr1JQ== - dependencies: - mdast-util-to-string "^1.0.2" - unified-lint-rule "^1.0.0" - unist-util-generated "^1.1.0" - unist-util-visit "^1.1.1" - -remark-lint-no-inline-padding@^1.0.0: - version "1.0.5" - resolved "https://registry.yarnpkg.com/remark-lint-no-inline-padding/-/remark-lint-no-inline-padding-1.0.5.tgz#01ec68b2be9154601f68805ae5f5f3173c866ee0" - integrity sha512-AjS34hBRasYiIAKZJ7/9U42LouRHok2WVTRdQPcVtRBswStNOuot59S+FRsatqlk1wvMmjytqxUKQfVTSeu9ag== - dependencies: - mdast-util-to-string "^1.0.2" - unified-lint-rule "^1.0.0" - unist-util-generated "^1.1.0" - unist-util-visit "^1.4.0" - -remark-lint-no-literal-urls@^1.0.0: - version "1.0.4" - resolved "https://registry.yarnpkg.com/remark-lint-no-literal-urls/-/remark-lint-no-literal-urls-1.0.4.tgz#02152e46a6381a387f7f0bb887944a33e4b8aef4" - integrity sha512-sHjbzaSG4z6jMu1L0Qx1b7VvIQHy0bR4xZ6t9auJ5AoB5ua8hb/970s77irH1+46TF1ezhE7i+QDjmhcQi09xg== - dependencies: - mdast-util-to-string "^1.0.2" - unified-lint-rule "^1.0.0" - unist-util-generated "^1.1.0" - unist-util-position "^3.0.0" - unist-util-visit "^1.1.1" - -remark-lint-no-multiple-toplevel-headings@^1.0.0: - version "1.0.5" - resolved "https://registry.yarnpkg.com/remark-lint-no-multiple-toplevel-headings/-/remark-lint-no-multiple-toplevel-headings-1.0.5.tgz#0ac0fa5adf2c87acb78ac44355b554d22f491002" - integrity sha512-RZ1YPxRO7Bo8mT+A36cZ7nx2QHFAKk+oE6j87YrZYpAKr2oF6snKS8nIGhVku4PSI/9cW1G12MZz1cAA5rcjFw== - dependencies: - unified-lint-rule "^1.0.0" - unist-util-generated "^1.1.0" - unist-util-position "^3.0.0" - unist-util-stringify-position "^2.0.0" - unist-util-visit "^1.1.1" - -remark-lint-no-shell-dollars@^1.0.0: - version "1.0.4" - resolved "https://registry.yarnpkg.com/remark-lint-no-shell-dollars/-/remark-lint-no-shell-dollars-1.0.4.tgz#18372714b94c0ee89e00ae02279bdc745b95afab" - integrity sha512-YXFj8FUVTKkVvoAbFY3zv1Ol7Kj1i+qdze3pXSgRG61y1LpfL8/HpnvFrseMbBmNw6o4WpjTo7GoArngJ1sCeg== - dependencies: - unified-lint-rule "^1.0.0" - unist-util-generated "^1.1.0" - unist-util-visit "^1.1.1" - -remark-lint-no-shortcut-reference-image@^1.0.0: - version "1.0.4" - resolved "https://registry.yarnpkg.com/remark-lint-no-shortcut-reference-image/-/remark-lint-no-shortcut-reference-image-1.0.4.tgz#ed819f1af33738bb9003b3d92e043edcf7fd2d55" - integrity sha512-5/9QoesnOHIDwMHU9x+AGPBiFoMe9ZBKIR8nC17C6ZdksgwUIpjBJ3VX5POFlt5E6OhAZaeXqUCq9G2USccEdA== - dependencies: - unified-lint-rule "^1.0.0" - unist-util-generated "^1.1.0" - unist-util-visit "^1.1.1" - -remark-lint-no-shortcut-reference-link@^1.0.0: - version "1.0.5" - resolved "https://registry.yarnpkg.com/remark-lint-no-shortcut-reference-link/-/remark-lint-no-shortcut-reference-link-1.0.5.tgz#0c3c48a0ce80e85b89d3d2ec1d264b00eb151584" - integrity sha512-qDVL7/0ptOTd/nyd9u/4MYFWQtYQU8povdUB45UgTXy5Rrf1WsC+4DfzAEZkX3tOSTExdAIf1WOKqdC5xRcfvA== - dependencies: - unified-lint-rule "^1.0.0" - unist-util-generated "^1.1.0" - unist-util-visit "^1.1.1" - -remark-lint-no-table-indentation@^1.0.0: - version "1.0.5" - resolved "https://registry.yarnpkg.com/remark-lint-no-table-indentation/-/remark-lint-no-table-indentation-1.0.5.tgz#e865ab34b172fa7f52ed410d5bb9a7b8adb18817" - integrity sha512-eE1GL+IzU3vtHdYCKHCZEIhCwiwCM7UH+pMDIMpGfH2LB3cB/Nrfbiz9xadGkARKqxxDMsJSBZDw4A/01IU+kA== - dependencies: - unified-lint-rule "^1.0.0" - unist-util-generated "^1.1.0" - unist-util-position "^3.0.0" - unist-util-visit "^1.4.0" - -remark-lint-ordered-list-marker-style@^1.0.0: - version "1.0.4" - resolved "https://registry.yarnpkg.com/remark-lint-ordered-list-marker-style/-/remark-lint-ordered-list-marker-style-1.0.4.tgz#338f384094942389fd943af0523fdf639ccbf3d8" - integrity sha512-c6AIqeePzm3nfkPCbTdwBS3/AQICgwE76+ryOc7tsSq4ulyK/Nt8Syvi/oiHYuonBddZoGtFTNCn0jqen9qscA== - dependencies: - unified-lint-rule "^1.0.0" - unist-util-generated "^1.1.0" - unist-util-position "^3.0.0" - unist-util-visit "^1.1.1" - -remark-lint-ordered-list-marker-value@^1.0.0: - version "1.0.5" - resolved "https://registry.yarnpkg.com/remark-lint-ordered-list-marker-value/-/remark-lint-ordered-list-marker-value-1.0.5.tgz#00b52a49aa77e8ed81c53354843846d30525c35b" - integrity sha512-eKepbNNfu9rEuG8WvV0sc7B+KiPMgq5Nc9baAxL9Hi6mhpj347YFWXxJUNttSINS13YTpnHxPvXmF9SzhjFKNQ== - dependencies: - unified-lint-rule "^1.0.0" - unist-util-generated "^1.1.0" - unist-util-position "^3.0.0" - unist-util-visit "^1.1.1" - -remark-lint-rule-style@^1.0.0: - version "1.0.4" - resolved "https://registry.yarnpkg.com/remark-lint-rule-style/-/remark-lint-rule-style-1.0.4.tgz#16de7183711f9bcc96355e3f475f793090552b58" - integrity sha512-omr5P6CCvo2zixCzK9uiGZpwzOE+4rc+95kWH95k2iA6Rp8Qohp8RK4unSRKLtFYGUhSbiQPgWaQXHDxMkWczg== - dependencies: - unified-lint-rule "^1.0.0" - unist-util-generated "^1.1.0" - unist-util-position "^3.0.0" - unist-util-visit "^1.1.1" - -remark-lint-strong-marker@^1.0.0: - version "1.0.4" - resolved "https://registry.yarnpkg.com/remark-lint-strong-marker/-/remark-lint-strong-marker-1.0.4.tgz#7cef1bc8e9446f4f1d009555e42cc08bd30bddb4" - integrity sha512-X9f6yhZ85cdP0cmCgkqlbxllpeQ60pS9Qqk9Jb9SZo6f95esaHptQ5bExb1ZVXzhSHz2Xz86tUhXtzG3zGFD4g== - dependencies: - unified-lint-rule "^1.0.0" - unist-util-generated "^1.1.0" - unist-util-position "^3.0.0" - unist-util-visit "^1.1.1" - -remark-lint-table-cell-padding@^1.0.0: - version "1.0.5" - resolved "https://registry.yarnpkg.com/remark-lint-table-cell-padding/-/remark-lint-table-cell-padding-1.0.5.tgz#0a533eaa60746a5976704ec9e6e49de311d67a95" - integrity sha512-N/WpcymrGBSPbLiv2OQTvdzNn6H9ctdyEA+P/odn4G9FqyrLmeTMkGJuGtinU569hLG/RtHqZIDeFVDiYi8Wzw== - dependencies: - unified-lint-rule "^1.0.0" - unist-util-generated "^1.1.0" - unist-util-position "^3.0.0" - unist-util-visit "^1.4.0" - -remark-lint-table-pipe-alignment@^1.0.0: - version "1.0.4" - resolved "https://registry.yarnpkg.com/remark-lint-table-pipe-alignment/-/remark-lint-table-pipe-alignment-1.0.4.tgz#5b6a08bc7a8eb66f5002667991405b616d0ffb02" - integrity sha512-pmELEOXeUjMQedyVvOtZcTCnTu6FxZ4gfBskMx6iJhOFEEKTFOmviqlKLpndPBxFNZB86AiE0C00/NvAaut8dw== - dependencies: - unified-lint-rule "^1.0.0" - unist-util-generated "^1.1.0" - unist-util-position "^3.0.0" - unist-util-visit "^1.1.1" - -remark-lint-table-pipes@^1.0.0: - version "1.0.4" - resolved "https://registry.yarnpkg.com/remark-lint-table-pipes/-/remark-lint-table-pipes-1.0.4.tgz#b8cd860a3098385bbdbd4b1f9b34ac6cfed16035" - integrity sha512-0fdnoiiSLIPd/76gNvQY4pg27d8HkMmmv5gCGfD+Z/Si9DdpbJdq93U0kX+Botb3+/4VEDIlcU7Cp5HXppMTWA== - dependencies: - unified-lint-rule "^1.0.0" - unist-util-generated "^1.1.0" - unist-util-position "^3.0.0" - unist-util-visit "^1.1.1" - -remark-lint-unordered-list-marker-style@^1.0.0: - version "1.0.4" - resolved "https://registry.yarnpkg.com/remark-lint-unordered-list-marker-style/-/remark-lint-unordered-list-marker-style-1.0.4.tgz#c4952f929a96d82a0e18d86a32b70ea454523c85" - integrity sha512-lcuG1J74VGTT4gl8oH33HpkHrqorxjxMlJnBupLFrVowqvJ2hAq8yPJdGZ7P46uZOYw+Xz+Qv08bF8A73PNWxQ== - dependencies: - unified-lint-rule "^1.0.0" - unist-util-generated "^1.1.0" - unist-util-position "^3.0.0" - unist-util-visit "^1.1.1" - -remark-lint@^6.0.0: - version "6.0.6" - resolved "https://registry.yarnpkg.com/remark-lint/-/remark-lint-6.0.6.tgz#5bf64efe5d88f3caf859ad541ab00656e3ca9c63" - integrity sha512-JBY6zz5fYQFN724Vq6VeiHwhyjVIlrww/dE1+hWGcDyUuz7YNCqwZKwBdQGDvslICkzHw/wEExNEb8D4PNiLlA== - dependencies: - remark-message-control "^4.0.0" - -remark-message-control@^4.0.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/remark-message-control/-/remark-message-control-4.2.0.tgz#184c4a69ce6c4c707a5633fa35b0ce3dbf81f22c" - integrity sha512-WXH2t5ljTyhsXlK1zPBLF3iPHbXl58R94phPMreS1xcHWBZJt6Oiu8RtNjy1poZFb3PqKnbYLJeR/CWcZ1bTFw== - dependencies: - mdast-comment-marker "^1.0.0" - unified-message-control "^1.0.0" - xtend "^4.0.1" - -remark-parse@^6.0.3: - version "6.0.3" - resolved "https://registry.yarnpkg.com/remark-parse/-/remark-parse-6.0.3.tgz#c99131052809da482108413f87b0ee7f52180a3a" - integrity sha512-QbDXWN4HfKTUC0hHa4teU463KclLAnwpn/FBn87j9cKYJWWawbiLgMfP2Q4XwhxxuuuOxHlw+pSN0OKuJwyVvg== - dependencies: - collapse-white-space "^1.0.2" - is-alphabetical "^1.0.0" - is-decimal "^1.0.0" - is-whitespace-character "^1.0.0" - is-word-character "^1.0.0" - markdown-escapes "^1.0.0" - parse-entities "^1.1.0" - repeat-string "^1.5.4" - state-toggle "^1.0.0" - trim "0.0.1" - trim-trailing-lines "^1.0.0" - unherit "^1.0.4" - unist-util-remove-position "^1.0.0" - vfile-location "^2.0.0" - xtend "^4.0.1" - -remark-preset-lint-markdown-style-guide@^2.1.2: - version "2.1.4" - resolved "https://registry.yarnpkg.com/remark-preset-lint-markdown-style-guide/-/remark-preset-lint-markdown-style-guide-2.1.4.tgz#fb51373db7f4045fb10dea7aa095686d3762ba7f" - integrity sha512-CGEN3DRtJEp+BvfgZ+VKxuq0Ij8Uw2DXfrbhK2xn4/XxatcHRPN8tnagXbMe1LHaQJGN8Gl1+UyLjsfIk6hyGQ== - dependencies: - remark-lint "^6.0.0" - remark-lint-blockquote-indentation "^1.0.0" - remark-lint-code-block-style "^1.0.0" - remark-lint-definition-case "^1.0.0" - remark-lint-definition-spacing "^1.0.0" - remark-lint-emphasis-marker "^1.0.0" - remark-lint-fenced-code-flag "^1.0.0" - remark-lint-fenced-code-marker "^1.0.0" - remark-lint-file-extension "^1.0.0" - remark-lint-final-definition "^1.0.0" - remark-lint-hard-break-spaces "^1.0.0" - remark-lint-heading-increment "^1.0.0" - remark-lint-heading-style "^1.0.0" - remark-lint-link-title-style "^1.0.0" - remark-lint-list-item-content-indent "^1.0.0" - remark-lint-list-item-indent "^1.0.0" - remark-lint-list-item-spacing "^1.0.0" - remark-lint-maximum-heading-length "^1.0.0" - remark-lint-maximum-line-length "^1.0.0" - remark-lint-no-auto-link-without-protocol "^1.0.0" - remark-lint-no-blockquote-without-marker "^2.0.0" - remark-lint-no-consecutive-blank-lines "^1.0.0" - remark-lint-no-duplicate-headings "^1.0.0" - remark-lint-no-emphasis-as-heading "^1.0.0" - remark-lint-no-file-name-articles "^1.0.0" - remark-lint-no-file-name-consecutive-dashes "^1.0.0" - remark-lint-no-file-name-irregular-characters "^1.0.0" - remark-lint-no-file-name-mixed-case "^1.0.0" - remark-lint-no-file-name-outer-dashes "^1.0.0" - remark-lint-no-heading-punctuation "^1.0.0" - remark-lint-no-inline-padding "^1.0.0" - remark-lint-no-literal-urls "^1.0.0" - remark-lint-no-multiple-toplevel-headings "^1.0.0" - remark-lint-no-shell-dollars "^1.0.0" - remark-lint-no-shortcut-reference-image "^1.0.0" - remark-lint-no-shortcut-reference-link "^1.0.0" - remark-lint-no-table-indentation "^1.0.0" - remark-lint-ordered-list-marker-style "^1.0.0" - remark-lint-ordered-list-marker-value "^1.0.0" - remark-lint-rule-style "^1.0.0" - remark-lint-strong-marker "^1.0.0" - remark-lint-table-cell-padding "^1.0.0" - remark-lint-table-pipe-alignment "^1.0.0" - remark-lint-table-pipes "^1.0.0" - remark-lint-unordered-list-marker-style "^1.0.0" - -remark-retext@^3.1.2: - version "3.1.3" - resolved "https://registry.yarnpkg.com/remark-retext/-/remark-retext-3.1.3.tgz#77173b1d9d13dab15ce5b38d996195fea522ee7f" - integrity sha512-UujXAm28u4lnUvtOZQFYfRIhxX+auKI9PuA2QpQVTT7gYk1OgX6o0OUrSo1KOa6GNrFX+OODOtS5PWIHPxM7qw== - dependencies: - mdast-util-to-nlcst "^3.2.0" - -remove-trailing-separator@^1.0.1: - version "1.1.0" - resolved "https://registry.yarnpkg.com/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz#c24bce2a283adad5bc3f58e0d48249b92379d8ef" - integrity sha512-/hS+Y0u3aOfIETiaiirUFwDBDzmXPvO+jAfKTitUngIPzdKc6Z0LoFjM/CK5PL4C+eKwHohlHAb6H0VFfmmUsw== - -repeat-element@^1.1.2: - version "1.1.4" - resolved "https://registry.yarnpkg.com/repeat-element/-/repeat-element-1.1.4.tgz#be681520847ab58c7568ac75fbfad28ed42d39e9" - integrity sha512-LFiNfRcSu7KK3evMyYOuCzv3L10TW7yC1G2/+StMjK8Y6Vqd2MG7r/Qjw4ghtuCOjFvlnms/iMmLqpvW/ES/WQ== - -repeat-string@^1.5.2, repeat-string@^1.5.4, repeat-string@^1.6.1: - version "1.6.1" - resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637" - integrity sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w== - -replace-ext@1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/replace-ext/-/replace-ext-1.0.0.tgz#de63128373fcbf7c3ccfa4de5a480c45a67958eb" - integrity sha1-3mMSg3P8v3w8z6TeWkgMRaZ5WOs= - -request-light@^0.2.1: - version "0.2.5" - resolved "https://registry.yarnpkg.com/request-light/-/request-light-0.2.5.tgz#38a3da7b2e56f7af8cbba57e8a94930ee2380746" - integrity sha512-eBEh+GzJAftUnex6tcL6eV2JCifY0+sZMIUpUPOVXbs2nV5hla4ZMmO3icYKGuGVuQ2zHE9evh4OrRcH4iyYYw== - dependencies: - http-proxy-agent "^2.1.0" - https-proxy-agent "^2.2.3" - vscode-nls "^4.1.1" - -request-light@^0.5.7: - version "0.5.8" - resolved "https://registry.yarnpkg.com/request-light/-/request-light-0.5.8.tgz#8bf73a07242b9e7b601fac2fa5dc22a094abcc27" - integrity sha512-3Zjgh+8b5fhRJBQZoy+zbVKpAQGLyka0MPgW3zruTF4dFFJ8Fqcfu9YsAvi/rvdcaTeWG3MkbZv4WKxAn/84Lg== - -require-directory@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" - integrity sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q== - -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== - -require-main-filename@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-2.0.0.tgz#d0b329ecc7cc0f61649f62215be69af54aa8989b" - integrity sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg== - -requires-port@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/requires-port/-/requires-port-1.0.0.tgz#925d2601d39ac485e091cf0da5c6e694dc3dcaff" - integrity sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ== - -resize-observer-polyfill@^1.5.1: - version "1.5.1" - resolved "https://registry.yarnpkg.com/resize-observer-polyfill/-/resize-observer-polyfill-1.5.1.tgz#0e9020dd3d21024458d4ebd27e23e40269810464" - integrity sha512-LwZrotdHOo12nQuZlHEmtuXdqGoOD0OhaxopaNFxWzInpEgaLWoVuAMbTzixuosCx2nEG58ngzW3vxdWoxIgdg== - -resolve-cwd@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/resolve-cwd/-/resolve-cwd-3.0.0.tgz#0f0075f1bb2544766cf73ba6a6e2adfebcb13f2d" - integrity sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg== - dependencies: - resolve-from "^5.0.0" - -resolve-from@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-3.0.0.tgz#b22c7af7d9d6881bc8b6e653335eebcb0a188748" - integrity sha1-six699nWiBvItuZTM17rywoYh0g= - -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== - -resolve-from@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-5.0.0.tgz#c35225843df8f776df21c57557bc087e9dfdfc69" - integrity sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw== - -resolve-url@^0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/resolve-url/-/resolve-url-0.2.1.tgz#2c637fe77c893afd2a663fe21aa9080068e2052a" - integrity sha512-ZuF55hVUQaaczgOIwqWzkEcEidmlD/xl44x1UZnhOXcYuFN2S6+rcxpG+C1N3So0wvNI3DmJICUFfu2SxhBmvg== - -resolve@^1.10.0, resolve@^1.14.2, resolve@^1.18.1, resolve@^1.20.0, resolve@^1.22.0, resolve@^1.9.0: - version "1.22.1" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.1.tgz#27cb2ebb53f91abb49470a928bba7558066ac177" - integrity sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw== - dependencies: - is-core-module "^2.9.0" - path-parse "^1.0.7" - supports-preserve-symlinks-flag "^1.0.0" - -resolve@^2.0.0-next.3: - version "2.0.0-next.3" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-2.0.0-next.3.tgz#d41016293d4a8586a39ca5d9b5f15cbea1f55e46" - integrity sha512-W8LucSynKUIDu9ylraa7ueVZ7hc0uAgJBxVsQSKOXOyle8a93qXhcz+XAXZ8bIq2d6i4Ehddn6Evt+0/UwKk6Q== - dependencies: - is-core-module "^2.2.0" - path-parse "^1.0.6" - -restore-cursor@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-2.0.0.tgz#9f7ee287f82fd326d4fd162923d62129eee0dfaf" - integrity sha1-n37ih/gv0ybU/RYpI9YhKe7g368= - dependencies: - onetime "^2.0.0" - signal-exit "^3.0.2" - -restore-cursor@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-3.1.0.tgz#39f67c54b3a7a58cea5236d95cf0034239631f7e" - integrity sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA== - dependencies: - onetime "^5.1.0" - signal-exit "^3.0.2" - -ret@~0.1.10: - version "0.1.15" - resolved "https://registry.yarnpkg.com/ret/-/ret-0.1.15.tgz#b8a4825d5bdb1fc3f6f53c2bc33f81388681c7bc" - integrity sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg== - -retext-english@^3.0.2: - version "3.0.4" - resolved "https://registry.yarnpkg.com/retext-english/-/retext-english-3.0.4.tgz#f978828d51fbcee842bc3807a45b7f709822ea8d" - integrity sha512-yr1PgaBDde+25aJXrnt3p1jvT8FVLVat2Bx8XeAWX13KXo8OT+3nWGU3HWxM4YFJvmfqvJYJZG2d7xxaO774gw== - dependencies: - parse-english "^4.0.0" - unherit "^1.0.4" - -retext-latin@^2.0.0: - version "2.0.4" - resolved "https://registry.yarnpkg.com/retext-latin/-/retext-latin-2.0.4.tgz#ef5d34ae7641ae56b0675ea391095e8ee762b251" - integrity sha512-fOoSSoQgDZ+l/uS81oxI3alBghDUPja0JEl0TpQxI6MN+dhM6fLFumPJwMZ4PJTyL5FFAgjlsdv8IX+6IRuwMw== - dependencies: - parse-latin "^4.0.0" - unherit "^1.0.4" - -retext-spell@^2.4.0: - version "2.4.1" - resolved "https://registry.yarnpkg.com/retext-spell/-/retext-spell-2.4.1.tgz#f5eb3dfe3920f15dae325c2677098acb67ed387a" - integrity sha512-l2C37Sz+JMLgUJHqqNA2bV3Qqh7V6zWT3fCi8MtsZn2PoanDh57Tz2NW/DJpoEIsK9mV7o2EMvQmIMt5cgcgAg== - dependencies: - lodash.includes "^4.2.0" - nlcst-is-literal "^1.0.0" - nlcst-to-string "^2.0.0" - nspell "^2.0.0" - quotation "^1.1.0" - unist-util-visit "^1.0.0" - -retext-stringify@^2.0.0: - version "2.0.4" - resolved "https://registry.yarnpkg.com/retext-stringify/-/retext-stringify-2.0.4.tgz#496d6c532f7dc6d15e4b262de0266e828f72efa9" - integrity sha512-xOtx5mFJBoT3j7PBtiY2I+mEGERNniofWktI1cKXvjMEJPOuqve0dghLHO1+gz/gScLn4zqspDGv4kk2wS5kSA== - dependencies: - nlcst-to-string "^2.0.0" - -retext@^6.0.1: - version "6.0.2" - resolved "https://registry.yarnpkg.com/retext/-/retext-6.0.2.tgz#005df1c83bdd6a238f98cd60899f4c140f67b26a" - integrity sha512-CxpBywVxRjzikCRrC6Z87KzqzuSbCDLLqpQSzjzE0xlzPaZemZiywCHEzX7eSWRdXY5006rYgD7Zm4BCyzFxvg== - dependencies: - retext-latin "^2.0.0" - retext-stringify "^2.0.0" - unified "^7.0.0" - -retry-request@^4.2.2: - version "4.2.2" - resolved "https://registry.yarnpkg.com/retry-request/-/retry-request-4.2.2.tgz#b7d82210b6d2651ed249ba3497f07ea602f1a903" - integrity sha512-xA93uxUD/rogV7BV59agW/JHPGXeREMWiZc9jhcwY4YdZ7QOtC7qbomYg0n4wyk2lJhggjvKvhNX8wln/Aldhg== - dependencies: - debug "^4.1.1" - extend "^3.0.2" - -retry@^0.12.0: - version "0.12.0" - resolved "https://registry.yarnpkg.com/retry/-/retry-0.12.0.tgz#1b42a6266a21f07421d1b0b54b7dc167b01c013b" - integrity sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow== - -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== - -rfdc@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/rfdc/-/rfdc-1.3.0.tgz#d0b7c441ab2720d05dc4cf26e01c89631d9da08b" - integrity sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA== - -rimraf@^3.0.0, 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" - -rsvp@^4.8.4: - version "4.8.5" - resolved "https://registry.yarnpkg.com/rsvp/-/rsvp-4.8.5.tgz#c8f155311d167f68f21e168df71ec5b083113734" - integrity sha512-nfMOlASu9OnRJo1mbEk2cz0D56a1MBNrJ7orjRZQG10XDyuvwksKbuXNp6qa+kbn839HwjwhBzhFmdsaEAfauA== - -run-async@^2.4.0: - version "2.4.1" - resolved "https://registry.yarnpkg.com/run-async/-/run-async-2.4.1.tgz#8440eccf99ea3e70bd409d49aab88e10c189a455" - integrity sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ== - -run-node@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/run-node/-/run-node-1.0.0.tgz#46b50b946a2aa2d4947ae1d886e9856fd9cabe5e" - integrity sha512-kc120TBlQ3mih1LSzdAJXo4xn/GWS2ec0l3S+syHDXP9uRr0JAT8Qd3mdMuyjqCzeZktgP3try92cEgf9Nks8A== - -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" - -rxjs@^7.5.5: - version "7.5.6" - resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-7.5.6.tgz#0446577557862afd6903517ce7cae79ecb9662bc" - integrity sha512-dnyv2/YsXhnm461G+R/Pe5bWP41Nm6LBXEYWI6eiFP4fiwx6WRI/CD0zbdVAudd9xwLEF2IDcKXLHit0FYjUzw== - dependencies: - tslib "^2.1.0" - -safe-buffer@^5.0.1: - version "5.2.1" - resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" - integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== - -safe-buffer@^5.1.0, safe-buffer@~5.1.0, safe-buffer@~5.1.1: - version "5.1.2" - resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" - integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== - -safe-regex-test@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.0.tgz#793b874d524eb3640d1873aad03596db2d4f2295" - integrity sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA== - dependencies: - call-bind "^1.0.2" - get-intrinsic "^1.1.3" - is-regex "^1.1.4" - -safe-regex@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/safe-regex/-/safe-regex-1.1.0.tgz#40a3669f3b077d1e943d44629e157dd48023bf2e" - integrity sha512-aJXcif4xnaNUzvUuC5gcb46oTS7zvg4jpMTnuqtrEPlR3vFr4pxtdTwaF1Qs3Enjn9HK+ZlwQui+a7z0SywIzg== - dependencies: - ret "~0.1.10" - -"safer-buffer@>= 2.1.2 < 3", "safer-buffer@>= 2.1.2 < 3.0.0", safer-buffer@~2.1.0: - version "2.1.2" - resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" - integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== - -sane@^4.0.3: - version "4.1.0" - resolved "https://registry.yarnpkg.com/sane/-/sane-4.1.0.tgz#ed881fd922733a6c461bc189dc2b6c006f3ffded" - integrity sha512-hhbzAgTIX8O7SHfp2c8/kREfEn4qO/9q8C9beyY6+tvZ87EpoZ3i1RIEvp27YBswnNbY9mWd6paKVmKbAgLfZA== - dependencies: - "@cnakazawa/watch" "^1.0.3" - anymatch "^2.0.0" - capture-exit "^2.0.0" - exec-sh "^0.3.2" - execa "^1.0.0" - fb-watchman "^2.0.0" - micromatch "^3.1.4" - minimist "^1.1.1" - walker "~1.0.5" - -sanitize-html@~2.7.3: - version "2.7.3" - resolved "https://registry.yarnpkg.com/sanitize-html/-/sanitize-html-2.7.3.tgz#166c868444ee4f9fd7352ac8c63fa86c343fc2bd" - integrity sha512-jMaHG29ak4miiJ8wgqA1849iInqORgNv7SLfSw9LtfOhEUQ1C0YHKH73R+hgyufBW9ZFeJrb057k9hjlfBCVlw== - dependencies: - deepmerge "^4.2.2" - escape-string-regexp "^4.0.0" - htmlparser2 "^6.0.0" - is-plain-object "^5.0.0" - parse-srcset "^1.0.2" - postcss "^8.3.11" - -saxes@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/saxes/-/saxes-5.0.1.tgz#eebab953fa3b7608dbe94e5dadb15c888fa6696d" - integrity sha512-5LBh1Tls8c9xgGjw3QrMwETmTMVk0oFgvrFSvWx62llR2hcEInrKNZ2GZCCuuy2lvWrdl5jhbpeqc5hRYKFOcw== - dependencies: - xmlchars "^2.2.0" - -scheduler@^0.20.2: - version "0.20.2" - resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.20.2.tgz#4baee39436e34aa93b4874bddcbf0fe8b8b50e91" - integrity sha512-2eWfGgAqqWFGqtdMmcL5zCMK1U8KlXv8SQFGglL3CEtd0aDVDWgeF/YoCmvln55m5zSk3J/20hTaSBeSObsQDQ== - dependencies: - loose-envify "^1.1.0" - object-assign "^4.1.1" - -schema-utils@^2.6.5, schema-utils@^2.7.0: - version "2.7.1" - resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-2.7.1.tgz#1ca4f32d1b24c590c203b8e7a50bf0ea4cd394d7" - integrity sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg== - dependencies: - "@types/json-schema" "^7.0.5" - ajv "^6.12.4" - ajv-keywords "^3.5.2" - -schema-utils@^3.0.0, schema-utils@^3.1.0, schema-utils@^3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-3.1.1.tgz#bc74c4b6b6995c1d88f76a8b77bea7219e0c8281" - integrity sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw== - dependencies: - "@types/json-schema" "^7.0.8" - ajv "^6.12.5" - ajv-keywords "^3.5.2" - -semver-compare@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/semver-compare/-/semver-compare-1.0.0.tgz#0dee216a1c941ab37e9efb1788f6afc5ff5537fc" - integrity sha1-De4hahyUGrN+nvsXiPavxf9VN/w= - -"semver@2 || 3 || 4 || 5", semver@^5.4.1, semver@^5.5.0, semver@^5.6.0, semver@^5.7.0: - version "5.7.1" - resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" - integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== - -semver@4.3.2: - version "4.3.2" - resolved "https://registry.yarnpkg.com/semver/-/semver-4.3.2.tgz#c7a07158a80bedd052355b770d82d6640f803be7" - integrity sha1-x6BxWKgL7dBSNVt3DYLWZA+AO+c= - -semver@7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/semver/-/semver-7.0.0.tgz#5f3ca35761e47e05b206c6daff2cf814f0316b8e" - integrity sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A== - -semver@7.3.4: - version "7.3.4" - resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.4.tgz#27aaa7d2e4ca76452f98d3add093a72c943edc97" - integrity sha512-tCfb2WLjqFAtXn4KEdxIhalnRtoKFN7nAwj0B3ZXCbQloV2tq5eDbcTmT68JJD3nRJq24/XgxtQKFIpQdtvmVw== - dependencies: - lru-cache "^6.0.0" - -semver@7.x, semver@^7.0.0, semver@^7.1.1, semver@^7.3.2, semver@^7.3.4, semver@^7.3.5, semver@^7.3.7: - version "7.3.8" - resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.8.tgz#07a78feafb3f7b32347d725e33de7e2a2df67798" - integrity sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A== - dependencies: - lru-cache "^6.0.0" - -semver@^6.0.0, semver@^6.1.1, semver@^6.1.2, semver@^6.3.0: - version "6.3.0" - resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" - integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== - -seq-queue@^0.0.5: - version "0.0.5" - resolved "https://registry.yarnpkg.com/seq-queue/-/seq-queue-0.0.5.tgz#d56812e1c017a6e4e7c3e3a37a1da6d78dd3c93e" - integrity sha1-1WgS4cAXpuTnw+Ojeh2m143TyT4= - -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" - -serialize-javascript@^6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-6.0.1.tgz#b206efb27c3da0b0ab6b52f48d170b7996458e5c" - integrity sha512-owoXEFjWRllis8/M1Q+Cw5k8ZH40e3zhp/ovX+Xr/vi1qj6QesbyXXViFbpNvWvPNAD62SutwEXavefrLJWj7w== - dependencies: - randombytes "^2.1.0" - -set-blocking@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" - integrity sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw== - -set-value@^2.0.0, set-value@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/set-value/-/set-value-2.0.1.tgz#a18d40530e6f07de4228c7defe4227af8cad005b" - integrity sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw== - dependencies: - extend-shallow "^2.0.1" - is-extendable "^0.1.1" - is-plain-object "^2.0.3" - split-string "^3.0.1" - -setimmediate@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/setimmediate/-/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285" - integrity sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU= - -shallow-clone@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/shallow-clone/-/shallow-clone-3.0.1.tgz#8f2981ad92531f55035b01fb230769a40e02efa3" - integrity sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA== - dependencies: - kind-of "^6.0.2" - -shebang-command@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea" - integrity sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg== - dependencies: - shebang-regex "^1.0.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@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3" - integrity sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ== - -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== - -shell-quote@^1.6.1: - version "1.7.3" - resolved "https://registry.yarnpkg.com/shell-quote/-/shell-quote-1.7.3.tgz#aa40edac170445b9a431e17bb62c0b881b9c4123" - integrity sha512-Vpfqwm4EnqGdlsBFNmHhxhElJYrdfcxPThu+ryKS5J8L/fhAwLazFZtq+S+TWZ9ANj2piSQLGj6NQg+lKPmxrw== - -shellwords@^0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/shellwords/-/shellwords-0.1.1.tgz#d6b9181c1a48d397324c84871efbcfc73fc0654b" - integrity sha512-vFwSUfQvqybiICwZY5+DAWIPLKsWO31Q91JSKl3UYv+K5c2QRPzn0qzec6QPu1Qc9eHYItiP3NdJqNVqetYAww== - -shiki@^0.10.1: - version "0.10.1" - resolved "https://registry.yarnpkg.com/shiki/-/shiki-0.10.1.tgz#6f9a16205a823b56c072d0f1a0bcd0f2646bef14" - integrity sha512-VsY7QJVzU51j5o1+DguUd+6vmCmZ5v/6gYu4vyYAhzjuNQU6P/vmSy4uQaOhvje031qQMiW0d2BwgMH52vqMng== - dependencies: - jsonc-parser "^3.0.0" - vscode-oniguruma "^1.6.1" - vscode-textmate "5.2.0" - -side-channel@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.4.tgz#efce5c8fdc104ee751b25c58d4290011fa5ea2cf" - integrity sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw== - dependencies: - call-bind "^1.0.0" - get-intrinsic "^1.0.2" - object-inspect "^1.9.0" - -signal-exit@^3.0.0, signal-exit@^3.0.2, signal-exit@^3.0.3, signal-exit@^3.0.7: - version "3.0.7" - resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.7.tgz#a9a1767f8af84155114eaabd73f99273c8f59ad9" - integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ== - -simulate-event@~1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/simulate-event/-/simulate-event-1.4.0.tgz#7f8a404116280bcbfe26347ddbcbffe5bd2be00e" - integrity sha512-2X/DaXEB9V4BQzavZ8bl15/D42Mtd2WBxRYJNGyQTIhE2uVFZqOCkF/FbY+oWiDNXh7hpFfpQ5gxwz6xYq0UAQ== - dependencies: - xtend "^4.0.1" - -sinon@^7.3.2: - version "7.5.0" - resolved "https://registry.yarnpkg.com/sinon/-/sinon-7.5.0.tgz#e9488ea466070ea908fd44a3d6478fd4923c67ec" - integrity sha512-AoD0oJWerp0/rY9czP/D6hDTTUYGpObhZjMpd7Cl/A6+j0xBE+ayL/ldfggkBXUs0IkvIiM1ljM8+WkOc5k78Q== - dependencies: - "@sinonjs/commons" "^1.4.0" - "@sinonjs/formatio" "^3.2.1" - "@sinonjs/samsam" "^3.3.3" - diff "^3.5.0" - lolex "^4.2.0" - nise "^1.5.2" - supports-color "^5.5.0" - -sisteransi@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/sisteransi/-/sisteransi-1.0.5.tgz#134d681297756437cc05ca01370d3a7a571075ed" - integrity sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg== - -slash@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" - integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== - -sliced@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/sliced/-/sliced-1.0.1.tgz#0b3a662b5d04c3177b1926bea82b03f837a2ef41" - integrity sha1-CzpmK10Ewxd7GSa+qCsD+Dei70E= - -smart-buffer@^4.2.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/smart-buffer/-/smart-buffer-4.2.0.tgz#6e1d71fa4f18c05f7d0ff216dd16a481d0e8d9ae" - integrity sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg== - -snapdragon-node@^2.0.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/snapdragon-node/-/snapdragon-node-2.1.1.tgz#6c175f86ff14bdb0724563e8f3c1b021a286853b" - integrity sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw== - dependencies: - define-property "^1.0.0" - isobject "^3.0.0" - snapdragon-util "^3.0.1" - -snapdragon-util@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/snapdragon-util/-/snapdragon-util-3.0.1.tgz#f956479486f2acd79700693f6f7b805e45ab56e2" - integrity sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ== - dependencies: - kind-of "^3.2.0" - -snapdragon@^0.8.1: - version "0.8.2" - resolved "https://registry.yarnpkg.com/snapdragon/-/snapdragon-0.8.2.tgz#64922e7c565b0e14204ba1aa7d6964278d25182d" - integrity sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg== - dependencies: - base "^0.11.1" - debug "^2.2.0" - define-property "^0.2.5" - extend-shallow "^2.0.1" - map-cache "^0.2.2" - source-map "^0.5.6" - source-map-resolve "^0.5.0" - use "^3.1.0" - -socks-proxy-agent@^6.0.0: - version "6.2.1" - resolved "https://registry.yarnpkg.com/socks-proxy-agent/-/socks-proxy-agent-6.2.1.tgz#2687a31f9d7185e38d530bef1944fe1f1496d6ce" - integrity sha512-a6KW9G+6B3nWZ1yB8G7pJwL3ggLy1uTzKAgCb7ttblwqdz9fMGJUuTy3uFzEP48FAs9FLILlmzDlE2JJhVQaXQ== - dependencies: - agent-base "^6.0.2" - debug "^4.3.3" - socks "^2.6.2" - -socks-proxy-agent@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/socks-proxy-agent/-/socks-proxy-agent-7.0.0.tgz#dc069ecf34436621acb41e3efa66ca1b5fed15b6" - integrity sha512-Fgl0YPZ902wEsAyiQ+idGd1A7rSFx/ayC1CQVMw5P+EQx2V0SgpGtf6OKFhVjPflPUl9YMmEOnmfjCdMUsygww== - dependencies: - agent-base "^6.0.2" - debug "^4.3.3" - socks "^2.6.2" - -socks@^2.6.2: - version "2.7.0" - resolved "https://registry.yarnpkg.com/socks/-/socks-2.7.0.tgz#f9225acdb841e874dca25f870e9130990f3913d0" - integrity sha512-scnOe9y4VuiNUULJN72GrM26BNOjVsfPXI+j+98PkyEfsIXroa5ofyjT+FzGvn/xHs73U2JtoBYAVx9Hl4quSA== - dependencies: - ip "^2.0.0" - smart-buffer "^4.2.0" - -sort-keys@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/sort-keys/-/sort-keys-2.0.0.tgz#658535584861ec97d730d6cf41822e1f56684128" - integrity sha1-ZYU1WEhh7JfXMNbPQYIuH1ZoQSg= - dependencies: - is-plain-obj "^1.0.0" - -sort-keys@^4.0.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/sort-keys/-/sort-keys-4.2.0.tgz#6b7638cee42c506fff8c1cecde7376d21315be18" - integrity sha512-aUYIEU/UviqPgc8mHR6IW1EGxkAXpeRETYcrzg8cLAvUPZcpAlleSXHV2mY7G12GphSH6Gzv+4MMVSSkbdteHg== - dependencies: - is-plain-obj "^2.0.0" - -source-list-map@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/source-list-map/-/source-list-map-2.0.1.tgz#3993bd873bfc48479cca9ea3a547835c7c154b34" - integrity sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw== - -source-map-js@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-1.0.2.tgz#adbc361d9c62df380125e7f161f71c826f1e490c" - integrity sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw== - -source-map-loader@^4.0.1: - version "4.0.1" - resolved "https://registry.npmjs.org/source-map-loader/-/source-map-loader-4.0.1.tgz#72f00d05f5d1f90f80974eda781cbd7107c125f2" - integrity sha512-oqXpzDIByKONVY8g1NUPOTQhe0UTU5bWUl32GSkqK2LjJj0HmwTMVKxcUip0RgAYhY1mqgOxjbQM48a0mmeNfA== - dependencies: - abab "^2.0.6" - iconv-lite "^0.6.3" - source-map-js "^1.0.2" - -source-map-loader@~1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/source-map-loader/-/source-map-loader-1.0.2.tgz#b0a6582b2eaa387ede1ecf8061ae0b93c23f9eb0" - integrity sha512-oX8d6ndRjN+tVyjj6PlXSyFPhDdVAPsZA30nD3/II8g4uOv8fCz0DMn5sy8KtVbDfKQxOpGwGJnK3xIW3tauDw== - dependencies: - data-urls "^2.0.0" - iconv-lite "^0.6.2" - loader-utils "^2.0.0" - schema-utils "^2.7.0" - source-map "^0.6.1" - -source-map-resolve@^0.5.0: - version "0.5.3" - resolved "https://registry.yarnpkg.com/source-map-resolve/-/source-map-resolve-0.5.3.tgz#190866bece7553e1f8f267a2ee82c606b5509a1a" - integrity sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw== - dependencies: - atob "^2.1.2" - decode-uri-component "^0.2.0" - resolve-url "^0.2.1" - source-map-url "^0.4.0" - urix "^0.1.0" - -source-map-support@^0.5.6, source-map-support@~0.5.20: - version "0.5.21" - resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.21.tgz#04fe7c7f9e1ed2d662233c28cb2b35b9f63f6e4f" - integrity sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w== - dependencies: - buffer-from "^1.0.0" - source-map "^0.6.0" - -source-map-url@^0.4.0: - version "0.4.1" - resolved "https://registry.yarnpkg.com/source-map-url/-/source-map-url-0.4.1.tgz#0af66605a745a5a2f91cf1bbf8a7afbc283dec56" - integrity sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw== - -source-map@^0.5.6, source-map@~0.5.0: - version "0.5.7" - resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" - integrity sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ== - -source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.0, source-map@~0.6.1: - 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.7.3: - version "0.7.4" - resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.7.4.tgz#a9bbe705c9d8846f4e08ff6765acf0f1b0898656" - integrity sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA== - -spdx-correct@^3.0.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.2.0.tgz#4f5ab0668f0059e34f9c00dce331784a12de4e9c" - integrity sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA== - dependencies: - spdx-expression-parse "^3.0.0" - spdx-license-ids "^3.0.0" - -spdx-exceptions@^2.1.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz#3f28ce1a77a00372683eade4a433183527a2163d" - integrity sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A== - -spdx-expression-parse@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz#cf70f50482eefdc98e3ce0a6833e4a53ceeba679" - integrity sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q== - dependencies: - spdx-exceptions "^2.1.0" - spdx-license-ids "^3.0.0" - -spdx-license-ids@^3.0.0: - version "3.0.13" - resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.13.tgz#7189a474c46f8d47c7b0da4b987bb45e908bd2d5" - integrity sha512-XkD+zwiqXHikFZm4AX/7JSCXA98U5Db4AFd5XUg/+9UNtnH75+Z9KxtpYiJZx36mUDVOwH83pl7yvCer6ewM3w== - -split-string@^3.0.1, split-string@^3.0.2: - version "3.1.0" - resolved "https://registry.yarnpkg.com/split-string/-/split-string-3.1.0.tgz#7cb09dda3a86585705c64b39a6466038682e8fe2" - integrity sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw== - dependencies: - extend-shallow "^3.0.0" - -split2@^3.0.0: - version "3.2.2" - resolved "https://registry.yarnpkg.com/split2/-/split2-3.2.2.tgz#bf2cf2a37d838312c249c89206fd7a17dd12365f" - integrity sha512-9NThjpgZnifTkJpzTZ7Eue85S49QwpNhZTq6GRJwObb6jnLFNGB7Qm73V5HewTROPyxD0C29xqmaI68bQtV+hg== - dependencies: - readable-stream "^3.0.0" - -split2@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/split2/-/split2-4.1.0.tgz#101907a24370f85bb782f08adaabe4e281ecf809" - integrity sha512-VBiJxFkxiXRlUIeyMQi8s4hgvKCSjtknJv/LVYbrgALPwf5zSKmEwV9Lst25AkvMDnvxODugjdl6KZgwKM1WYQ== - -split@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/split/-/split-1.0.1.tgz#605bd9be303aa59fb35f9229fbea0ddec9ea07d9" - integrity sha512-mTyOoPbrivtXnwnIxZRFYRrPNtEFKlpB2fvjSnCQUiAA6qAZzqwna5envK4uk6OIeP17CsdF3rSBGYVBsU0Tkg== - dependencies: - through "2" - -sprintf-js@~1.0.2: - version "1.0.3" - resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" - integrity sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g== - -sql-language-server@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/sql-language-server/-/sql-language-server-1.2.1.tgz#cbc303f35d4561d2dbcf6cf565c72fd722d46336" - integrity sha512-YeWtblGKZBcxumob92i+mGhs2ewy5zmUB26DVNMxmujjAnhKk5wa+2HL+OC4VUo0Um5lzdnI/1cj9YDxKze89g== - dependencies: - "@google-cloud/bigquery" "^5.9.0" - "@joe-re/sql-parser" "^1.2.1" - "@types/pg" "^7.4.10" - "@types/yargs" "^17.0.8" - cardinal "^2.1.1" - jest "^26.0.1" - log4js "^6.2.1" - mysql2 "^2.3.0" - node-ssh-forward "^0.6.3" - pg "^7.4.3" - sqlint "^1.2.1" - sqlite3 "^5.0.2" - vscode-languageclient "^6.1.3" - vscode-languageserver "8.0.0-next.8" - vscode-languageserver-protocol "^3.15.3" - vscode-languageserver-textdocument "^1.0.1" - yargs "^17.3.1" - -sqlint@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/sqlint/-/sqlint-1.2.1.tgz#1b470c794465d0b079e5dc0130f72812f86a1451" - integrity sha512-s/GUTVlAm6ZZeAzdq5oUXTlyTdE7ciT3umTz6SAsBe9TE8KvKrWltuEZ6y9J1Rtdvz2TQLz66SZWgsihuSDpKg== - dependencies: - "@joe-re/sql-parser" "^1.2.1" - ajv "^6.12.2" - chalk "^4.0.0" - js-yaml "^3.14.0" - yargs "^17.3.1" - -sqlite3@^5.0.2: - version "5.1.5" - resolved "https://registry.yarnpkg.com/sqlite3/-/sqlite3-5.1.5.tgz#cf5a753c98914f3aa44b7bd057702fdca6abceb6" - integrity sha512-7sP16i4wI+yKnGOO2q2ijze7EjQ9US+Vw7DYYwxfFtqNZDGgBcEw0oeDaDvUTq66uJOzVd/z6MkIg+c9erSJKg== - dependencies: - "@mapbox/node-pre-gyp" "^1.0.0" - node-addon-api "^4.2.0" - tar "^6.1.11" - optionalDependencies: - node-gyp "8.x" - -sqlstring@^2.3.2: - version "2.3.3" - resolved "https://registry.yarnpkg.com/sqlstring/-/sqlstring-2.3.3.tgz#2ddc21f03bce2c387ed60680e739922c65751d0c" - integrity sha512-qC9iz2FlN7DQl3+wjwn3802RTyjCx7sDvfQEXchwa6CWOx07/WVfh91gBmQ9fahw8snwGEWU3xGzOt4tFyHLxg== - -ssh2-streams@~0.4.10: - version "0.4.10" - resolved "https://registry.yarnpkg.com/ssh2-streams/-/ssh2-streams-0.4.10.tgz#48ef7e8a0e39d8f2921c30521d56dacb31d23a34" - integrity sha512-8pnlMjvnIZJvmTzUIIA5nT4jr2ZWNNVHwyXfMGdRJbug9TpI3kd99ffglgfSWqujVv/0gxwMsDn9j9RVst8yhQ== - dependencies: - asn1 "~0.2.0" - bcrypt-pbkdf "^1.0.2" - streamsearch "~0.1.2" - -ssh2@^0.8.9: - version "0.8.9" - resolved "https://registry.yarnpkg.com/ssh2/-/ssh2-0.8.9.tgz#54da3a6c4ba3daf0d8477a538a481326091815f3" - integrity sha512-GmoNPxWDMkVpMFa9LVVzQZHF6EW3WKmBwL+4/GeILf2hFmix5Isxm7Amamo8o7bHiU0tC+wXsGcUXOxp8ChPaw== - dependencies: - ssh2-streams "~0.4.10" - -ssri@^8.0.0, ssri@^8.0.1: - version "8.0.1" - resolved "https://registry.yarnpkg.com/ssri/-/ssri-8.0.1.tgz#638e4e439e2ffbd2cd289776d5ca457c4f51a2af" - integrity sha512-97qShzy1AiyxvPNIkLWoGua7xoQzzPjQ0HAH4B0rWKo7SZ6USuPcrUiAFrws0UH8RrbWmgq3LMTObhPIHbbBeQ== - dependencies: - minipass "^3.1.1" - -ssri@^9.0.0, ssri@^9.0.1: - version "9.0.1" - resolved "https://registry.yarnpkg.com/ssri/-/ssri-9.0.1.tgz#544d4c357a8d7b71a19700074b6883fcb4eae057" - integrity sha512-o57Wcn66jMQvfHG1FlYbWeZWW/dHZhJXjpIcTfXldXEk5nz5lStPo3mK0OJQfGR3RbZUlbISexbljkJzuEj/8Q== - dependencies: - minipass "^3.1.1" - -stack-utils@^2.0.2: - version "2.0.6" - resolved "https://registry.yarnpkg.com/stack-utils/-/stack-utils-2.0.6.tgz#aaf0748169c02fc33c8232abccf933f54a1cc34f" - integrity sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ== - dependencies: - escape-string-regexp "^2.0.0" - -state-toggle@^1.0.0: - version "1.0.3" - resolved "https://registry.yarnpkg.com/state-toggle/-/state-toggle-1.0.3.tgz#e123b16a88e143139b09c6852221bc9815917dfe" - integrity sha512-d/5Z4/2iiCnHw6Xzghyhb+GcmF89bxwgXG60wjIiZaxnymbyOmI8Hk4VqHXiVVp6u2ysaskFfXg3ekCj4WNftQ== - -static-extend@^0.1.1: - version "0.1.2" - resolved "https://registry.yarnpkg.com/static-extend/-/static-extend-0.1.2.tgz#60809c39cbff55337226fd5e0b520f341f1fb5c6" - integrity sha512-72E9+uLc27Mt718pMHt9VMNiAL4LMsmDbBva8mxWUCkT07fSzEGMYUCk0XWY6lp0j6RBAG4cJ3mWuZv2OE3s0g== - dependencies: - define-property "^0.2.5" - object-copy "^0.1.0" - -stdin@0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/stdin/-/stdin-0.0.1.tgz#d3041981aaec3dfdbc77a1b38d6372e38f5fb71e" - integrity sha1-0wQZgarsPf28d6GzjWNy449ftx4= - -stream-browserify@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/stream-browserify/-/stream-browserify-3.0.0.tgz#22b0a2850cdf6503e73085da1fc7b7d0c2122f2f" - integrity sha512-H73RAHsVBapbim0tU2JwwOiXUj+fikfiaoYAKHF3VJfA0pe2BCzkhAHBlLG6REzE+2WNZcxOXjK7lkso+9euLA== - dependencies: - inherits "~2.0.4" - readable-stream "^3.5.0" - -stream-events@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/stream-events/-/stream-events-1.0.5.tgz#bbc898ec4df33a4902d892333d47da9bf1c406d5" - integrity sha512-E1GUzBSgvct8Jsb3v2X15pjzN1tYebtbLaMg+eBOUOAxgbLoSbT2NS91ckc5lJD1KfLjId+jXJRgo0qnV5Nerg== - dependencies: - stubs "^3.0.0" - -stream-shift@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/stream-shift/-/stream-shift-1.0.1.tgz#d7088281559ab2778424279b0877da3c392d5a3d" - integrity sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ== - -streamroller@^3.0.5: - version "3.0.5" - resolved "https://registry.yarnpkg.com/streamroller/-/streamroller-3.0.5.tgz#17e348dc2a662f9f325373549ab91d55316051ab" - integrity sha512-5uzTEUIi4OB5zy/H30kbUN/zpDNJsFUA+Z47ZL8EfrP93lcZvRLEqdbhdunEPa7CouuAzXXsHpCJ9dg90Umw7g== - dependencies: - date-format "^4.0.5" - debug "^4.3.3" - fs-extra "^10.0.1" - -streamsearch@~0.1.2: - version "0.1.2" - resolved "https://registry.yarnpkg.com/streamsearch/-/streamsearch-0.1.2.tgz#808b9d0e56fc273d809ba57338e929919a1a9f1a" - integrity sha1-gIudDlb8Jz2Am6VzOOkpkZoanxo= - -string-length@^4.0.1: - version "4.0.2" - resolved "https://registry.yarnpkg.com/string-length/-/string-length-4.0.2.tgz#a8a8dc7bd5c1a82b9b3c8b87e125f66871b6e57a" - integrity sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ== - dependencies: - char-regex "^1.0.2" - strip-ansi "^6.0.0" - -"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@^1.0.2 || 2 || 3 || 4", string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3: - version "4.2.3" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" - integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== - dependencies: - emoji-regex "^8.0.0" - is-fullwidth-code-point "^3.0.0" - strip-ansi "^6.0.1" - -string-width@^3.0.0, string-width@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-3.1.0.tgz#22767be21b62af1081574306f69ac51b62203961" - integrity sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w== - dependencies: - emoji-regex "^7.0.1" - is-fullwidth-code-point "^2.0.0" - strip-ansi "^5.1.0" - -string.prototype.matchall@^4.0.8: - version "4.0.8" - resolved "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.8.tgz#3bf85722021816dcd1bf38bb714915887ca79fd3" - integrity sha512-6zOCOcJ+RJAQshcTvXPHoxoQGONa3e/Lqx90wUA+wEzX78sg5Bo+1tQo4N0pohS0erG9qtCqJDjNCQBjeWVxyg== - dependencies: - call-bind "^1.0.2" - define-properties "^1.1.4" - es-abstract "^1.20.4" - get-intrinsic "^1.1.3" - has-symbols "^1.0.3" - internal-slot "^1.0.3" - regexp.prototype.flags "^1.4.3" - side-channel "^1.0.4" - -string.prototype.padend@^3.0.0: - version "3.1.1" - resolved "https://registry.yarnpkg.com/string.prototype.padend/-/string.prototype.padend-3.1.1.tgz#824c84265dbac46cade2b957b38b6a5d8d1683c5" - integrity sha512-eCzTASPnoCr5Ht+Vn1YXgm8SB015hHKgEIMu9Nr9bQmLhRBxKRfmzSj/IQsxDFc8JInJDDFA0qXwK+xxI7wDkg== - dependencies: - call-bind "^1.0.0" - define-properties "^1.1.3" - es-abstract "^1.18.0-next.1" - -string.prototype.trimend@^1.0.6: - version "1.0.6" - resolved "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.6.tgz#c4a27fa026d979d79c04f17397f250a462944533" - integrity sha512-JySq+4mrPf9EsDBEDYMOb/lM7XQLulwg5R/m1r0PXEFqrV0qHvl58sdTilSXtKOflCsK2E8jxf+GKC0T07RWwQ== - dependencies: - call-bind "^1.0.2" - define-properties "^1.1.4" - es-abstract "^1.20.4" - -string.prototype.trimstart@^1.0.6: - version "1.0.6" - resolved "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.6.tgz#e90ab66aa8e4007d92ef591bbf3cd422c56bdcf4" - integrity sha512-omqjMDaY92pbn5HOX7f9IccLA+U1tA9GvtU4JrodiXFfYB7jPzzHpRzpglLAjtUV6bB557zwClJezTqnAiYnQA== - dependencies: - call-bind "^1.0.2" - define-properties "^1.1.4" - es-abstract "^1.20.4" - -string_decoder@^1.1.1, string_decoder@~1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8" - integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg== - dependencies: - safe-buffer "~5.1.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@^5.0.0, strip-ansi@^5.1.0, strip-ansi@^5.2.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-5.2.0.tgz#8c9a536feb6afc962bdfa5b104a5091c1ad9c0ae" - integrity sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA== - dependencies: - ansi-regex "^4.1.0" - -strip-ansi@^6.0.0, strip-ansi@^6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" - integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== - dependencies: - ansi-regex "^5.0.1" - -strip-bom@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" - integrity sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM= - -strip-bom@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-4.0.0.tgz#9c3505c1db45bcedca3d9cf7a16f5c5aa3901878" - integrity sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w== - -strip-eof@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/strip-eof/-/strip-eof-1.0.0.tgz#bb43ff5598a6eb05d89b59fcd129c983313606bf" - integrity sha512-7FCwGGmx8mD5xQd3RPUvnSpUXHM3BWuzjtpD4TXsfcZ9EL4azvVVUscFYwD9nx8Kh+uCBC00XBtAykoMHwTh8Q== - -strip-final-newline@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/strip-final-newline/-/strip-final-newline-2.0.0.tgz#89b852fb2fcbe936f6f4b3187afb0a12c1ab58ad" - integrity sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA== - -strip-indent@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/strip-indent/-/strip-indent-3.0.0.tgz#c32e1cee940b6b3432c771bc2c54bcce73cd3001" - integrity sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ== - dependencies: - min-indent "^1.0.0" - -strip-json-comments@2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" - integrity sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ== - -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== - -strong-log-transformer@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/strong-log-transformer/-/strong-log-transformer-2.1.0.tgz#0f5ed78d325e0421ac6f90f7f10e691d6ae3ae10" - integrity sha512-B3Hgul+z0L9a236FAUC9iZsL+nVHgoCJnqCbN588DjYxvGXaXaaFbfmQ/JhvKjZwsOukuR72XbHv71Qkug0HxA== - dependencies: - duplexer "^0.1.1" - minimist "^1.2.0" - through "^2.3.4" - -stubs@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/stubs/-/stubs-3.0.0.tgz#e8d2ba1fa9c90570303c030b6900f7d5f89abe5b" - integrity sha1-6NK6H6nJBXAwPAMLaQD31fiavls= - -style-loader@~2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/style-loader/-/style-loader-2.0.0.tgz#9669602fd4690740eaaec137799a03addbbc393c" - integrity sha512-Z0gYUJmzZ6ZdRUqpg1r8GsaFKypE+3xAzuFeMuoHgjc9KZv3wMyCRjQIWEbhoFSq7+7yoHXySDJyyWQaPajeiQ== - dependencies: - loader-utils "^2.0.0" - schema-utils "^3.0.0" - -supports-color@6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-6.0.0.tgz#76cfe742cf1f41bb9b1c29ad03068c05b4c0e40a" - integrity sha512-on9Kwidc1IUQo+bQdhi8+Tijpo0e1SS6RoGo2guUwn5vdaxw8RXOF9Vb2ws+ihWOmh4JnCJOvaziZWP1VABaLg== - dependencies: - has-flag "^3.0.0" - -supports-color@^5.3.0, supports-color@^5.5.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.0.0, supports-color@^7.1.0, supports-color@^7.2.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" - -supports-color@^8.0.0: - 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-hyperlinks@^2.0.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/supports-hyperlinks/-/supports-hyperlinks-2.3.0.tgz#3943544347c1ff90b15effb03fc14ae45ec10624" - integrity sha512-RpsAZlpWcDwOPQA22aCH4J0t7L8JmAvsCxfOSEwm7cQs3LshN36QaTkwd70DnBOXDWGssw2eUoc8CaRWT0XunA== - dependencies: - has-flag "^4.0.0" - supports-color "^7.0.0" - -supports-preserve-symlinks-flag@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09" - integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w== - -svg-url-loader@~6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/svg-url-loader/-/svg-url-loader-6.0.0.tgz#b94861d9f6badfb8ca3e7d3ec4655c1bf732ac5d" - integrity sha512-Qr5SCKxyxKcRnvnVrO3iQj9EX/v40UiGEMshgegzV7vpo3yc+HexELOdtWcA3MKjL8IyZZ1zOdcILmDEa/8JJQ== - dependencies: - file-loader "~6.0.0" - loader-utils "~2.0.0" - -symbol-tree@^3.2.4: - version "3.2.4" - resolved "https://registry.yarnpkg.com/symbol-tree/-/symbol-tree-3.2.4.tgz#430637d248ba77e078883951fb9aa0eed7c63fa2" - integrity sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw== - -tapable@^2.1.1, tapable@^2.2.0: - version "2.2.1" - resolved "https://registry.yarnpkg.com/tapable/-/tapable-2.2.1.tgz#1967a73ef4060a82f12ab96af86d52fdb76eeca0" - integrity sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ== - -tar-stream@~2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/tar-stream/-/tar-stream-2.2.0.tgz#acad84c284136b060dc3faa64474aa9aebd77287" - integrity sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ== - dependencies: - bl "^4.0.3" - end-of-stream "^1.4.1" - fs-constants "^1.0.0" - inherits "^2.0.3" - readable-stream "^3.1.1" - -tar@^6.0.2, tar@^6.1.0, tar@^6.1.11, tar@^6.1.2: - version "6.1.13" - resolved "https://registry.yarnpkg.com/tar/-/tar-6.1.13.tgz#46e22529000f612180601a6fe0680e7da508847b" - integrity sha512-jdIBIN6LTIe2jqzay/2vtYLlBHa3JF42ot3h1dW8Q0PaAG4v8rm0cvpVePtau5C6OKXGGcgO9q2AMNSWxiLqKw== - 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" - -teeny-request@^7.0.0: - version "7.1.3" - resolved "https://registry.yarnpkg.com/teeny-request/-/teeny-request-7.1.3.tgz#5a3d90c559a6c664a993477b138e331a518765ba" - integrity sha512-Ew3aoFzgQEatLA5OBIjdr1DWJUaC1xardG+qbPPo5k/y/3fMwXLxpjh5UB5dVfElktLaQbbMs80chkz53ByvSg== - dependencies: - http-proxy-agent "^5.0.0" - https-proxy-agent "^5.0.0" - node-fetch "^2.6.1" - stream-events "^1.0.5" - uuid "^8.0.0" - -temp-dir@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/temp-dir/-/temp-dir-1.0.0.tgz#0a7c0ea26d3a39afa7e0ebea9c1fc0bc4daa011d" - integrity sha1-CnwOom06Oa+n4OvqnB/AvE2qAR0= - -temp-dir@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/temp-dir/-/temp-dir-2.0.0.tgz#bde92b05bdfeb1516e804c9c00ad45177f31321e" - integrity sha512-aoBAniQmmwtcKp/7BzsH8Cxzv8OL736p7v1ihGb5e9DJ9kTwGWHrQrVB5+lfVDzfGrdRzXch+ig7LHaY1JTOrg== - -tempy@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/tempy/-/tempy-1.0.1.tgz#30fe901fd869cfb36ee2bd999805aa72fbb035de" - integrity sha512-biM9brNqxSc04Ee71hzFbryD11nX7VPhQQY32AdDmjFvodsRFz/3ufeoTZ6uYkRFfGo188tENcASNs3vTdsM0w== - dependencies: - del "^6.0.0" - is-stream "^2.0.0" - temp-dir "^2.0.0" - type-fest "^0.16.0" - unique-string "^2.0.0" - -terminal-link@^2.0.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/terminal-link/-/terminal-link-2.1.1.tgz#14a64a27ab3c0df933ea546fba55f2d078edc994" - integrity sha512-un0FmiRUQNr5PJqy9kP7c40F5BOfpGlYTrxonDChEZB7pzZxRNp/bt+ymiy9/npwXya9KH99nJ/GXFIiUkYGFQ== - dependencies: - ansi-escapes "^4.2.1" - supports-hyperlinks "^2.0.0" - -terser-webpack-plugin@^4.1.0: - version "4.2.3" - resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-4.2.3.tgz#28daef4a83bd17c1db0297070adc07fc8cfc6a9a" - integrity sha512-jTgXh40RnvOrLQNgIkwEKnQ8rmHjHK4u+6UBEi+W+FPmvb+uo+chJXntKe7/3lW5mNysgSWD60KyesnhW8D6MQ== - dependencies: - cacache "^15.0.5" - find-cache-dir "^3.3.1" - jest-worker "^26.5.0" - p-limit "^3.0.2" - schema-utils "^3.0.0" - serialize-javascript "^5.0.1" - source-map "^0.6.1" - terser "^5.3.4" - webpack-sources "^1.4.3" - -terser-webpack-plugin@^5.1.3: - version "5.3.7" - resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-5.3.7.tgz#ef760632d24991760f339fe9290deb936ad1ffc7" - integrity sha512-AfKwIktyP7Cu50xNjXF/6Qb5lBNzYaWpU6YfoX3uZicTx0zTy0stDDCsvjDapKsSDvOeWo5MEq4TmdBy2cNoHw== - dependencies: - "@jridgewell/trace-mapping" "^0.3.17" - jest-worker "^27.4.5" - schema-utils "^3.1.1" - serialize-javascript "^6.0.1" - terser "^5.16.5" - -terser@^5.16.5, terser@^5.3.4: - version "5.16.6" - resolved "https://registry.yarnpkg.com/terser/-/terser-5.16.6.tgz#f6c7a14a378ee0630fbe3ac8d1f41b4681109533" - integrity sha512-IBZ+ZQIA9sMaXmRZCUMDjNH0D5AQQfdn4WUjHL0+1lF4TP1IHRJbrhb6fNaXWikrYQTSkb7SLxkeXAiy1p7mbg== - dependencies: - "@jridgewell/source-map" "^0.3.2" - acorn "^8.5.0" - commander "^2.20.0" - source-map-support "~0.5.20" - -test-exclude@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/test-exclude/-/test-exclude-6.0.0.tgz#04a8698661d805ea6fa293b6cb9e63ac044ef15e" - integrity sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w== - dependencies: - "@istanbuljs/schema" "^0.1.2" - glob "^7.1.4" - minimatch "^3.0.4" - -text-extensions@^1.0.0: - version "1.9.0" - resolved "https://registry.yarnpkg.com/text-extensions/-/text-extensions-1.9.0.tgz#1853e45fee39c945ce6f6c36b2d659b5aabc2a26" - integrity sha512-wiBrwC1EhBelW12Zy26JeOUkQ5mRu+5o8rpsJk5+2t+Y5vE7e842qtZDQ2g1NpX/29HdyFeJ4nSIhI47ENSxlQ== - -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= - -thenify-all@^1.0.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/thenify-all/-/thenify-all-1.6.0.tgz#1a1918d402d8fc3f98fbf234db0bcc8cc10e9726" - integrity sha1-GhkY1ALY/D+Y+/I02wvMjMEOlyY= - dependencies: - thenify ">= 3.1.0 < 4" - -"thenify@>= 3.1.0 < 4": - version "3.3.1" - resolved "https://registry.yarnpkg.com/thenify/-/thenify-3.3.1.tgz#8932e686a4066038a016dd9e2ca46add9838a95f" - integrity sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw== - dependencies: - any-promise "^1.0.0" - -throat@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/throat/-/throat-5.0.0.tgz#c5199235803aad18754a667d659b5e72ce16764b" - integrity sha512-fcwX4mndzpLQKBS1DVYhGAcYaYt7vsHNIvQV+WXMvnow5cgjPphq5CaayLaGsjRdSCKZFNGt7/GYAuXaNOiYCA== - -through2@^2.0.0: - version "2.0.5" - resolved "https://registry.yarnpkg.com/through2/-/through2-2.0.5.tgz#01c1e39eb31d07cb7d03a96a70823260b23132cd" - integrity sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ== - dependencies: - readable-stream "~2.3.6" - xtend "~4.0.1" - -through2@^4.0.0: - version "4.0.2" - resolved "https://registry.yarnpkg.com/through2/-/through2-4.0.2.tgz#a7ce3ac2a7a8b0b966c80e7c49f0484c3b239764" - integrity sha512-iOqSav00cVxEEICeD7TjLB1sueEL+81Wpzp2bY17uZjZN0pWZPuo4suZ/61VujxmqSGFfgOcNuTZ85QJwNZQpw== - dependencies: - readable-stream "3" - -through@2, "through@>=2.2.7 <3", through@^2.3.4, through@^2.3.6, through@~2.3.6: - version "2.3.8" - resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" - integrity sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU= - -timers-ext@^0.1.5: - version "0.1.7" - resolved "https://registry.yarnpkg.com/timers-ext/-/timers-ext-0.1.7.tgz#6f57ad8578e07a3fb9f91d9387d65647555e25c6" - integrity sha512-b85NUNzTSdodShTIbky6ZF02e8STtVVfD+fu4aXXShEELpozH+bCpJLYMPZbsABN2wDH7fJpqIoXxJpzbf0NqQ== - dependencies: - es5-ext "~0.10.46" - next-tick "1" - -tmp@^0.0.33: - version "0.0.33" - resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9" - integrity sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw== - dependencies: - os-tmpdir "~1.0.2" - -tmp@~0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.2.1.tgz#8457fc3037dcf4719c251367a1af6500ee1ccf14" - integrity sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ== - dependencies: - rimraf "^3.0.0" - -tmpl@1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/tmpl/-/tmpl-1.0.5.tgz#8683e0b902bb9c20c4f726e3c0b69f36518c07cc" - integrity sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw== - -to-fast-properties@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e" - integrity sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog== - -to-object-path@^0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/to-object-path/-/to-object-path-0.3.0.tgz#297588b7b0e7e0ac08e04e672f85c1f4999e17af" - integrity sha512-9mWHdnGRuh3onocaHzukyvCZhzvr6tiflAy/JRFXcJX0TjgfWA9pk9t8CMbzmBE4Jfw58pXbkngtBtqYxzNEyg== - dependencies: - kind-of "^3.0.2" - -to-regex-range@^2.1.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-2.1.1.tgz#7c80c17b9dfebe599e27367e0d4dd5590141db38" - integrity sha512-ZZWNfCjUokXXDGXFpZehJIkZqq91BcULFq/Pi7M5i4JnxXdhMKAK682z8bCW3o8Hj1wuuzoKcW3DfVzaP6VuNg== - dependencies: - is-number "^3.0.0" - repeat-string "^1.6.1" - -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" - -to-regex@^3.0.1, to-regex@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/to-regex/-/to-regex-3.0.2.tgz#13cfdd9b336552f30b51f33a8ae1b42a7a7599ce" - integrity sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw== - dependencies: - define-property "^2.0.2" - extend-shallow "^3.0.2" - regex-not "^1.0.2" - safe-regex "^1.1.0" - -to-string-loader@^1.1.6: - version "1.2.0" - resolved "https://registry.yarnpkg.com/to-string-loader/-/to-string-loader-1.2.0.tgz#4364aa044b9aa876473f4d7a36ef7d216a276e9c" - integrity sha512-KsWUL8FccgBW9FPFm4vYoQbOOcO5m6hKOGYoXjbseD9/4Ft+ravXN5jolQ9kTKYcK4zPt1j+khx97GPGnVoi6A== - dependencies: - loader-utils "^1.0.0" - -tough-cookie@^4.0.0: - version "4.1.2" - resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-4.1.2.tgz#e53e84b85f24e0b65dd526f46628db6c85f6b874" - integrity sha512-G9fqXWoYFZgTc2z8Q5zaHy/vJMjm+WV0AkAeHxVCQiEB1b+dGvWzFW6QV07cY5jQ5gRkeid2qIkzkxUnmoQZUQ== - dependencies: - psl "^1.1.33" - punycode "^2.1.1" - universalify "^0.2.0" - url-parse "^1.5.3" - -tr46@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/tr46/-/tr46-2.1.0.tgz#fa87aa81ca5d5941da8cbf1f9b749dc969a4e240" - integrity sha512-15Ih7phfcdP5YxqiB+iDtLoaTz4Nd35+IiAv0kQ5FNKHzXgdWqPoTIqEDDJmXceQt4JZk6lVPT8lnDlPpGDppw== - dependencies: - punycode "^2.1.1" - -tr46@~0.0.3: - version "0.0.3" - resolved "https://registry.yarnpkg.com/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a" - integrity sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw== - -treeverse@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/treeverse/-/treeverse-2.0.0.tgz#036dcef04bc3fd79a9b79a68d4da03e882d8a9ca" - integrity sha512-N5gJCkLu1aXccpOTtqV6ddSEi6ZmGkh3hjmbu1IjcavJK4qyOVQmi0myQKM7z5jVGmD68SJoliaVrMmVObhj6A== - -trim-newlines@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/trim-newlines/-/trim-newlines-3.0.1.tgz#260a5d962d8b752425b32f3a7db0dcacd176c144" - integrity sha512-c1PTsA3tYrIsLGkJkzHF+w9F2EyxfXGo4UyJc4pFL++FMjnq0HJS69T3M7d//gKrFKwy429bouPescbjecU+Zw== - -trim-trailing-lines@^1.0.0: - version "1.1.4" - resolved "https://registry.yarnpkg.com/trim-trailing-lines/-/trim-trailing-lines-1.1.4.tgz#bd4abbec7cc880462f10b2c8b5ce1d8d1ec7c2c0" - integrity sha512-rjUWSqnfTNrjbB9NQWfPMH/xRK1deHeGsHoVfpxJ++XeYXE0d6B1En37AHfw3jtfTU7dzMzZL2jjpe8Qb5gLIQ== - -trim@0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/trim/-/trim-0.0.1.tgz#5858547f6b290757ee95cccc666fb50084c460dd" - integrity sha1-WFhUf2spB1fulczMZm+1AITEYN0= - -trough@^1.0.0: - version "1.0.5" - resolved "https://registry.yarnpkg.com/trough/-/trough-1.0.5.tgz#b8b639cefad7d0bb2abd37d433ff8293efa5f406" - integrity sha512-rvuRbTarPXmMb79SmzEp8aqXNKcK+y0XaB298IXueQ8I2PsrATcPBCSPyK/dDNa2iWOhKlfNnOjdAOTBU/nkFA== - -ts-jest@^26.3.0, ts-jest@^26.4.3: - version "26.5.6" - resolved "https://registry.yarnpkg.com/ts-jest/-/ts-jest-26.5.6.tgz#c32e0746425274e1dfe333f43cd3c800e014ec35" - integrity sha512-rua+rCP8DxpA8b4DQD/6X2HQS8Zy/xzViVYfEs2OQu68tkCuKLV0Md8pmX55+W24uRIyAsf/BajRfxOs+R2MKA== - dependencies: - bs-logger "0.x" - buffer-from "1.x" - fast-json-stable-stringify "2.x" - jest-util "^26.1.0" - json5 "2.x" - lodash "4.x" - make-error "1.x" - mkdirp "1.x" - semver "7.x" - yargs-parser "20.x" - -tsconfig-paths@^3.14.1, tsconfig-paths@^3.9.0: - version "3.14.1" - resolved "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.14.1.tgz#ba0734599e8ea36c862798e920bcf163277b137a" - integrity sha512-fxDhWnFSLt3VuTwtvJt5fpwxBHg5AdKWMsgcPOOIilyjymcYVZoCQF8fvFRezCNfblEXmi+PcM1eYHeOAgXCOQ== - dependencies: - "@types/json5" "^0.0.29" - json5 "^1.0.1" - minimist "^1.2.6" - strip-bom "^3.0.0" - -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== - -tslib@^2.1.0, tslib@^2.3.0, tslib@^2.4.0: - version "2.4.1" - resolved "https://registry.npmjs.org/tslib/-/tslib-2.4.1.tgz#0d0bfbaac2880b91e22df0768e55be9753a5b17e" - integrity sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA== - -tslib@~2.3.1: - version "2.3.1" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.3.1.tgz#e8a335add5ceae51aa261d32a490158ef042ef01" - integrity sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw== - -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" - -tunnel@^0.0.6: - version "0.0.6" - resolved "https://registry.yarnpkg.com/tunnel/-/tunnel-0.0.6.tgz#72f1314b34a5b192db012324df2cc587ca47f92c" - integrity sha512-1h/Lnq9yajKY2PEbBadPXj3VxsDDu844OnaAo52UVmIzIvwwtBPIuNvkjuzBlTWpfJyUbG3ez0KSBibQkj4ojg== - -turndown@7.1.2: - version "7.1.2" - resolved "https://registry.yarnpkg.com/turndown/-/turndown-7.1.2.tgz#7feb838c78f14241e79ed92a416e0d213e044a29" - integrity sha512-ntI9R7fcUKjqBP6QU8rBK2Ehyt8LAzt3UBT9JR9tgo6GtuKvyUzpayWmeMKJw1DPdXzktvtIT8m2mVXz+bL/Qg== - dependencies: - domino "^2.1.6" - -tweetnacl@^0.14.3: - version "0.14.5" - resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64" - integrity sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA== - -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-check@~0.3.2: - version "0.3.2" - resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.3.2.tgz#5884cab512cf1d355e3fb784f30804b2b520db72" - integrity sha512-ZCmOJdvOWDBYJlzAoFkC+Q0+bUyEOS1ltgp1MGU03fqHG+dbi9tBFU2Rd9QKiDZFAYrhPh2JUf7rZRIuHRKtOg== - dependencies: - prelude-ls "~1.1.2" - -type-detect@4.0.8, 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.16.0: - version "0.16.0" - resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.16.0.tgz#3240b891a78b0deae910dbeb86553e552a148860" - integrity sha512-eaBzG6MxNzEn9kiwvtre90cXaNLkmadMWa1zQMs3XORCXNbsH/OewwbxC5ia9dCxIxnTAsSxXJaa/p5y8DlvJg== - -type-fest@^0.18.0: - version "0.18.1" - resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.18.1.tgz#db4bc151a4a2cf4eebf9add5db75508db6cc841f" - integrity sha512-OIAYXk8+ISY+qTOwkHtKqzAuxchoMiD9Udx+FSGQDuiRR+PJKJHc2NJAXlbhkGwTt/4/nKZxELY1w3ReWOL8mw== - -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== - -type-fest@^0.21.3: - version "0.21.3" - resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.21.3.tgz#d260a24b0198436e133fa26a524a6d65fa3b2e37" - integrity sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w== - -type-fest@^0.4.1: - version "0.4.1" - resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.4.1.tgz#8bdf77743385d8a4f13ba95f610f5ccd68c728f8" - integrity sha512-IwzA/LSfD2vC1/YDYMv/zHP4rDF1usCwllsDpbolT3D4fUepIO7f9K70jjmUewU/LmGUKJcwcVtDCpnKk4BPMw== - -type-fest@^0.6.0: - version "0.6.0" - resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.6.0.tgz#8d2a2370d3df886eb5c90ada1c5bf6188acf838b" - integrity sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg== - -type-fest@^0.8.1: - version "0.8.1" - resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.8.1.tgz#09e249ebde851d3b1e48d27c105444667f17b83d" - integrity sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA== - -type@^1.0.1: - version "1.2.0" - resolved "https://registry.yarnpkg.com/type/-/type-1.2.0.tgz#848dd7698dafa3e54a6c479e759c4bc3f18847a0" - integrity sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg== - -type@^2.5.0: - version "2.7.2" - resolved "https://registry.yarnpkg.com/type/-/type-2.7.2.tgz#2376a15a3a28b1efa0f5350dcf72d24df6ef98d0" - integrity sha512-dzlvlNlt6AXU7EBSfpAscydQ7gXB+pPGsPnfJnZpiNJBDj7IaJzQlBZYGdEi4R9HmPdBv2XmWJ6YUtoTa7lmCw== - -typed-styles@^0.0.7: - version "0.0.7" - resolved "https://registry.yarnpkg.com/typed-styles/-/typed-styles-0.0.7.tgz#93392a008794c4595119ff62dde6809dbc40a3d9" - integrity sha512-pzP0PWoZUhsECYjABgCGQlRGL1n7tOHsgwYv3oIiEpJwGhFTuty/YNeduxQYzXXa3Ge5BdT6sHYIQYpl4uJ+5Q== - -typedarray-to-buffer@^3.1.5: - version "3.1.5" - resolved "https://registry.yarnpkg.com/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz#a97ee7a9ff42691b9f783ff1bc5112fe3fca9080" - integrity sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q== - dependencies: - is-typedarray "^1.0.0" - -typedarray@^0.0.6: - version "0.0.6" - resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" - integrity sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c= - -typedoc@^0.22.13: - version "0.22.13" - resolved "https://registry.yarnpkg.com/typedoc/-/typedoc-0.22.13.tgz#d061f8f0fb7c9d686e48814f245bddeea4564e66" - integrity sha512-NHNI7Dr6JHa/I3+c62gdRNXBIyX7P33O9TafGLd07ur3MqzcKgwTvpg18EtvCLHJyfeSthAtCLpM7WkStUmDuQ== - dependencies: - glob "^7.2.0" - lunr "^2.3.9" - marked "^4.0.12" - minimatch "^5.0.1" - shiki "^0.10.1" - -typescript-language-server@^0.6.4: - version "0.6.5" - resolved "https://registry.yarnpkg.com/typescript-language-server/-/typescript-language-server-0.6.5.tgz#cb2b0a896bd19a8ffc7b414cc104f8456a5d709a" - integrity sha512-gcNm+rxgehKU6Vy+UWwWOHjPAtyqsxAquslzlS1JdmvsRb//nzFXbwIsGRZ8DDaZ5mijfH7PR2BCTysg2nBAIQ== - dependencies: - command-exists "^1.2.6" - commander "^7.2.0" - fs-extra "^10.0.0" - p-debounce "^2.1.0" - tempy "^1.0.1" - vscode-languageserver "^7.0.0" - vscode-languageserver-protocol "^3.16.0" - vscode-languageserver-textdocument "^1.0.1" - vscode-uri "^1.0.5" - -typescript@^2.9.1, "typescript@^3 || ^4", typescript@~4.9.4: - version "4.9.4" - resolved "https://registry.npmjs.org/typescript/-/typescript-4.9.4.tgz#a2a3d2756c079abda241d75f149df9d561091e78" - integrity sha512-Uz+dTXYzxXXbsFpM86Wh3dKCxrQqUcVMxwU54orwlJjOpO3ao8L7j5lH+dWfTwgCwIuM9GQ2kvVotzYJMXTBZg== - -typestyle@^2.0.4: - version "2.4.0" - resolved "https://registry.yarnpkg.com/typestyle/-/typestyle-2.4.0.tgz#df5bae6ff15093f5ce51f0caac5ef79428f64e78" - integrity sha512-/d1BL6Qi+YlMLEydnUEB8KL/CAjAN8cyt3/UyGnOyBrWf7bLGcR/6yhmsaUstO2IcYwZfagjE7AIzuI2vUW9mg== - dependencies: - csstype "3.0.10" - free-style "3.1.0" - -uglify-js@3.4.x, uglify-js@^3.1.4: - version "3.4.10" - resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.4.10.tgz#9ad9563d8eb3acdfb8d38597d2af1d815f6a755f" - integrity sha512-Y2VsbPVs0FIshJztycsO2SfPk7/KAF/T72qzv9u5EpQ4kB2hQoHlhNQTsNyy6ul7lQtqJN/AoWeS23OzEiEFxw== - dependencies: - commander "~2.19.0" - source-map "~0.6.1" - -unbox-primitive@^1.0.2: - version "1.0.2" - resolved "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz#29032021057d5e6cdbd08c5129c226dff8ed6f9e" - integrity sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw== - dependencies: - call-bind "^1.0.2" - has-bigints "^1.0.2" - has-symbols "^1.0.3" - which-boxed-primitive "^1.0.2" - -unherit@^1.0.4: - version "1.1.3" - resolved "https://registry.yarnpkg.com/unherit/-/unherit-1.1.3.tgz#6c9b503f2b41b262330c80e91c8614abdaa69c22" - integrity sha512-Ft16BJcnapDKp0+J/rqFC3Rrk6Y/Ng4nzsC028k2jdDII/rdZ7Wd3pPT/6+vIIxRagwRc9K0IUX0Ra4fKvw+WQ== - dependencies: - inherits "^2.0.0" - xtend "^4.0.0" - -unicode-canonical-property-names-ecmascript@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz#301acdc525631670d39f6146e0e77ff6bbdebddc" - integrity sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ== - -unicode-match-property-ecmascript@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz#54fd16e0ecb167cf04cf1f756bdcc92eba7976c3" - integrity sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q== - dependencies: - unicode-canonical-property-names-ecmascript "^2.0.0" - unicode-property-aliases-ecmascript "^2.0.0" - -unicode-match-property-value-ecmascript@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.0.0.tgz#1a01aa57247c14c568b89775a54938788189a714" - integrity sha512-7Yhkc0Ye+t4PNYzOGKedDhXbYIBe1XEQYQxOPyhcXNMJ0WCABqqj6ckydd6pWRZTHV4GuCPKdBAUiMc60tsKVw== - -unicode-property-aliases-ecmascript@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.0.0.tgz#0a36cb9a585c4f6abd51ad1deddb285c165297c8" - integrity sha512-5Zfuy9q/DFr4tfO7ZPeVXb1aPoeQSdeFMLpYuFebehDAhbuevLs5yxSZmIFN1tP5F9Wl4IpJrYojg85/zgyZHQ== - -unified-language-server@^0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/unified-language-server/-/unified-language-server-0.3.0.tgz#432bad290fb9f28ddb6d2d7849d41d0be281bb1f" - integrity sha512-N+ENrder8z9zJQF9UM7K3/1LcfVW60omqeyaQsu6GN1BGdCgPm8gdHssn7WRD7vx+ABKc82IE1+pJyHOPkwe+w== - dependencies: - dictionary-en-gb "^2.0.0" - parse-latin "^4.1.1" - remark-parse "^6.0.3" - remark-preset-lint-markdown-style-guide "^2.1.2" - remark-retext "^3.1.2" - retext "^6.0.1" - retext-english "^3.0.2" - retext-spell "^2.4.0" - unified "^7.1.0" - vscode-languageserver "^5.2.1" - -unified-lint-rule@^1.0.0: - version "1.0.6" - resolved "https://registry.yarnpkg.com/unified-lint-rule/-/unified-lint-rule-1.0.6.tgz#b4ab801ff93c251faa917a8d1c10241af030de84" - integrity sha512-YPK15YBFwnsVorDFG/u0cVVQN5G2a3V8zv5/N6KN3TCG+ajKtaALcy7u14DCSrJI+gZeyYquFL9cioJXOGXSvg== - dependencies: - wrapped "^1.0.1" - -unified-message-control@^1.0.0: - version "1.0.4" - resolved "https://registry.yarnpkg.com/unified-message-control/-/unified-message-control-1.0.4.tgz#a5e02c07112f78c6687b83a10392c2fba86dc09b" - integrity sha512-e1dEtN4Z/TvLn/qHm+xeZpzqhJTtfZusFErk336kkZVpqrJYiV9ptxq+SbRPFMlN0OkjDYHmVJ929KYjsMTo3g== - dependencies: - trim "0.0.1" - unist-util-visit "^1.0.0" - vfile-location "^2.0.0" - -unified@^7.0.0, unified@^7.1.0: - version "7.1.0" - resolved "https://registry.yarnpkg.com/unified/-/unified-7.1.0.tgz#5032f1c1ee3364bd09da12e27fdd4a7553c7be13" - integrity sha512-lbk82UOIGuCEsZhPj8rNAkXSDXd6p0QLzIuSsCdxrqnqU56St4eyOB+AlXsVgVeRmetPTYydIuvFfpDIed8mqw== - dependencies: - "@types/unist" "^2.0.0" - "@types/vfile" "^3.0.0" - bail "^1.0.0" - extend "^3.0.0" - is-plain-obj "^1.1.0" - trough "^1.0.0" - vfile "^3.0.0" - x-is-string "^0.1.0" - -union-value@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/union-value/-/union-value-1.0.1.tgz#0b6fe7b835aecda61c6ea4d4f02c14221e109847" - integrity sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg== - dependencies: - arr-union "^3.1.0" - get-value "^2.0.6" - is-extendable "^0.1.1" - set-value "^2.0.1" - -unique-filename@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/unique-filename/-/unique-filename-1.1.1.tgz#1d69769369ada0583103a1e6ae87681b56573230" - integrity sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ== - dependencies: - unique-slug "^2.0.0" - -unique-slug@^2.0.0: - version "2.0.2" - resolved "https://registry.yarnpkg.com/unique-slug/-/unique-slug-2.0.2.tgz#baabce91083fc64e945b0f3ad613e264f7cd4e6c" - integrity sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w== - dependencies: - imurmurhash "^0.1.4" - -unique-string@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/unique-string/-/unique-string-2.0.0.tgz#39c6451f81afb2749de2b233e3f7c5e8843bd89d" - integrity sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg== - dependencies: - crypto-random-string "^2.0.0" - -unist-util-generated@^1.1.0: - version "1.1.6" - resolved "https://registry.yarnpkg.com/unist-util-generated/-/unist-util-generated-1.1.6.tgz#5ab51f689e2992a472beb1b35f2ce7ff2f324d4b" - integrity sha512-cln2Mm1/CZzN5ttGK7vkoGw+RZ8VcUH6BtGbq98DDtRGquAAOXig1mrBQYelOwMXYS8rK+vZDyyojSjp7JX+Lg== - -unist-util-is@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/unist-util-is/-/unist-util-is-3.0.0.tgz#d9e84381c2468e82629e4a5be9d7d05a2dd324cd" - integrity sha512-sVZZX3+kspVNmLWBPAB6r+7D9ZgAFPNWm66f7YNb420RlQSbn+n8rG8dGZSkrER7ZIXGQYNm5pqC3v3HopH24A== - -unist-util-modify-children@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/unist-util-modify-children/-/unist-util-modify-children-2.0.0.tgz#9c9c30d4e32502aabb3fde10d7872a17c86801e2" - integrity sha512-HGrj7JQo9DwZt8XFsX8UD4gGqOsIlCih9opG6Y+N11XqkBGKzHo8cvDi+MfQQgiZ7zXRUiQREYHhjOBHERTMdg== - dependencies: - array-iterate "^1.0.0" - -unist-util-position@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/unist-util-position/-/unist-util-position-3.1.0.tgz#1c42ee6301f8d52f47d14f62bbdb796571fa2d47" - integrity sha512-w+PkwCbYSFw8vpgWD0v7zRCl1FpY3fjDSQ3/N/wNd9Ffa4gPi8+4keqt99N3XW6F99t/mUzp2xAhNmfKWp95QA== - -unist-util-remove-position@^1.0.0: - version "1.1.4" - resolved "https://registry.yarnpkg.com/unist-util-remove-position/-/unist-util-remove-position-1.1.4.tgz#ec037348b6102c897703eee6d0294ca4755a2020" - integrity sha512-tLqd653ArxJIPnKII6LMZwH+mb5q+n/GtXQZo6S6csPRs5zB0u79Yw8ouR3wTw8wxvdJFhpP6Y7jorWdCgLO0A== - dependencies: - unist-util-visit "^1.1.0" - -unist-util-stringify-position@^1.0.0, unist-util-stringify-position@^1.1.1: - version "1.1.2" - resolved "https://registry.yarnpkg.com/unist-util-stringify-position/-/unist-util-stringify-position-1.1.2.tgz#3f37fcf351279dcbca7480ab5889bb8a832ee1c6" - integrity sha512-pNCVrk64LZv1kElr0N1wPiHEUoXNVFERp+mlTg/s9R5Lwg87f9bM/3sQB99w+N9D/qnM9ar3+AKDBwo/gm/iQQ== - -unist-util-stringify-position@^2.0.0: - version "2.0.3" - resolved "https://registry.yarnpkg.com/unist-util-stringify-position/-/unist-util-stringify-position-2.0.3.tgz#cce3bfa1cdf85ba7375d1d5b17bdc4cada9bd9da" - integrity sha512-3faScn5I+hy9VleOq/qNbAd6pAx7iH5jYBMS9I1HgQVijz/4mv5Bvw5iw1sC/90CODiKo81G/ps8AJrISn687g== - dependencies: - "@types/unist" "^2.0.2" - -unist-util-visit-children@^1.0.0: - version "1.1.4" - resolved "https://registry.yarnpkg.com/unist-util-visit-children/-/unist-util-visit-children-1.1.4.tgz#e8a087e58a33a2815f76ea1901c15dec2cb4b432" - integrity sha512-sA/nXwYRCQVRwZU2/tQWUqJ9JSFM1X3x7JIOsIgSzrFHcfVt6NkzDtKzyxg2cZWkCwGF9CO8x4QNZRJRMK8FeQ== - -unist-util-visit-parents@^2.0.0: - version "2.1.2" - resolved "https://registry.yarnpkg.com/unist-util-visit-parents/-/unist-util-visit-parents-2.1.2.tgz#25e43e55312166f3348cae6743588781d112c1e9" - integrity sha512-DyN5vD4NE3aSeB+PXYNKxzGsfocxp6asDc2XXE3b0ekO2BaRUpBicbbUygfSvYfUz1IkmjFR1YF7dPklraMZ2g== - dependencies: - unist-util-is "^3.0.0" - -unist-util-visit@^1.0.0, unist-util-visit@^1.1.0, unist-util-visit@^1.1.1, unist-util-visit@^1.4.0: - version "1.4.1" - resolved "https://registry.yarnpkg.com/unist-util-visit/-/unist-util-visit-1.4.1.tgz#4724aaa8486e6ee6e26d7ff3c8685960d560b1e3" - integrity sha512-AvGNk7Bb//EmJZyhtRUnNMEpId/AZ5Ph/KUpTI09WHQuDZHKovQ1oEv3mfmKpWKtoMzyMC4GLBm1Zy5k12fjIw== - dependencies: - unist-util-visit-parents "^2.0.0" - -universal-user-agent@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/universal-user-agent/-/universal-user-agent-6.0.0.tgz#3381f8503b251c0d9cd21bc1de939ec9df5480ee" - integrity sha512-isyNax3wXoKaulPDZWHQqbmIx1k2tb9fb3GGDBRxCscfYV2Ch7WxPArBsFEG8s/safwXTT7H4QGhaIkTp9447w== - -universalify@^0.1.0: - version "0.1.2" - resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66" - integrity sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg== - -universalify@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.2.0.tgz#6451760566fa857534745ab1dde952d1b1761be0" - integrity sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg== - -universalify@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/universalify/-/universalify-2.0.0.tgz#75a4984efedc4b08975c5aeb73f530d02df25717" - integrity sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ== - -unset-value@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/unset-value/-/unset-value-1.0.0.tgz#8376873f7d2335179ffb1e6fc3a8ed0dfc8ab559" - integrity sha512-PcA2tsuGSF9cnySLHTLSh2qrQiJ70mn+r+Glzxv2TWZblxsxCC52BDlZoPCsz7STd9pN7EZetkWZBAvk4cgZdQ== - dependencies: - has-value "^0.3.1" - isobject "^3.0.0" - -upath@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/upath/-/upath-2.0.1.tgz#50c73dea68d6f6b990f51d279ce6081665d61a8b" - integrity sha512-1uEe95xksV1O0CYKXo8vQvN1JEbtJp7lb7C5U9HMsIp6IVwntkH/oNUzyVNQSd4S1sYk2FpSSW44FqMc8qee5w== - -update-browserslist-db@^1.0.10: - version "1.0.10" - resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.0.10.tgz#0f54b876545726f17d00cd9a2561e6dade943ff3" - integrity sha512-OztqDenkfFkbSG+tRxBeAnCVPckDBcvibKd35yDONx6OU8N7sqgwc7rCbkJ/WcYtVRZ4ba68d6byhC21GFh7sQ== - dependencies: - escalade "^3.1.1" - picocolors "^1.0.0" - -upper-case@^1.1.1: - version "1.1.3" - resolved "https://registry.yarnpkg.com/upper-case/-/upper-case-1.1.3.tgz#f6b4501c2ec4cdd26ba78be7222961de77621598" - integrity sha512-WRbjgmYzgXkCV7zNVpy5YgrHgbBv126rMALQQMrmzOVC4GM2waQ9x7xtm8VU+1yF2kWyPzI9zbZ48n4vSxwfSA== - -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" - -urix@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/urix/-/urix-0.1.0.tgz#da937f7a62e21fec1fd18d49b35c2935067a6c72" - integrity sha512-Am1ousAhSLBeB9cG/7k7r2R0zj50uDRlZHPGbazid5s9rlF1F/QKYObEKSIunSjIOkJZqwRRLpvewjEkM7pSqg== - -url-loader@~4.1.0: - version "4.1.1" - resolved "https://registry.yarnpkg.com/url-loader/-/url-loader-4.1.1.tgz#28505e905cae158cf07c92ca622d7f237e70a4e2" - integrity sha512-3BTV812+AVHHOJQO8O5MkWgZ5aosP7GnROJwvzLS9hWDj00lZ6Z0wNak423Lp9PBZN05N+Jk/N5Si8jRAlGyWA== - dependencies: - loader-utils "^2.0.0" - mime-types "^2.1.27" - schema-utils "^3.0.0" - -url-parse@^1.5.3, url-parse@~1.5.1: - version "1.5.10" - resolved "https://registry.yarnpkg.com/url-parse/-/url-parse-1.5.10.tgz#9d3c2f736c1d75dd3bd2be507dcc111f1e2ea9c1" - integrity sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ== - dependencies: - querystringify "^2.1.1" - requires-port "^1.0.0" - -url@^0.11.0: - version "0.11.0" - resolved "https://registry.yarnpkg.com/url/-/url-0.11.0.tgz#3838e97cfc60521eb73c525a8e55bfdd9e2e28f1" - integrity sha512-kbailJa29QrtXnxgq+DdCEGlbTeYM2eJUxsz6vjZavrCYPMIFHMKQmSKYAIuUK2i7hgPm28a8piX5NTUtM/LKQ== - dependencies: - punycode "1.3.2" - querystring "0.2.0" - -use@^3.1.0: - version "3.1.1" - resolved "https://registry.yarnpkg.com/use/-/use-3.1.1.tgz#d50c8cac79a19fbc20f2911f56eb973f4e10070f" - integrity sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ== - -util-deprecate@^1.0.1, util-deprecate@^1.0.2, util-deprecate@~1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" - integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw== - -uuid@^3.3.3: - version "3.4.0" - resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.4.0.tgz#b23e4358afa8a202fe7a100af1f5f883f02007ee" - integrity sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A== - -uuid@^8.0.0, uuid@^8.3.0, uuid@^8.3.2: - version "8.3.2" - resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.3.2.tgz#80d5b5ced271bb9af6c445f21a1a04c606cefbe2" - integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg== - -v8-compile-cache@2.3.0: - 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== - -v8-to-istanbul@^7.0.0: - version "7.1.2" - resolved "https://registry.yarnpkg.com/v8-to-istanbul/-/v8-to-istanbul-7.1.2.tgz#30898d1a7fa0c84d225a2c1434fb958f290883c1" - integrity sha512-TxNb7YEUwkLXCQYeudi6lgQ/SZrzNO4kMdlqVxaZPUIUjCv6iSSypUQX70kNBSERpQ8fk48+d61FXk+tgqcWow== - dependencies: - "@types/istanbul-lib-coverage" "^2.0.1" - convert-source-map "^1.6.0" - source-map "^0.7.3" - -validate-npm-package-license@^3.0.1, validate-npm-package-license@^3.0.4: - version "3.0.4" - resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz#fc91f6b9c7ba15c857f4cb2c5defeec39d4f410a" - integrity sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew== - dependencies: - spdx-correct "^3.0.0" - spdx-expression-parse "^3.0.0" - -validate-npm-package-name@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/validate-npm-package-name/-/validate-npm-package-name-3.0.0.tgz#5fa912d81eb7d0c74afc140de7317f0ca7df437e" - integrity sha1-X6kS2B630MdK/BQN5zF/DKffQ34= - dependencies: - builtins "^1.0.3" - -validate-npm-package-name@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/validate-npm-package-name/-/validate-npm-package-name-4.0.0.tgz#fe8f1c50ac20afdb86f177da85b3600f0ac0d747" - integrity sha512-mzR0L8ZDktZjpX4OB46KT+56MAhl4EIazWP/+G/HPGuvfdaqg4YsCdtOm6U9+LOFyYDoh4dpnpxZRB9MQQns5Q== - dependencies: - builtins "^5.0.0" - -validate.io-array@^1.0.3: - version "1.0.6" - resolved "https://registry.yarnpkg.com/validate.io-array/-/validate.io-array-1.0.6.tgz#5b5a2cafd8f8b85abb2f886ba153f2d93a27774d" - integrity sha512-DeOy7CnPEziggrOO5CZhVKJw6S3Yi7e9e65R1Nl/RTN1vTQKnzjfvks0/8kQ40FP/dsjRAOd4hxmJ7uLa6vxkg== - -validate.io-function@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/validate.io-function/-/validate.io-function-1.0.2.tgz#343a19802ed3b1968269c780e558e93411c0bad7" - integrity sha512-LlFybRJEriSuBnUhQyG5bwglhh50EpTL2ul23MPIuR1odjO7XaMLFV8vHGwp7AZciFxtYOeiSCT5st+XSPONiQ== - -validate.io-integer-array@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/validate.io-integer-array/-/validate.io-integer-array-1.0.0.tgz#2cabde033293a6bcbe063feafe91eaf46b13a089" - integrity sha512-mTrMk/1ytQHtCY0oNO3dztafHYyGU88KL+jRxWuzfOmQb+4qqnWmI+gykvGp8usKZOM0H7keJHEbRaFiYA0VrA== - dependencies: - validate.io-array "^1.0.3" - validate.io-integer "^1.0.4" - -validate.io-integer@^1.0.4: - version "1.0.5" - resolved "https://registry.yarnpkg.com/validate.io-integer/-/validate.io-integer-1.0.5.tgz#168496480b95be2247ec443f2233de4f89878068" - integrity sha512-22izsYSLojN/P6bppBqhgUDjCkr5RY2jd+N2a3DCAUey8ydvrZ/OkGvFPR7qfOpwR2LC5p4Ngzxz36g5Vgr/hQ== - dependencies: - validate.io-number "^1.0.3" - -validate.io-number@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/validate.io-number/-/validate.io-number-1.0.3.tgz#f63ffeda248bf28a67a8d48e0e3b461a1665baf8" - integrity sha512-kRAyotcbNaSYoDnXvb4MHg/0a1egJdLwS6oJ38TJY7aw9n93Fl/3blIXdyYvPOp55CNxywooG/3BcrwNrBpcSg== - -vfile-location@^2.0.0, vfile-location@^2.0.1: - version "2.0.6" - resolved "https://registry.yarnpkg.com/vfile-location/-/vfile-location-2.0.6.tgz#8a274f39411b8719ea5728802e10d9e0dff1519e" - integrity sha512-sSFdyCP3G6Ka0CEmN83A2YCMKIieHx0EDaj5IDP4g1pa5ZJ4FJDvpO0WODLxo4LUX4oe52gmSCK7Jw4SBghqxA== - -vfile-message@*, vfile-message@^1.0.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/vfile-message/-/vfile-message-1.1.1.tgz#5833ae078a1dfa2d96e9647886cd32993ab313e1" - integrity sha512-1WmsopSGhWt5laNir+633LszXvZ+Z/lxveBf6yhGsqnQIhlhzooZae7zV6YVM1Sdkw68dtAW3ow0pOdPANugvA== - dependencies: - unist-util-stringify-position "^1.1.1" - -vfile@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/vfile/-/vfile-3.0.1.tgz#47331d2abe3282424f4a4bb6acd20a44c4121803" - integrity sha512-y7Y3gH9BsUSdD4KzHsuMaCzRjglXN0W2EcMf0gpvu6+SbsGhMje7xDc8AEoeXy6mIwCKMI6BkjMsRjzQbhMEjQ== - dependencies: - is-buffer "^2.0.0" - replace-ext "1.0.0" - unist-util-stringify-position "^1.0.0" - vfile-message "^1.0.0" - -vscode-css-languageserver-bin@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/vscode-css-languageserver-bin/-/vscode-css-languageserver-bin-1.4.0.tgz#d9ebf3c4c9df0dcab96abc4abc6f79daf6408508" - integrity sha512-KWrF5f4RYYe8RBDfqb1c0Sdf9xPS2Ly/Z/T18H+uUOMw2QyzIrkxv4bMKy5GFfPm4479k6Ln4ji4UHqSmhGf3g== - dependencies: - vscode-css-languageservice "^3.0.9-next.18" - vscode-languageserver "^4.1.3" - vscode-languageserver-protocol-foldingprovider "^2.0.1" - -vscode-css-languageservice@^3.0.9-next.18: - version "3.0.13" - resolved "https://registry.yarnpkg.com/vscode-css-languageservice/-/vscode-css-languageservice-3.0.13.tgz#1788735b65fde54181ea458e6a52cc2bd6dd9126" - integrity sha512-RWkO/c/A7iXhHEy3OuEqkCqavDjpD4NF2Ca8vjai+ZtEYNeHrm1ybTnBYLP4Ft1uXvvaaVtYA9HrDjD6+CUONg== - dependencies: - vscode-languageserver-types "^3.13.0" - vscode-nls "^4.0.0" - -vscode-html-languageserver-bin@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/vscode-html-languageserver-bin/-/vscode-html-languageserver-bin-1.4.0.tgz#7deafc244e966ee3aeb61fc098be7885b4226644" - integrity sha512-rDnpvASQwf1dlRaGiu8edo5WlAr4dM3/r/dcPCH4O6UD4+eShhdC1E8IyiSisnJU6bRk+4mDTCgA6cyhGJY2xA== - dependencies: - typescript "^2.9.1" - vscode-css-languageservice "^3.0.9-next.18" - vscode-html-languageservice "^2.1.3-next.5" - vscode-languageserver "^4.1.3" - vscode-languageserver-protocol-foldingprovider "^2.0.1" - vscode-languageserver-types "^3.7.2" - vscode-nls "^3.2.2" - vscode-uri "^1.0.3" - -vscode-html-languageservice@^2.1.3-next.5: - version "2.1.12" - resolved "https://registry.yarnpkg.com/vscode-html-languageservice/-/vscode-html-languageservice-2.1.12.tgz#b4f9e23cac6fea74d4c9825fb4a4ef9bf313785e" - integrity sha512-mIb5VMXM5jI97HzCk2eadI1K//rCEZXte0wBqA7PGXsyJH4KTyJUaYk9MR+mbfpUl2vMi3HZw9GUOLGYLc6l5w== - dependencies: - vscode-languageserver-types "^3.13.0" - vscode-nls "^4.0.0" - vscode-uri "^1.0.6" - -vscode-json-languageserver-bin@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/vscode-json-languageserver-bin/-/vscode-json-languageserver-bin-1.0.1.tgz#ffe59ea265c63f3d20d3b44f4c19a86dfc99de64" - integrity sha512-WU+Ks0OEo1c4pgFUA4gIockhzlRqWqSRL2NXHOCtYhJnuIqfrNgSyECZC+nCMyn/CnzpPuQQjzC74GWlIRXnZQ== - dependencies: - jsonc-parser "^1.0.0" - request-light "^0.2.1" - vscode-json-languageservice "^3.0.1" - vscode-languageserver "^3.5.0" - vscode-nls "^2.0.2" - vscode-uri "^1.0.1" - -vscode-json-languageservice@4.1.8, vscode-json-languageservice@^4.1.8: - version "4.1.8" - resolved "https://registry.yarnpkg.com/vscode-json-languageservice/-/vscode-json-languageservice-4.1.8.tgz#397a39238d496e3e08a544a8b93df2cd13347d0c" - integrity sha512-0vSpg6Xd9hfV+eZAaYN63xVVMOTmJ4GgHxXnkLCh+9RsQBkWKIghzLhW2B9ebfG+LQQg8uLtsQ2aUKjTgE+QOg== - dependencies: - jsonc-parser "^3.0.0" - vscode-languageserver-textdocument "^1.0.1" - vscode-languageserver-types "^3.16.0" - vscode-nls "^5.0.0" - vscode-uri "^3.0.2" - -vscode-json-languageservice@^3.0.1: - version "3.10.0" - resolved "https://registry.yarnpkg.com/vscode-json-languageservice/-/vscode-json-languageservice-3.10.0.tgz#19eed884fd0f234f8ed2fa0a96e772f293ccc5c4" - integrity sha512-8IvuRSQnjznu+obqy6Dy4S4H68Ke7a3Kb+A0FcdctyAMAWEnrORpCpMOMqEYiPLm/OTYLVWJ7ql3qToDTozu4w== - dependencies: - jsonc-parser "^2.3.1" - vscode-languageserver-textdocument "^1.0.1" - vscode-languageserver-types "3.16.0-next.2" - vscode-nls "^5.0.0" - vscode-uri "^2.1.2" - -vscode-jsonrpc@3.5.0: - version "3.5.0" - resolved "https://registry.yarnpkg.com/vscode-jsonrpc/-/vscode-jsonrpc-3.5.0.tgz#87239d9e166b2d7352245b8a813597804c1d63aa" - integrity sha1-hyOdnhZrLXNSJFuKgTWXgEwdY6o= - -vscode-jsonrpc@6.0.0, 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-jsonrpc@8.0.0-next.6: - version "8.0.0-next.6" - resolved "https://registry.yarnpkg.com/vscode-jsonrpc/-/vscode-jsonrpc-8.0.0-next.6.tgz#981f7c065ecc7e7e8595f9da6d073ac592b34114" - integrity sha512-6Ld3RYjygn5Ih7CkAtcAwiDQC+rakj2O+PnASfNyYv3sLmm44eJpEKzuPUN30Iy2UB09AZg8T6LBKWTJTEJDVw== - -vscode-jsonrpc@8.0.2, vscode-jsonrpc@^8.0.2: - version "8.0.2" - resolved "https://registry.npmjs.org/vscode-jsonrpc/-/vscode-jsonrpc-8.0.2.tgz#f239ed2cd6004021b6550af9fd9d3e47eee3cac9" - integrity sha512-RY7HwI/ydoC1Wwg4gJ3y6LpU9FJRZAUnTYMXthqhFXXu77ErDd/xkREpGuk4MyYkk4a+XDWAMqe0S3KkelYQEQ== - -vscode-jsonrpc@8.1.0: - version "8.1.0" - resolved "https://registry.yarnpkg.com/vscode-jsonrpc/-/vscode-jsonrpc-8.1.0.tgz#cb9989c65e219e18533cc38e767611272d274c94" - integrity sha512-6TDy/abTQk+zDGYazgbIPc+4JoXdwC8NHU9Pbn4UJP1fehUyZmM4RHp5IthX7A6L5KS30PRui+j+tbbMMMafdw== - -vscode-jsonrpc@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/vscode-jsonrpc/-/vscode-jsonrpc-4.0.0.tgz#a7bf74ef3254d0a0c272fab15c82128e378b3be9" - integrity sha512-perEnXQdQOJMTDFNv+UF3h1Y0z4iSiaN9jIlb0OqIYgosPCZGYh/MCUlkFtV2668PL69lRDO32hmvL2yiidUYg== - -vscode-jsonrpc@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/vscode-jsonrpc/-/vscode-jsonrpc-5.0.1.tgz#9bab9c330d89f43fc8c1e8702b5c36e058a01794" - integrity sha512-JvONPptw3GAQGXlVV2utDcHx0BiY34FupW/kI6mZ5x06ER5DdPG/tXWMVHjTNULF5uKPOUUD0SaXg5QaubJL0A== - -vscode-languageclient@^6.1.3: - version "6.1.4" - resolved "https://registry.yarnpkg.com/vscode-languageclient/-/vscode-languageclient-6.1.4.tgz#54aa8b1559ae2e0499cb6ab746cc2662fb6ecc0f" - integrity sha512-EUOU+bJu6axmt0RFNo3nrglQLPXMfanbYViJee3Fbn2VuQoX0ZOI4uTYhSRvYLP2vfwTP/juV62P/mksCdTZMA== - dependencies: - semver "^6.3.0" - vscode-languageserver-protocol "3.15.3" - -vscode-languageserver-protocol-foldingprovider@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/vscode-languageserver-protocol-foldingprovider/-/vscode-languageserver-protocol-foldingprovider-2.0.1.tgz#051d0d9e58d1b79dc4681acd48f21797f5515bfd" - integrity sha512-N8bOS8i0xuQMn/y0bijyefDbOsMl6hiH6LDREYWavTLTM5jbj44EiQfStsbmAv/0eaFKkL/jf5hW7nWwBy2HBw== - dependencies: - vscode-languageserver-protocol "^3.7.2" - vscode-languageserver-types "^3.7.2" - -vscode-languageserver-protocol@3.14.1: - version "3.14.1" - resolved "https://registry.yarnpkg.com/vscode-languageserver-protocol/-/vscode-languageserver-protocol-3.14.1.tgz#b8aab6afae2849c84a8983d39a1cf742417afe2f" - integrity sha512-IL66BLb2g20uIKog5Y2dQ0IiigW0XKrvmWiOvc0yXw80z3tMEzEnHjaGAb3ENuU7MnQqgnYJ1Cl2l9RvNgDi4g== - dependencies: - vscode-jsonrpc "^4.0.0" - vscode-languageserver-types "3.14.0" - -vscode-languageserver-protocol@3.15.3: - version "3.15.3" - resolved "https://registry.yarnpkg.com/vscode-languageserver-protocol/-/vscode-languageserver-protocol-3.15.3.tgz#3fa9a0702d742cf7883cb6182a6212fcd0a1d8bb" - integrity sha512-zrMuwHOAQRhjDSnflWdJG+O2ztMWss8GqUUB8dXLR/FPenwkiBNkMIJJYfSN6sgskvsF0rHAoBowNQfbyZnnvw== - dependencies: - vscode-jsonrpc "^5.0.1" - vscode-languageserver-types "3.15.1" - -vscode-languageserver-protocol@3.16.0, vscode-languageserver-protocol@^3.10.3, vscode-languageserver-protocol@^3.16.0, vscode-languageserver-protocol@^3.7.2: - 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-protocol@3.17.0-next.14: - version "3.17.0-next.14" - resolved "https://registry.yarnpkg.com/vscode-languageserver-protocol/-/vscode-languageserver-protocol-3.17.0-next.14.tgz#d3500bef2ad2889385cda4802acfe6549842164d" - integrity sha512-iangobY8dL6sFZkOx4OhRPJM9gN0I1caUsOVR+MnPozsqQUtwMXmbIcfaIf0Akp0pd3KhJDPf/tdwRX68QGeeA== - dependencies: - vscode-jsonrpc "8.0.0-next.6" - vscode-languageserver-types "3.17.0-next.7" - -vscode-languageserver-protocol@3.17.2: - version "3.17.2" - resolved "https://registry.yarnpkg.com/vscode-languageserver-protocol/-/vscode-languageserver-protocol-3.17.2.tgz#beaa46aea06ed061576586c5e11368a9afc1d378" - integrity sha512-8kYisQ3z/SQ2kyjlNeQxbkkTNmVFoQCqkmGrzLH6A9ecPlgTbp3wDTnUNqaUxYr4vlAcloxx8zwy7G5WdguYNg== - dependencies: - vscode-jsonrpc "8.0.2" - vscode-languageserver-types "3.17.2" - -vscode-languageserver-protocol@3.5.1: - version "3.5.1" - resolved "https://registry.yarnpkg.com/vscode-languageserver-protocol/-/vscode-languageserver-protocol-3.5.1.tgz#5144a3a9eeccbd83fe2745bd4ed75fad6cc45f0d" - integrity sha512-1fPDIwsAv1difCV+8daOrJEGunClNJWqnUHq/ncWrjhitKWXgGmRCjlwZ3gDUTt54yRcvXz1PXJDaRNvNH6pYA== - dependencies: - vscode-jsonrpc "3.5.0" - vscode-languageserver-types "3.5.0" - -vscode-languageserver-protocol@^3.15.3: - version "3.17.3" - resolved "https://registry.yarnpkg.com/vscode-languageserver-protocol/-/vscode-languageserver-protocol-3.17.3.tgz#6d0d54da093f0c0ee3060b81612cce0f11060d57" - integrity sha512-924/h0AqsMtA5yK22GgMtCYiMdCOtWTSGgUOkgEDX+wk2b0x4sAfLiO4NxBxqbiVtz7K7/1/RgVrVI0NClZwqA== - dependencies: - vscode-jsonrpc "8.1.0" - vscode-languageserver-types "3.17.3" - -vscode-languageserver-textdocument@1.0.8, vscode-languageserver-textdocument@^1.0.1: - version "1.0.8" - resolved "https://registry.yarnpkg.com/vscode-languageserver-textdocument/-/vscode-languageserver-textdocument-1.0.8.tgz#9eae94509cbd945ea44bca8dcfe4bb0c15bb3ac0" - integrity sha512-1bonkGqQs5/fxGT5UchTgjGVnfysL0O8v1AYMBjqTbWQTFn721zaPGDYFkOKtfDgFiSgXM3KwaG3FMGfW4Ed9Q== - -vscode-languageserver-types@3.14.0: - version "3.14.0" - resolved "https://registry.yarnpkg.com/vscode-languageserver-types/-/vscode-languageserver-types-3.14.0.tgz#d3b5952246d30e5241592b6dde8280e03942e743" - integrity sha512-lTmS6AlAlMHOvPQemVwo3CezxBp0sNB95KNPkqp3Nxd5VFEnuG1ByM0zlRWos0zjO3ZWtkvhal0COgiV1xIA4A== - -vscode-languageserver-types@3.15.1: - version "3.15.1" - resolved "https://registry.yarnpkg.com/vscode-languageserver-types/-/vscode-languageserver-types-3.15.1.tgz#17be71d78d2f6236d414f0001ce1ef4d23e6b6de" - integrity sha512-+a9MPUQrNGRrGU630OGbYVQ+11iOIovjCkqxajPa9w57Sd5ruK8WQNsslzpa0x/QJqC8kRc2DUxWjIFwoNm4ZQ== - -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-types@3.16.0-next.2: - version "3.16.0-next.2" - resolved "https://registry.yarnpkg.com/vscode-languageserver-types/-/vscode-languageserver-types-3.16.0-next.2.tgz#940bd15c992295a65eae8ab6b8568a1e8daa3083" - integrity sha512-QjXB7CKIfFzKbiCJC4OWC8xUncLsxo19FzGVp/ADFvvi87PlmBSCAtZI5xwGjF5qE0xkLf0jjKUn3DzmpDP52Q== - -vscode-languageserver-types@3.17.0-next.3: - version "3.17.0-next.3" - resolved "https://registry.yarnpkg.com/vscode-languageserver-types/-/vscode-languageserver-types-3.17.0-next.3.tgz#e1f4311e08ea3193e81126154b6a342fc1c3dba3" - integrity sha512-VQcXnhKYxUW6OiRMhG++SzmZYMJwusXknJGd+FfdOnS1yHAo734OHyR0e2eEHDlv0/oWc8RZPgx/VKSKyondVg== - -vscode-languageserver-types@3.17.0-next.7: - version "3.17.0-next.7" - resolved "https://registry.yarnpkg.com/vscode-languageserver-types/-/vscode-languageserver-types-3.17.0-next.7.tgz#3e41ebb290c95bb38595f568a9963212626290cc" - integrity sha512-KH4zdG1qBXxoso61ChgpeoZYyHGJo8bV7Jv4I+fwQ1Ryy59JAxoZ9GAbhR5TeeafHctLcg6RFvY3m8Jqfu17cg== - -vscode-languageserver-types@3.17.2: - version "3.17.2" - resolved "https://registry.yarnpkg.com/vscode-languageserver-types/-/vscode-languageserver-types-3.17.2.tgz#b2c2e7de405ad3d73a883e91989b850170ffc4f2" - integrity sha512-zHhCWatviizPIq9B7Vh9uvrH6x3sK8itC84HkamnBWoDFJtzBf7SWlpLCZUit72b3os45h6RWQNC9xHRDF8dRA== - -vscode-languageserver-types@3.17.3: - version "3.17.3" - resolved "https://registry.yarnpkg.com/vscode-languageserver-types/-/vscode-languageserver-types-3.17.3.tgz#72d05e47b73be93acb84d6e311b5786390f13f64" - integrity sha512-SYU4z1dL0PyIMd4Vj8YOqFvHu7Hz/enbWtpfnVbJHU4Nd1YNYx8u0ennumc6h48GQNeOLxmwySmnADouT/AuZA== - -vscode-languageserver-types@3.5.0: - version "3.5.0" - resolved "https://registry.yarnpkg.com/vscode-languageserver-types/-/vscode-languageserver-types-3.5.0.tgz#e48d79962f0b8e02de955e3f524908e2b19c0374" - integrity sha1-5I15li8LjgLelV4/UkkI4rGcA3Q= - -vscode-languageserver-types@^3.13.0, vscode-languageserver-types@^3.16.0, vscode-languageserver-types@^3.17.0-next.3, vscode-languageserver-types@^3.7.2: - version "3.17.1" - resolved "https://registry.yarnpkg.com/vscode-languageserver-types/-/vscode-languageserver-types-3.17.1.tgz#c2d87fa7784f8cac389deb3ff1e2d9a7bef07e16" - integrity sha512-K3HqVRPElLZVVPtMeKlsyL9aK0GxGQpvtAUTfX4k7+iJ4mc1M+JM+zQwkgGy2LzY0f0IAafe8MKqIkJrxfGGjQ== - -vscode-languageserver@8.0.0-next.8, vscode-languageserver@^8.0.0-next.2: - version "8.0.0-next.8" - resolved "https://registry.yarnpkg.com/vscode-languageserver/-/vscode-languageserver-8.0.0-next.8.tgz#86ef42fb296ab338b800e83e478d0f687805c170" - integrity sha512-Gq0uqKbOgw7YNwPxMoNCeh7mHKMhG5j6EuoSh+w5pnKd7Eu9a74cagqf9aZDVFWW6GRpqR/Z+1o6EXqDK+g2Tg== - dependencies: - vscode-languageserver-protocol "3.17.0-next.14" - -vscode-languageserver@8.0.2: - version "8.0.2" - resolved "https://registry.yarnpkg.com/vscode-languageserver/-/vscode-languageserver-8.0.2.tgz#cfe2f0996d9dfd40d3854e786b2821604dfec06d" - integrity sha512-bpEt2ggPxKzsAOZlXmCJ50bV7VrxwCS5BI4+egUmure/oI/t4OlFzi/YNtVvY24A2UDOZAgwFGgnZPwqSJubkA== - dependencies: - vscode-languageserver-protocol "3.17.2" - -vscode-languageserver@^3.5.0: - version "3.5.1" - resolved "https://registry.yarnpkg.com/vscode-languageserver/-/vscode-languageserver-3.5.1.tgz#e0044b7df4d2447ce12632dfc98f1ab0afacbdff" - integrity sha512-RYUKn0DgHTFcS8kS4VaNCjNMaQXYqiXdN9bKrFjXzu5RPKfjIYcoh47oVWwZj4L3R/DPB0Se7HPaDatvYY2XgQ== - dependencies: - vscode-languageserver-protocol "3.5.1" - vscode-uri "^1.0.1" - -vscode-languageserver@^4.1.3: - version "4.4.2" - resolved "https://registry.yarnpkg.com/vscode-languageserver/-/vscode-languageserver-4.4.2.tgz#600ae9cc7a6ff1e84d93c7807840c2cb5b22821b" - integrity sha512-61y8Raevi9EigDgg9NelvT9cUAohiEbUl1LOwQQgOCAaNX62yKny/ddi0uC+FUTm4CzsjhBu+06R+vYgfCYReA== - dependencies: - vscode-languageserver-protocol "^3.10.3" - vscode-uri "^1.0.5" - -vscode-languageserver@^5.2.1: - version "5.2.1" - resolved "https://registry.yarnpkg.com/vscode-languageserver/-/vscode-languageserver-5.2.1.tgz#0d2feddd33f92aadf5da32450df498d52f6f14eb" - integrity sha512-GuayqdKZqAwwaCUjDvMTAVRPJOp/SLON3mJ07eGsx/Iq9HjRymhKWztX41rISqDKhHVVyFM+IywICyZDla6U3A== - dependencies: - vscode-languageserver-protocol "3.14.1" - vscode-uri "^1.0.6" - -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" - -vscode-nls@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/vscode-nls/-/vscode-nls-2.0.2.tgz#808522380844b8ad153499af5c3b03921aea02da" - integrity sha1-gIUiOAhEuK0VNJmvXDsDkhrqAto= - -vscode-nls@^3.2.2: - version "3.2.5" - resolved "https://registry.yarnpkg.com/vscode-nls/-/vscode-nls-3.2.5.tgz#25520c1955108036dec607c85e00a522f247f1a4" - integrity sha512-ITtoh3V4AkWXMmp3TB97vsMaHRgHhsSFPsUdzlueSL+dRZbSNTZeOmdQv60kjCV306ghPxhDeoNUEm3+EZMuyw== - -vscode-nls@^4.0.0, vscode-nls@^4.1.1: - version "4.1.2" - resolved "https://registry.yarnpkg.com/vscode-nls/-/vscode-nls-4.1.2.tgz#ca8bf8bb82a0987b32801f9fddfdd2fb9fd3c167" - integrity sha512-7bOHxPsfyuCqmP+hZXscLhiHwe7CSuFE4hyhbs22xPIhQ4jv99FcR4eBzfYYVLP356HNFpdvz63FFb/xw6T4Iw== - -vscode-nls@^5.0.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/vscode-nls/-/vscode-nls-5.1.0.tgz#443b301a7465d88c81c0f4e1914f9857f0dce1e4" - integrity sha512-37Ha44QrLFwR2IfSSYdOArzUvOyoWbOYTwQC+wS0NfqKjhW7s0WQ1lMy5oJXgSZy9sAiZS5ifELhbpXodeMR8w== - -vscode-oniguruma@^1.6.1: - version "1.7.0" - resolved "https://registry.npmjs.org/vscode-oniguruma/-/vscode-oniguruma-1.7.0.tgz#439bfad8fe71abd7798338d1cd3dc53a8beea94b" - integrity sha512-L9WMGRfrjOhgHSdOYgCt/yRMsXzLDJSL7BPrOZt73gU0iWO4mpqzqQzOz5srxqTvMBaR0XZTSrVWo4j55Rc6cA== - -vscode-textmate@5.2.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/vscode-textmate/-/vscode-textmate-5.2.0.tgz#01f01760a391e8222fe4f33fbccbd1ad71aed74e" - integrity sha512-Uw5ooOQxRASHgu6C7GVvUxisKXfSgW4oFlO+aa+PAkgmH89O3CXxEEzNRNtHSqtXFTl0nAC1uYj0GMSH27uwtQ== - -vscode-uri@^1.0.1, vscode-uri@^1.0.3, vscode-uri@^1.0.5, vscode-uri@^1.0.6: - version "1.0.8" - resolved "https://registry.yarnpkg.com/vscode-uri/-/vscode-uri-1.0.8.tgz#9769aaececae4026fb6e22359cb38946580ded59" - integrity sha512-obtSWTlbJ+a+TFRYGaUumtVwb+InIUVI0Lu0VBUAPmj2cU5JutEXg3xUE0c2J5Tcy7h2DEKVJBFi+Y9ZSFzzPQ== - -vscode-uri@^2.1.2: - version "2.1.2" - resolved "https://registry.yarnpkg.com/vscode-uri/-/vscode-uri-2.1.2.tgz#c8d40de93eb57af31f3c715dd650e2ca2c096f1c" - integrity sha512-8TEXQxlldWAuIODdukIb+TR5s+9Ds40eSJrw+1iDDA9IFORPjMELarNQE3myz5XIkWWpdprmJjm1/SxMlWOC8A== - -vscode-uri@^3.0.2: - version "3.0.3" - resolved "https://registry.yarnpkg.com/vscode-uri/-/vscode-uri-3.0.3.tgz#a95c1ce2e6f41b7549f86279d19f47951e4f4d84" - integrity sha512-EcswR2S8bpR7fD0YPeS7r2xXExrScVMxg4MedACaWHEtx9ftCF/qHG1xGkolzTPcEmjTavCQgbVzHUIdTMzFGA== - -vscode-ws-jsonrpc@~1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/vscode-ws-jsonrpc/-/vscode-ws-jsonrpc-1.0.2.tgz#ead2efd66293f331ccc220222ae1aeca4bb5b2c1" - integrity sha512-09OpRC0RcqZs4DleJRgs+R+7gQkwb4tgvsL43lzVZwW4N5NO3H/9sLNeKPBt83k7WyA8qBZjrzM6X7tKFpFrjQ== - dependencies: - vscode-jsonrpc "^8.0.2" - -w3c-hr-time@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz#0a89cdf5cc15822df9c360543676963e0cc308cd" - integrity sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ== - dependencies: - browser-process-hrtime "^1.0.0" - -w3c-xmlserializer@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/w3c-xmlserializer/-/w3c-xmlserializer-2.0.0.tgz#3e7104a05b75146cc60f564380b7f683acf1020a" - integrity sha512-4tzD0mF8iSiMiNs30BiLO3EpfGLZUT2MSX/G+o7ZywDzliWQ3OPtTZ0PTC3B3ca1UAf4cJMHB+2Bf56EriJuRA== - dependencies: - xml-name-validator "^3.0.0" - -walk-up-path@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/walk-up-path/-/walk-up-path-1.0.0.tgz#d4745e893dd5fd0dbb58dd0a4c6a33d9c9fec53e" - integrity sha512-hwj/qMDUEjCU5h0xr90KGCf0tg0/LgJbmOWgrWKYlcJZM7XvquvUJZ0G/HMGr7F7OQMOUuPHWP9JpriinkAlkg== - -walker@^1.0.7, walker@~1.0.5: - version "1.0.8" - resolved "https://registry.yarnpkg.com/walker/-/walker-1.0.8.tgz#bd498db477afe573dc04185f011d3ab8a8d7653f" - integrity sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ== - dependencies: - makeerror "1.0.12" - -warning@^4.0.2, warning@^4.0.3: - version "4.0.3" - resolved "https://registry.yarnpkg.com/warning/-/warning-4.0.3.tgz#16e9e077eb8a86d6af7d64aa1e05fd85b4678ca3" - integrity sha512-rpJyN222KWIvHJ/F53XSZv0Zl/accqHR8et1kpaMTD/fLCRxtV8iX8czMzY7sVZupTI3zcUTg8eycS2kNF9l6w== - dependencies: - loose-envify "^1.0.0" - -watchpack@^2.4.0: - version "2.4.0" - resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-2.4.0.tgz#fa33032374962c78113f93c7f2fb4c54c9862a5d" - integrity sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg== - dependencies: - glob-to-regexp "^0.4.1" - graceful-fs "^4.1.2" - -wcwidth@^1.0.0, wcwidth@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/wcwidth/-/wcwidth-1.0.1.tgz#f0b0dcf915bc5ff1528afadb2c0e17b532da2fe8" - integrity sha1-8LDc+RW8X/FSivrbLA4XtTLaL+g= - dependencies: - defaults "^1.0.3" - -web-tree-sitter@0.20.8: - version "0.20.8" - resolved "https://registry.yarnpkg.com/web-tree-sitter/-/web-tree-sitter-0.20.8.tgz#1e371cb577584789cadd75cb49c7ddfbc99d04c8" - integrity sha512-weOVgZ3aAARgdnb220GqYuh7+rZU0Ka9k9yfKtGAzEYMa6GgiCzW9JjQRJyCJakvibQW+dfjJdihjInKuuCAUQ== - -webidl-conversions@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz#24534275e2a7bc6be7bc86611cc16ae0a5654871" - integrity sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ== - -webidl-conversions@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-5.0.0.tgz#ae59c8a00b121543a2acc65c0434f57b0fc11aff" - integrity sha512-VlZwKPCkYKxQgeSbH5EyngOmRp7Ww7I9rQLERETtf5ofd9pGeswWiOtogpEO850jziPRarreGxn5QIiTqpb2wA== - -webidl-conversions@^6.1.0: - version "6.1.0" - resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-6.1.0.tgz#9111b4d7ea80acd40f5270d666621afa78b69514" - integrity sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w== - -webpack-cli@^4.1.0: - version "4.10.0" - resolved "https://registry.yarnpkg.com/webpack-cli/-/webpack-cli-4.10.0.tgz#37c1d69c8d85214c5a65e589378f53aec64dab31" - integrity sha512-NLhDfH/h4O6UOy+0LSso42xvYypClINuMNBVVzX4vX98TmTaTUxwRbXdhucbFMd2qLaCTcLq/PdYrvi8onw90w== - dependencies: - "@discoveryjs/json-ext" "^0.5.0" - "@webpack-cli/configtest" "^1.2.0" - "@webpack-cli/info" "^1.5.0" - "@webpack-cli/serve" "^1.7.0" - colorette "^2.0.14" - commander "^7.0.0" - cross-spawn "^7.0.3" - fastest-levenshtein "^1.0.12" - import-local "^3.0.2" - interpret "^2.2.0" - rechoir "^0.7.0" - webpack-merge "^5.7.3" - -webpack-merge@^5.1.2, webpack-merge@^5.7.3: - version "5.8.0" - resolved "https://registry.yarnpkg.com/webpack-merge/-/webpack-merge-5.8.0.tgz#2b39dbf22af87776ad744c390223731d30a68f61" - integrity sha512-/SaI7xY0831XwP6kzuwhKWVKDP9t1QY1h65lAFLbZqMPIuYcD9QAW4u9STIbU9kaJbPBB/geU/gLr1wDjOhQ+Q== - dependencies: - clone-deep "^4.0.1" - wildcard "^2.0.0" - -webpack-sources@^1.1.0, webpack-sources@^1.2.0, webpack-sources@^1.4.3: - version "1.4.3" - resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-1.4.3.tgz#eedd8ec0b928fbf1cbfe994e22d2d890f330a933" - integrity sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ== - dependencies: - source-list-map "^2.0.0" - source-map "~0.6.1" - -webpack-sources@^3.2.3: - version "3.2.3" - resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-3.2.3.tgz#2d4daab8451fd4b240cc27055ff6a0c2ccea0cde" - integrity sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w== - -webpack@^5.41.1, webpack@^5.54.0: - version "5.76.1" - resolved "https://registry.yarnpkg.com/webpack/-/webpack-5.76.1.tgz#7773de017e988bccb0f13c7d75ec245f377d295c" - integrity sha512-4+YIK4Abzv8172/SGqObnUjaIHjLEuUasz9EwQj/9xmPPkYJy2Mh03Q/lJfSD3YLzbxy5FeTq5Uw0323Oh6SJQ== - dependencies: - "@types/eslint-scope" "^3.7.3" - "@types/estree" "^0.0.51" - "@webassemblyjs/ast" "1.11.1" - "@webassemblyjs/wasm-edit" "1.11.1" - "@webassemblyjs/wasm-parser" "1.11.1" - acorn "^8.7.1" - acorn-import-assertions "^1.7.6" - browserslist "^4.14.5" - chrome-trace-event "^1.0.2" - enhanced-resolve "^5.10.0" - es-module-lexer "^0.9.0" - eslint-scope "5.1.1" - events "^3.2.0" - glob-to-regexp "^0.4.1" - graceful-fs "^4.2.9" - json-parse-even-better-errors "^2.3.1" - loader-runner "^4.2.0" - mime-types "^2.1.27" - neo-async "^2.6.2" - schema-utils "^3.1.0" - tapable "^2.1.1" - terser-webpack-plugin "^5.1.3" - watchpack "^2.4.0" - webpack-sources "^3.2.3" - -whatwg-encoding@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz#5abacf777c32166a51d085d6b4f3e7d27113ddb0" - integrity sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw== - dependencies: - iconv-lite "0.4.24" - -whatwg-mimetype@^2.3.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz#3d4b1e0312d2079879f826aff18dbeeca5960fbf" - integrity sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g== - -whatwg-url@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-5.0.0.tgz#966454e8765462e37644d3626f6742ce8b70965d" - integrity sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw== - dependencies: - tr46 "~0.0.3" - webidl-conversions "^3.0.0" - -whatwg-url@^8.0.0, whatwg-url@^8.5.0: - version "8.7.0" - resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-8.7.0.tgz#656a78e510ff8f3937bc0bcbe9f5c0ac35941b77" - integrity sha512-gAojqb/m9Q8a5IV96E3fHJM70AzCkgt4uXYX2O7EmuyOnLrViCQlsEBmF9UQIu3/aeAIp2U17rtbpZWNntQqdg== - dependencies: - lodash "^4.7.0" - tr46 "^2.1.0" - webidl-conversions "^6.1.0" - -which-boxed-primitive@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz#13757bc89b209b049fe5d86430e21cf40a89a8e6" - integrity sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg== - dependencies: - is-bigint "^1.0.1" - is-boolean-object "^1.1.0" - is-number-object "^1.0.4" - is-string "^1.0.5" - is-symbol "^1.0.3" - -which-module@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a" - integrity sha512-B+enWhmw6cjfVC7kS8Pj9pCrKSc5txArRyaYGe088shv/FGWH+0Rjx/xPgtsWfsUtS27FkP697E4DDhgrgoc0Q== - -which@1.3.1, which@^1.2.9: - version "1.3.1" - resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" - integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ== - dependencies: - isexe "^2.0.0" - -which@^2.0.1, which@^2.0.2: - 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" - -wide-align@^1.1.2, wide-align@^1.1.5: - version "1.1.5" - resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.5.tgz#df1d4c206854369ecf3c9a4898f1b23fbd9d15d3" - integrity sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg== - dependencies: - string-width "^1.0.2 || 2 || 3 || 4" - -wildcard@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/wildcard/-/wildcard-2.0.0.tgz#a77d20e5200c6faaac979e4b3aadc7b3dd7f8fec" - integrity sha512-JcKqAHLPxcdb9KM49dufGXn2x3ssnfjbcaQdLlfZsL9rH9wgDQjUtDxbo8NE0F6SFvydeu1VhZe7hZuHsB2/pw== - -word-wrap@^1.2.3, 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== - -wordwrap@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-1.0.0.tgz#27584810891456a4171c8d0226441ade90cbcaeb" - integrity sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q== - -worker-loader@^3.0.2: - version "3.0.8" - resolved "https://registry.yarnpkg.com/worker-loader/-/worker-loader-3.0.8.tgz#5fc5cda4a3d3163d9c274a4e3a811ce8b60dbb37" - integrity sha512-XQyQkIFeRVC7f7uRhFdNMe/iJOdO6zxAaR3EWbDp45v3mDhrTi+++oswKNxShUNjPC/1xUp5DB29YKLhFo129g== - dependencies: - loader-utils "^2.0.0" - schema-utils "^3.0.0" - -wrap-ansi@^5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-5.1.0.tgz#1fd1f67235d5b6d0fee781056001bfb694c03b09" - integrity sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q== - dependencies: - ansi-styles "^3.2.0" - string-width "^3.0.0" - strip-ansi "^5.0.0" - -wrap-ansi@^6.2.0: - version "6.2.0" - resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-6.2.0.tgz#e9393ba07102e6c91a3b221478f0257cd2856e53" - integrity sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA== - dependencies: - ansi-styles "^4.0.0" - string-width "^4.1.0" - strip-ansi "^6.0.0" - -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" - -wrapped@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/wrapped/-/wrapped-1.0.1.tgz#c783d9d807b273e9b01e851680a938c87c907242" - integrity sha1-x4PZ2Aeyc+mwHoUWgKk4yHyQckI= - dependencies: - co "3.1.0" - sliced "^1.0.1" - -wrappy@1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" - integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== - -write-file-atomic@^2.4.2: - version "2.4.3" - resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-2.4.3.tgz#1fd2e9ae1df3e75b8d8c367443c692d4ca81f481" - integrity sha512-GaETH5wwsX+GcnzhPgKcKjJ6M2Cq3/iZp1WyY/X1CSqrW+jVNM9Y7D8EC2sM4ZG/V8wZlSniJnCKWPmBYAucRQ== - dependencies: - graceful-fs "^4.1.11" - imurmurhash "^0.1.4" - signal-exit "^3.0.2" - -write-file-atomic@^3.0.0: - version "3.0.3" - resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-3.0.3.tgz#56bd5c5a5c70481cd19c571bd39ab965a5de56e8" - integrity sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q== - dependencies: - imurmurhash "^0.1.4" - is-typedarray "^1.0.0" - signal-exit "^3.0.2" - typedarray-to-buffer "^3.1.5" - -write-file-atomic@^4.0.0, write-file-atomic@^4.0.1: - version "4.0.2" - resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-4.0.2.tgz#a9df01ae5b77858a027fd2e80768ee433555fcfd" - integrity sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg== - dependencies: - imurmurhash "^0.1.4" - signal-exit "^3.0.7" - -write-json-file@^3.2.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/write-json-file/-/write-json-file-3.2.0.tgz#65bbdc9ecd8a1458e15952770ccbadfcff5fe62a" - integrity sha512-3xZqT7Byc2uORAatYiP3DHUUAVEkNOswEWNs9H5KXiicRTvzYzYqKjYc4G7p+8pltvAw641lVByKVtMpf+4sYQ== - dependencies: - detect-indent "^5.0.0" - graceful-fs "^4.1.15" - make-dir "^2.1.0" - pify "^4.0.1" - sort-keys "^2.0.0" - write-file-atomic "^2.4.2" - -write-json-file@^4.3.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/write-json-file/-/write-json-file-4.3.0.tgz#908493d6fd23225344af324016e4ca8f702dd12d" - integrity sha512-PxiShnxf0IlnQuMYOPPhPkhExoCQuTUNPOa/2JWCYTmBquU9njyyDuwRKN26IZBlp4yn1nt+Agh2HOOBl+55HQ== - dependencies: - detect-indent "^6.0.0" - graceful-fs "^4.1.15" - is-plain-obj "^2.0.0" - make-dir "^3.0.0" - sort-keys "^4.0.0" - write-file-atomic "^3.0.0" - -write-pkg@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/write-pkg/-/write-pkg-4.0.0.tgz#675cc04ef6c11faacbbc7771b24c0abbf2a20039" - integrity sha512-v2UQ+50TNf2rNHJ8NyWttfm/EJUBWMJcx6ZTYZr6Qp52uuegWw/lBkCtCbnYZEmPRNL61m+u67dAmGxo+HTULA== - dependencies: - sort-keys "^2.0.0" - type-fest "^0.4.1" - write-json-file "^3.2.0" - -ws@^6.2.1: - version "6.2.2" - resolved "https://registry.yarnpkg.com/ws/-/ws-6.2.2.tgz#dd5cdbd57a9979916097652d78f1cc5faea0c32e" - integrity sha512-zmhltoSR8u1cnDsD43TX59mzoMZsLKqUweyYBAIvTngR3shc0W6aOZylZmq/7hqyVxPdi+5Ud2QInblgyE72fw== - dependencies: - async-limiter "~1.0.0" - -ws@^7.4.6: - version "7.5.9" - resolved "https://registry.yarnpkg.com/ws/-/ws-7.5.9.tgz#54fa7db29f4c7cec68b1ddd3a89de099942bb591" - integrity sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q== - -x-is-string@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/x-is-string/-/x-is-string-0.1.0.tgz#474b50865af3a49a9c4657f05acd145458f77d82" - integrity sha1-R0tQhlrzpJqcRlfwWs0UVFj3fYI= - -xml-name-validator@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/xml-name-validator/-/xml-name-validator-3.0.0.tgz#6ae73e06de4d8c6e47f9fb181f78d648ad457c6a" - integrity sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw== - -xml@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/xml/-/xml-1.0.1.tgz#78ba72020029c5bc87b8a81a3cfcd74b4a2fc1e5" - integrity sha512-huCv9IH9Tcf95zuYCsQraZtWnJvBtLVE0QHMOs8bWyZAFZNDcYjsPq1nEx8jKA9y+Beo9v+7OBPRisQTjinQMw== - -xmlchars@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/xmlchars/-/xmlchars-2.2.0.tgz#060fe1bcb7f9c76fe2a17db86a9bc3ab894210cb" - integrity sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw== - -xtend@^4.0.0, xtend@^4.0.1, xtend@^4.0.2, xtend@~4.0.0, xtend@~4.0.1: - version "4.0.2" - resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54" - integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ== - -y-codemirror@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/y-codemirror/-/y-codemirror-3.0.1.tgz#d8a4e43cf46b5b557e0f03b7bbb65773ff436278" - integrity sha512-TsLSoouAZxkxOKbmTj7qdwZNS0lZMVqIdp7/j9EgUUqYj0remZYDGl6VBABrmp9UX1QvX6RoXXqzbNhftgfCbA== - dependencies: - lib0 "^0.2.42" - -y-leveldb@^0.1.0: - version "0.1.2" - resolved "https://registry.yarnpkg.com/y-leveldb/-/y-leveldb-0.1.2.tgz#43f6c5004b6891b57926d8a1e0eb0c883003e34b" - integrity sha512-6ulEn5AXfXJYi89rXPEg2mMHAyyw8+ZfeMMdOtBbV8FJpQ1NOrcgi6DTAcXof0dap84NjHPT2+9d0rb6cFsjEg== - dependencies: - level "^6.0.1" - lib0 "^0.2.31" - -y-protocols@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/y-protocols/-/y-protocols-1.0.5.tgz#91d574250060b29fcac8f8eb5e276fbad594245e" - integrity sha512-Wil92b7cGk712lRHDqS4T90IczF6RkcvCwAD0A2OPg+adKmOe+nOiT/N2hvpQIWS3zfjmtL4CPaH5sIW1Hkm/A== - dependencies: - lib0 "^0.2.42" - -y-websocket@^1.3.15: - version "1.5.0" - resolved "https://registry.yarnpkg.com/y-websocket/-/y-websocket-1.5.0.tgz#3c13ed205f1553185e1d144eac94150b5b5d55d6" - integrity sha512-A8AO6XtnQlYwWFytWdkDCeXg4l8ghRTIw5h2YUgUYDmEC9ugWGIwYNW80yadhSFAF7CvuWTEkQNEpevnH6EiZw== - dependencies: - lib0 "^0.2.52" - lodash.debounce "^4.0.8" - y-protocols "^1.0.5" - optionalDependencies: - ws "^6.2.1" - y-leveldb "^0.1.0" - -y18n@^4.0.0: - version "4.0.3" - resolved "https://registry.yarnpkg.com/y18n/-/y18n-4.0.3.tgz#b5f259c82cd6e336921efd7bfd8bf560de9eeedf" - integrity sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ== - -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@^2.1.2: - version "2.1.2" - resolved "https://registry.yarnpkg.com/yallist/-/yallist-2.1.2.tgz#1c11f9218f076089a47dd512f93c6699a6a81d52" - integrity sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI= - -yallist@^3.0.2: - version "3.1.1" - resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd" - integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g== - -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-language-server@^1.0.0: - version "1.9.0" - resolved "https://registry.yarnpkg.com/yaml-language-server/-/yaml-language-server-1.9.0.tgz#b3b3301f01340ff18ec8c222e644f6ed3ed04412" - integrity sha512-hwBqXDDYv1i4IsSjSB8jPR9SKcddqHNeMdqNGm0TdbSuqtRvZ9lQet4HgxeCZd37u91Gak0KtZw51jTDdAqP6A== - dependencies: - ajv "^8.11.0" - request-light "^0.5.7" - vscode-json-languageservice "4.1.8" - vscode-languageserver "^7.0.0" - vscode-languageserver-textdocument "^1.0.1" - vscode-languageserver-types "^3.16.0" - vscode-nls "^5.0.0" - vscode-uri "^3.0.2" - yaml "2.0.0-11" - optionalDependencies: - prettier "2.0.5" - -yaml@2.0.0-11: - version "2.0.0-11" - resolved "https://registry.yarnpkg.com/yaml/-/yaml-2.0.0-11.tgz#269af42637a41ec1ebf2abb546a28949545f0cbb" - integrity sha512-5kGSQrzDyjCk0BLuFfjkoUE9vYcoyrwZIZ+GnpOSM9vhkvPjItYiWJ1jpRSo0aU4QmsoNrFwDT4O7XS2UGcBQg== - -yaml@^1.10.0: - version "1.10.2" - resolved "https://registry.yarnpkg.com/yaml/-/yaml-1.10.2.tgz#2301c5ffbf12b467de8da2333a459e29e7920e4b" - integrity sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg== - -yargs-parser@13.1.2, yargs-parser@^13.1.2: - version "13.1.2" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-13.1.2.tgz#130f09702ebaeef2650d54ce6e3e5706f7a4fb38" - integrity sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg== - dependencies: - camelcase "^5.0.0" - decamelize "^1.2.0" - -yargs-parser@20.2.4, yargs-parser@20.x, yargs-parser@^20.2.2, yargs-parser@^20.2.3: - version "20.2.4" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.4.tgz#b42890f14566796f85ae8e3a25290d205f154a54" - integrity sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA== - -yargs-parser@21.1.1, yargs-parser@^21.1.1: - version "21.1.1" - resolved "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz#9096bceebf990d21bb31fa9516e0ede294a77d35" - integrity sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw== - -yargs-parser@^18.1.2: - version "18.1.3" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-18.1.3.tgz#be68c4975c6b2abf469236b0c870362fab09a7b0" - integrity sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ== - dependencies: - camelcase "^5.0.0" - decamelize "^1.2.0" - -yargs-unparser@1.6.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/yargs-unparser/-/yargs-unparser-1.6.0.tgz#ef25c2c769ff6bd09e4b0f9d7c605fb27846ea9f" - integrity sha512-W9tKgmSn0DpSatfri0nx52Joq5hVXgeLiqR/5G0sZNDoLZFOr/xjBUDcShCOGNsBnEMNo1KAMBkTej1Hm62HTw== - dependencies: - flat "^4.1.0" - lodash "^4.17.15" - yargs "^13.3.0" - -yargs@13.3.2, yargs@^13.3.0: - version "13.3.2" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-13.3.2.tgz#ad7ffefec1aa59565ac915f82dccb38a9c31a2dd" - integrity sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw== - dependencies: - cliui "^5.0.0" - find-up "^3.0.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 "^3.0.0" - which-module "^2.0.0" - y18n "^4.0.0" - yargs-parser "^13.1.2" - -yargs@^15.4.1: - version "15.4.1" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-15.4.1.tgz#0d87a16de01aee9d8bec2bfbf74f67851730f4f8" - integrity sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A== - 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" - -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" - -yargs@^17.3.1, yargs@^17.6.2: - version "17.6.2" - resolved "https://registry.npmjs.org/yargs/-/yargs-17.6.2.tgz#2e23f2944e976339a1ee00f18c77fedee8332541" - integrity sha512-1/9UrdHjDZc0eOU0HxOHoS78C69UD3JRMvzlJ7S79S2nTaWRA/whGCTV8o9e/N/1Va9YIV7Q4sOxD8VV4pCWOw== - dependencies: - cliui "^8.0.1" - escalade "^3.1.1" - get-caller-file "^2.0.5" - require-directory "^2.1.1" - string-width "^4.2.3" - y18n "^5.0.5" - yargs-parser "^21.1.1" - -yarn-deduplicate@^6.0.0: - version "6.0.0" - resolved "https://registry.npmjs.org/yarn-deduplicate/-/yarn-deduplicate-6.0.0.tgz#91bc0b7b374efe24796606df2c6b00eabb5aab62" - integrity sha512-HjGVvuy10hetOuXeexXXT77V+6FfgS+NiW3FsmQD88yfF2kBqTpChvMglyKUlQ0xXEcI77VJazll5qKKBl3ssw== - dependencies: - "@yarnpkg/lockfile" "^1.1.0" - commander "^9.4.0" - semver "^7.3.7" - tslib "^2.4.0" - -yjs@^13.5.17, yjs@^13.5.40: - version "13.5.50" - resolved "https://registry.yarnpkg.com/yjs/-/yjs-13.5.50.tgz#ab0605c677922163c9fe49295d3fd47c04c8e0e9" - integrity sha512-Q2KVNfovwjtJV4Yxz+HaFYT6vTYBaFagOSpTL3jbPc7Sbv/My68fLTfPlYy9FmNO87pV8dMBd5XuVar+9WsAWg== - dependencies: - lib0 "^0.2.49" - -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== - -zod@3.21.4: - version "3.21.4" - resolved "https://registry.yarnpkg.com/zod/-/zod-3.21.4.tgz#10882231d992519f0a10b5dd58a38c9dabbb64db" - integrity sha512-m46AKbrzKVzOzs/DZgVnG5H55N1sv1M8qZU3A8RIKbs3mrACDNeIOeilDymVb2HdmP8uwshOCF4uJ8uM9rCqJw== +# This file is generated by running "yarn install" inside your project. +# Manual changes might be lost - proceed with caution! + +__metadata: + version: 6 + cacheKey: 8 + +"@ampproject/remapping@npm:^2.2.0": + version: 2.2.0 + resolution: "@ampproject/remapping@npm:2.2.0" + dependencies: + "@jridgewell/gen-mapping": ^0.1.0 + "@jridgewell/trace-mapping": ^0.3.9 + checksum: d74d170d06468913921d72430259424b7e4c826b5a7d39ff839a29d547efb97dc577caa8ba3fb5cf023624e9af9d09651afc3d4112a45e2050328abc9b3a2292 + languageName: node + linkType: hard + +"@babel/code-frame@npm:^7.0.0, @babel/code-frame@npm:^7.12.13, @babel/code-frame@npm:^7.22.5": + version: 7.22.5 + resolution: "@babel/code-frame@npm:7.22.5" + dependencies: + "@babel/highlight": ^7.22.5 + checksum: cfe804f518f53faaf9a1d3e0f9f74127ab9a004912c3a16fda07fb6a633393ecb9918a053cb71804204c1b7ec3d49e1699604715e2cfb0c9f7bc4933d324ebb6 + languageName: node + linkType: hard + +"@babel/compat-data@npm:^7.17.7, @babel/compat-data@npm:^7.22.5": + version: 7.22.5 + resolution: "@babel/compat-data@npm:7.22.5" + checksum: eb1a47ebf79ae268b4a16903e977be52629339806e248455eb9973897c503a04b701f36a9de64e19750d6e081d0561e77a514c8dc470babbeba59ae94298ed18 + languageName: node + linkType: hard + +"@babel/core@npm:^7.10.2, @babel/core@npm:^7.11.6, @babel/core@npm:^7.12.3": + version: 7.22.5 + resolution: "@babel/core@npm:7.22.5" + dependencies: + "@ampproject/remapping": ^2.2.0 + "@babel/code-frame": ^7.22.5 + "@babel/generator": ^7.22.5 + "@babel/helper-compilation-targets": ^7.22.5 + "@babel/helper-module-transforms": ^7.22.5 + "@babel/helpers": ^7.22.5 + "@babel/parser": ^7.22.5 + "@babel/template": ^7.22.5 + "@babel/traverse": ^7.22.5 + "@babel/types": ^7.22.5 + convert-source-map: ^1.7.0 + debug: ^4.1.0 + gensync: ^1.0.0-beta.2 + json5: ^2.2.2 + semver: ^6.3.0 + checksum: 173ae426958c90c7bbd7de622c6f13fcab8aef0fac3f138e2d47bc466d1cd1f86f71ca82ae0acb9032fd8794abed8efb56fea55c031396337eaec0d673b69d56 + languageName: node + linkType: hard + +"@babel/generator@npm:^7.22.5, @babel/generator@npm:^7.7.2": + version: 7.22.5 + resolution: "@babel/generator@npm:7.22.5" + dependencies: + "@babel/types": ^7.22.5 + "@jridgewell/gen-mapping": ^0.3.2 + "@jridgewell/trace-mapping": ^0.3.17 + jsesc: ^2.5.1 + checksum: efa64da70ca88fe69f05520cf5feed6eba6d30a85d32237671488cc355fdc379fe2c3246382a861d49574c4c2f82a317584f8811e95eb024e365faff3232b49d + languageName: node + linkType: hard + +"@babel/helper-annotate-as-pure@npm:^7.22.5": + version: 7.22.5 + resolution: "@babel/helper-annotate-as-pure@npm:7.22.5" + dependencies: + "@babel/types": ^7.22.5 + checksum: 53da330f1835c46f26b7bf4da31f7a496dee9fd8696cca12366b94ba19d97421ce519a74a837f687749318f94d1a37f8d1abcbf35e8ed22c32d16373b2f6198d + languageName: node + linkType: hard + +"@babel/helper-builder-binary-assignment-operator-visitor@npm:^7.22.5": + version: 7.22.5 + resolution: "@babel/helper-builder-binary-assignment-operator-visitor@npm:7.22.5" + dependencies: + "@babel/types": ^7.22.5 + checksum: d753acac62399fc6dd354cf1b9441bde0c331c2fe792a4c14904c5e5eafc3cac79478f6aa038e8a51c1148b0af6710a2e619855e4b5d54497ac972eaffed5884 + languageName: node + linkType: hard + +"@babel/helper-compilation-targets@npm:^7.17.7, @babel/helper-compilation-targets@npm:^7.22.5": + version: 7.22.5 + resolution: "@babel/helper-compilation-targets@npm:7.22.5" + dependencies: + "@babel/compat-data": ^7.22.5 + "@babel/helper-validator-option": ^7.22.5 + browserslist: ^4.21.3 + lru-cache: ^5.1.1 + semver: ^6.3.0 + peerDependencies: + "@babel/core": ^7.0.0 + checksum: a479460615acffa0f4fd0a29b740eafb53a93694265207d23a6038ccd18d183a382cacca515e77b7c9b042c3ba80b0aca0da5f1f62215140e81660d2cf721b68 + languageName: node + linkType: hard + +"@babel/helper-create-class-features-plugin@npm:^7.22.5": + version: 7.22.5 + resolution: "@babel/helper-create-class-features-plugin@npm:7.22.5" + dependencies: + "@babel/helper-annotate-as-pure": ^7.22.5 + "@babel/helper-environment-visitor": ^7.22.5 + "@babel/helper-function-name": ^7.22.5 + "@babel/helper-member-expression-to-functions": ^7.22.5 + "@babel/helper-optimise-call-expression": ^7.22.5 + "@babel/helper-replace-supers": ^7.22.5 + "@babel/helper-skip-transparent-expression-wrappers": ^7.22.5 + "@babel/helper-split-export-declaration": ^7.22.5 + semver: ^6.3.0 + peerDependencies: + "@babel/core": ^7.0.0 + checksum: f1e91deae06dbee6dd956c0346bca600adfbc7955427795d9d8825f0439a3c3290c789ba2b4a02a1cdf6c1a1bd163dfa16d3d5e96b02a8efb639d2a774e88ed9 + languageName: node + linkType: hard + +"@babel/helper-create-regexp-features-plugin@npm:^7.17.12, @babel/helper-create-regexp-features-plugin@npm:^7.18.6, @babel/helper-create-regexp-features-plugin@npm:^7.22.5": + version: 7.22.5 + resolution: "@babel/helper-create-regexp-features-plugin@npm:7.22.5" + dependencies: + "@babel/helper-annotate-as-pure": ^7.22.5 + regexpu-core: ^5.3.1 + semver: ^6.3.0 + peerDependencies: + "@babel/core": ^7.0.0 + checksum: 94932145beeb1f91856be25fea8de30b4b81b63fbc7c5a207ed97a5ddc34cd1e9b04041ed28bd24ec09cdcfbb62e8d66f820e4fe864672afe0aa2f357c784e11 + languageName: node + linkType: hard + +"@babel/helper-define-polyfill-provider@npm:^0.4.0": + version: 0.4.0 + resolution: "@babel/helper-define-polyfill-provider@npm:0.4.0" + dependencies: + "@babel/helper-compilation-targets": ^7.17.7 + "@babel/helper-plugin-utils": ^7.16.7 + debug: ^4.1.1 + lodash.debounce: ^4.0.8 + resolve: ^1.14.2 + semver: ^6.1.2 + peerDependencies: + "@babel/core": ^7.4.0-0 + checksum: 5dca4c5e78457c5ced366bea601efa4e8c69bf5d53b0fe540283897575c49b1b88191c8ef062110de9046e886703ed3270fcda3a87f0886cdbb549204d3ff63f + languageName: node + linkType: hard + +"@babel/helper-environment-visitor@npm:^7.22.5": + version: 7.22.5 + resolution: "@babel/helper-environment-visitor@npm:7.22.5" + checksum: 248532077d732a34cd0844eb7b078ff917c3a8ec81a7f133593f71a860a582f05b60f818dc5049c2212e5baa12289c27889a4b81d56ef409b4863db49646c4b1 + languageName: node + linkType: hard + +"@babel/helper-function-name@npm:^7.22.5": + version: 7.22.5 + resolution: "@babel/helper-function-name@npm:7.22.5" + dependencies: + "@babel/template": ^7.22.5 + "@babel/types": ^7.22.5 + checksum: 6b1f6ce1b1f4e513bf2c8385a557ea0dd7fa37971b9002ad19268ca4384bbe90c09681fe4c076013f33deabc63a53b341ed91e792de741b4b35e01c00238177a + languageName: node + linkType: hard + +"@babel/helper-hoist-variables@npm:^7.22.5": + version: 7.22.5 + resolution: "@babel/helper-hoist-variables@npm:7.22.5" + dependencies: + "@babel/types": ^7.22.5 + checksum: 394ca191b4ac908a76e7c50ab52102669efe3a1c277033e49467913c7ed6f7c64d7eacbeabf3bed39ea1f41731e22993f763b1edce0f74ff8563fd1f380d92cc + languageName: node + linkType: hard + +"@babel/helper-member-expression-to-functions@npm:^7.22.5": + version: 7.22.5 + resolution: "@babel/helper-member-expression-to-functions@npm:7.22.5" + dependencies: + "@babel/types": ^7.22.5 + checksum: 4bd5791529c280c00743e8bdc669ef0d4cd1620d6e3d35e0d42b862f8262bc2364973e5968007f960780344c539a4b9cf92ab41f5b4f94560a9620f536de2a39 + languageName: node + linkType: hard + +"@babel/helper-module-imports@npm:^7.22.5": + version: 7.22.5 + resolution: "@babel/helper-module-imports@npm:7.22.5" + dependencies: + "@babel/types": ^7.22.5 + checksum: 9ac2b0404fa38b80bdf2653fbeaf8e8a43ccb41bd505f9741d820ed95d3c4e037c62a1bcdcb6c9527d7798d2e595924c4d025daed73283badc180ada2c9c49ad + languageName: node + linkType: hard + +"@babel/helper-module-transforms@npm:^7.22.5": + version: 7.22.5 + resolution: "@babel/helper-module-transforms@npm:7.22.5" + dependencies: + "@babel/helper-environment-visitor": ^7.22.5 + "@babel/helper-module-imports": ^7.22.5 + "@babel/helper-simple-access": ^7.22.5 + "@babel/helper-split-export-declaration": ^7.22.5 + "@babel/helper-validator-identifier": ^7.22.5 + "@babel/template": ^7.22.5 + "@babel/traverse": ^7.22.5 + "@babel/types": ^7.22.5 + checksum: 8985dc0d971fd17c467e8b84fe0f50f3dd8610e33b6c86e5b3ca8e8859f9448bcc5c84e08a2a14285ef388351c0484797081c8f05a03770bf44fc27bf4900e68 + languageName: node + linkType: hard + +"@babel/helper-optimise-call-expression@npm:^7.22.5": + version: 7.22.5 + resolution: "@babel/helper-optimise-call-expression@npm:7.22.5" + dependencies: + "@babel/types": ^7.22.5 + checksum: c70ef6cc6b6ed32eeeec4482127e8be5451d0e5282d5495d5d569d39eb04d7f1d66ec99b327f45d1d5842a9ad8c22d48567e93fc502003a47de78d122e355f7c + languageName: node + linkType: hard + +"@babel/helper-plugin-utils@npm:^7.0.0, @babel/helper-plugin-utils@npm:^7.10.4, @babel/helper-plugin-utils@npm:^7.12.13, @babel/helper-plugin-utils@npm:^7.14.5, @babel/helper-plugin-utils@npm:^7.16.7, @babel/helper-plugin-utils@npm:^7.17.12, @babel/helper-plugin-utils@npm:^7.18.6, @babel/helper-plugin-utils@npm:^7.22.5, @babel/helper-plugin-utils@npm:^7.8.0, @babel/helper-plugin-utils@npm:^7.8.3": + version: 7.22.5 + resolution: "@babel/helper-plugin-utils@npm:7.22.5" + checksum: c0fc7227076b6041acd2f0e818145d2e8c41968cc52fb5ca70eed48e21b8fe6dd88a0a91cbddf4951e33647336eb5ae184747ca706817ca3bef5e9e905151ff5 + languageName: node + linkType: hard + +"@babel/helper-remap-async-to-generator@npm:^7.22.5": + version: 7.22.5 + resolution: "@babel/helper-remap-async-to-generator@npm:7.22.5" + dependencies: + "@babel/helper-annotate-as-pure": ^7.22.5 + "@babel/helper-environment-visitor": ^7.22.5 + "@babel/helper-wrap-function": ^7.22.5 + "@babel/types": ^7.22.5 + peerDependencies: + "@babel/core": ^7.0.0 + checksum: 1e51dcff1c22e97ea3d22034b77788048eb6d8c6860325bd7a1046b7a7135730cefd93b5c96fd9839d76031095d5ffb6f0cd6ee90a5d69a4c7de980d7f4623d9 + languageName: node + linkType: hard + +"@babel/helper-replace-supers@npm:^7.22.5": + version: 7.22.5 + resolution: "@babel/helper-replace-supers@npm:7.22.5" + dependencies: + "@babel/helper-environment-visitor": ^7.22.5 + "@babel/helper-member-expression-to-functions": ^7.22.5 + "@babel/helper-optimise-call-expression": ^7.22.5 + "@babel/template": ^7.22.5 + "@babel/traverse": ^7.22.5 + "@babel/types": ^7.22.5 + checksum: af29deff6c6dc3fa2d1a517390716aa3f4d329855e8689f1d5c3cb07c1b898e614a5e175f1826bb58e9ff1480e6552885a71a9a0ba5161787aaafa2c79b216cc + languageName: node + linkType: hard + +"@babel/helper-simple-access@npm:^7.22.5": + version: 7.22.5 + resolution: "@babel/helper-simple-access@npm:7.22.5" + dependencies: + "@babel/types": ^7.22.5 + checksum: fe9686714caf7d70aedb46c3cce090f8b915b206e09225f1e4dbc416786c2fdbbee40b38b23c268b7ccef749dd2db35f255338fb4f2444429874d900dede5ad2 + languageName: node + linkType: hard + +"@babel/helper-skip-transparent-expression-wrappers@npm:^7.22.5": + version: 7.22.5 + resolution: "@babel/helper-skip-transparent-expression-wrappers@npm:7.22.5" + dependencies: + "@babel/types": ^7.22.5 + checksum: 1012ef2295eb12dc073f2b9edf3425661e9b8432a3387e62a8bc27c42963f1f216ab3124228015c748770b2257b4f1fda882ca8fa34c0bf485e929ae5bc45244 + languageName: node + linkType: hard + +"@babel/helper-split-export-declaration@npm:^7.22.5": + version: 7.22.5 + resolution: "@babel/helper-split-export-declaration@npm:7.22.5" + dependencies: + "@babel/types": ^7.22.5 + checksum: d10e05a02f49c1f7c578cea63d2ac55356501bbf58856d97ac9bfde4957faee21ae97c7f566aa309e38a256eef58b58e5b670a7f568b362c00e93dfffe072650 + languageName: node + linkType: hard + +"@babel/helper-string-parser@npm:^7.22.5": + version: 7.22.5 + resolution: "@babel/helper-string-parser@npm:7.22.5" + checksum: 836851ca5ec813077bbb303acc992d75a360267aa3b5de7134d220411c852a6f17de7c0d0b8c8dcc0f567f67874c00f4528672b2a4f1bc978a3ada64c8c78467 + languageName: node + linkType: hard + +"@babel/helper-validator-identifier@npm:^7.22.5": + version: 7.22.5 + resolution: "@babel/helper-validator-identifier@npm:7.22.5" + checksum: 7f0f30113474a28298c12161763b49de5018732290ca4de13cdaefd4fd0d635a6fe3f6686c37a02905fb1e64f21a5ee2b55140cf7b070e729f1bd66866506aea + languageName: node + linkType: hard + +"@babel/helper-validator-option@npm:^7.22.5": + version: 7.22.5 + resolution: "@babel/helper-validator-option@npm:7.22.5" + checksum: bbeca8a85ee86990215c0424997438b388b8d642d69b9f86c375a174d3cdeb270efafd1ff128bc7a1d370923d13b6e45829ba8581c027620e83e3a80c5c414b3 + languageName: node + linkType: hard + +"@babel/helper-wrap-function@npm:^7.22.5": + version: 7.22.5 + resolution: "@babel/helper-wrap-function@npm:7.22.5" + dependencies: + "@babel/helper-function-name": ^7.22.5 + "@babel/template": ^7.22.5 + "@babel/traverse": ^7.22.5 + "@babel/types": ^7.22.5 + checksum: a4ba2d7577ad3ce92fadaa341ffce3b0e4b389808099b07c80847f9be0852f4b42344612bc1b3d1b796ffb75be56d5957c5c56a1734f6aee5ccbb7cd9ab12691 + languageName: node + linkType: hard + +"@babel/helpers@npm:^7.22.5": + version: 7.22.5 + resolution: "@babel/helpers@npm:7.22.5" + dependencies: + "@babel/template": ^7.22.5 + "@babel/traverse": ^7.22.5 + "@babel/types": ^7.22.5 + checksum: a96e785029dff72f171190943df895ab0f76e17bf3881efd630bc5fae91215042d1c2e9ed730e8e4adf4da6f28b24bd1f54ed93b90ffbca34c197351872a084e + languageName: node + linkType: hard + +"@babel/highlight@npm:^7.22.5": + version: 7.22.5 + resolution: "@babel/highlight@npm:7.22.5" + dependencies: + "@babel/helper-validator-identifier": ^7.22.5 + chalk: ^2.0.0 + js-tokens: ^4.0.0 + checksum: f61ae6de6ee0ea8d9b5bcf2a532faec5ab0a1dc0f7c640e5047fc61630a0edb88b18d8c92eb06566d30da7a27db841aca11820ecd3ebe9ce514c9350fbed39c4 + languageName: node + linkType: hard + +"@babel/parser@npm:^7.1.0, @babel/parser@npm:^7.14.7, @babel/parser@npm:^7.20.7, @babel/parser@npm:^7.22.5": + version: 7.22.5 + resolution: "@babel/parser@npm:7.22.5" + bin: + parser: ./bin/babel-parser.js + checksum: 470ebba516417ce8683b36e2eddd56dcfecb32c54b9bb507e28eb76b30d1c3e618fd0cfeee1f64d8357c2254514e1a19e32885cfb4e73149f4ae875436a6d59c + languageName: node + linkType: hard + +"@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@npm:^7.22.5": + version: 7.22.5 + resolution: "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@npm:7.22.5" + dependencies: + "@babel/helper-plugin-utils": ^7.22.5 + peerDependencies: + "@babel/core": ^7.0.0 + checksum: 1e353a060fb2cd8f1256d28cd768f16fb02513f905b9b6d656fb0242c96c341a196fa188b27c2701506a6e27515359fbcc1a5ca7fa8b9b530cf88fbd137baefc + languageName: node + linkType: hard + +"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@npm:^7.22.5": + version: 7.22.5 + resolution: "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@npm:7.22.5" + dependencies: + "@babel/helper-plugin-utils": ^7.22.5 + "@babel/helper-skip-transparent-expression-wrappers": ^7.22.5 + "@babel/plugin-transform-optional-chaining": ^7.22.5 + peerDependencies: + "@babel/core": ^7.13.0 + checksum: 16e7a5f3bf2f2ac0ca032a70bf0ebd7e886d84dbb712b55c0643c04c495f0f221fbcbca14b5f8f8027fa6c87a3dafae0934022ad2b409384af6c5c356495b7bd + languageName: node + linkType: hard + +"@babel/plugin-proposal-private-property-in-object@npm:7.21.0-placeholder-for-preset-env.2": + version: 7.21.0-placeholder-for-preset-env.2 + resolution: "@babel/plugin-proposal-private-property-in-object@npm:7.21.0-placeholder-for-preset-env.2" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: d97745d098b835d55033ff3a7fb2b895b9c5295b08a5759e4f20df325aa385a3e0bc9bd5ad8f2ec554a44d4e6525acfc257b8c5848a1345cb40f26a30e277e91 + languageName: node + linkType: hard + +"@babel/plugin-proposal-unicode-property-regex@npm:^7.4.4": + version: 7.17.12 + resolution: "@babel/plugin-proposal-unicode-property-regex@npm:7.17.12" + dependencies: + "@babel/helper-create-regexp-features-plugin": ^7.17.12 + "@babel/helper-plugin-utils": ^7.17.12 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 0e4194510415ed11849f1617fcb32d996df746ba93cd05ebbabecb63cfc02c0e97b585c97da3dcf68acdd3c8b71cfae964abe5d5baba6bd3977a475d9225ad9e + languageName: node + linkType: hard + +"@babel/plugin-syntax-async-generators@npm:^7.8.4": + version: 7.8.4 + resolution: "@babel/plugin-syntax-async-generators@npm:7.8.4" + dependencies: + "@babel/helper-plugin-utils": ^7.8.0 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 7ed1c1d9b9e5b64ef028ea5e755c0be2d4e5e4e3d6cf7df757b9a8c4cfa4193d268176d0f1f7fbecdda6fe722885c7fda681f480f3741d8a2d26854736f05367 + languageName: node + linkType: hard + +"@babel/plugin-syntax-bigint@npm:^7.8.3": + version: 7.8.3 + resolution: "@babel/plugin-syntax-bigint@npm:7.8.3" + dependencies: + "@babel/helper-plugin-utils": ^7.8.0 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 3a10849d83e47aec50f367a9e56a6b22d662ddce643334b087f9828f4c3dd73bdc5909aaeabe123fed78515767f9ca43498a0e621c438d1cd2802d7fae3c9648 + languageName: node + linkType: hard + +"@babel/plugin-syntax-class-properties@npm:^7.12.13, @babel/plugin-syntax-class-properties@npm:^7.8.3": + version: 7.12.13 + resolution: "@babel/plugin-syntax-class-properties@npm:7.12.13" + dependencies: + "@babel/helper-plugin-utils": ^7.12.13 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 24f34b196d6342f28d4bad303612d7ff566ab0a013ce89e775d98d6f832969462e7235f3e7eaf17678a533d4be0ba45d3ae34ab4e5a9dcbda5d98d49e5efa2fc + languageName: node + linkType: hard + +"@babel/plugin-syntax-class-static-block@npm:^7.14.5": + version: 7.14.5 + resolution: "@babel/plugin-syntax-class-static-block@npm:7.14.5" + dependencies: + "@babel/helper-plugin-utils": ^7.14.5 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 3e80814b5b6d4fe17826093918680a351c2d34398a914ce6e55d8083d72a9bdde4fbaf6a2dcea0e23a03de26dc2917ae3efd603d27099e2b98380345703bf948 + languageName: node + linkType: hard + +"@babel/plugin-syntax-dynamic-import@npm:^7.8.3": + version: 7.8.3 + resolution: "@babel/plugin-syntax-dynamic-import@npm:7.8.3" + dependencies: + "@babel/helper-plugin-utils": ^7.8.0 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: ce307af83cf433d4ec42932329fad25fa73138ab39c7436882ea28742e1c0066626d224e0ad2988724c82644e41601cef607b36194f695cb78a1fcdc959637bd + languageName: node + linkType: hard + +"@babel/plugin-syntax-export-namespace-from@npm:^7.8.3": + version: 7.8.3 + resolution: "@babel/plugin-syntax-export-namespace-from@npm:7.8.3" + dependencies: + "@babel/helper-plugin-utils": ^7.8.3 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 85740478be5b0de185228e7814451d74ab8ce0a26fcca7613955262a26e99e8e15e9da58f60c754b84515d4c679b590dbd3f2148f0f58025f4ae706f1c5a5d4a + languageName: node + linkType: hard + +"@babel/plugin-syntax-import-assertions@npm:^7.22.5": + version: 7.22.5 + resolution: "@babel/plugin-syntax-import-assertions@npm:7.22.5" + dependencies: + "@babel/helper-plugin-utils": ^7.22.5 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 2b8b5572db04a7bef1e6cd20debf447e4eef7cb012616f5eceb8fa3e23ce469b8f76ee74fd6d1e158ba17a8f58b0aec579d092fb67c5a30e83ccfbc5754916c1 + languageName: node + linkType: hard + +"@babel/plugin-syntax-import-attributes@npm:^7.22.5": + version: 7.22.5 + resolution: "@babel/plugin-syntax-import-attributes@npm:7.22.5" + dependencies: + "@babel/helper-plugin-utils": ^7.22.5 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 197b3c5ea2a9649347f033342cb222ab47f4645633695205c0250c6bf2af29e643753b8bb24a2db39948bef08e7c540babfd365591eb57fc110cb30b425ffc47 + languageName: node + linkType: hard + +"@babel/plugin-syntax-import-meta@npm:^7.10.4, @babel/plugin-syntax-import-meta@npm:^7.8.3": + version: 7.10.4 + resolution: "@babel/plugin-syntax-import-meta@npm:7.10.4" + dependencies: + "@babel/helper-plugin-utils": ^7.10.4 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 166ac1125d10b9c0c430e4156249a13858c0366d38844883d75d27389621ebe651115cb2ceb6dc011534d5055719fa1727b59f39e1ab3ca97820eef3dcab5b9b + languageName: node + linkType: hard + +"@babel/plugin-syntax-json-strings@npm:^7.8.3": + version: 7.8.3 + resolution: "@babel/plugin-syntax-json-strings@npm:7.8.3" + dependencies: + "@babel/helper-plugin-utils": ^7.8.0 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: bf5aea1f3188c9a507e16efe030efb996853ca3cadd6512c51db7233cc58f3ac89ff8c6bdfb01d30843b161cfe7d321e1bf28da82f7ab8d7e6bc5464666f354a + languageName: node + linkType: hard + +"@babel/plugin-syntax-jsx@npm:^7.7.2": + version: 7.22.5 + resolution: "@babel/plugin-syntax-jsx@npm:7.22.5" + dependencies: + "@babel/helper-plugin-utils": ^7.22.5 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 8829d30c2617ab31393d99cec2978e41f014f4ac6f01a1cecf4c4dd8320c3ec12fdc3ce121126b2d8d32f6887e99ca1a0bad53dedb1e6ad165640b92b24980ce + languageName: node + linkType: hard + +"@babel/plugin-syntax-logical-assignment-operators@npm:^7.10.4, @babel/plugin-syntax-logical-assignment-operators@npm:^7.8.3": + version: 7.10.4 + resolution: "@babel/plugin-syntax-logical-assignment-operators@npm:7.10.4" + dependencies: + "@babel/helper-plugin-utils": ^7.10.4 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: aff33577037e34e515911255cdbb1fd39efee33658aa00b8a5fd3a4b903585112d037cce1cc9e4632f0487dc554486106b79ccd5ea63a2e00df4363f6d4ff886 + languageName: node + linkType: hard + +"@babel/plugin-syntax-nullish-coalescing-operator@npm:^7.8.3": + version: 7.8.3 + resolution: "@babel/plugin-syntax-nullish-coalescing-operator@npm:7.8.3" + dependencies: + "@babel/helper-plugin-utils": ^7.8.0 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 87aca4918916020d1fedba54c0e232de408df2644a425d153be368313fdde40d96088feed6c4e5ab72aac89be5d07fef2ddf329a15109c5eb65df006bf2580d1 + languageName: node + linkType: hard + +"@babel/plugin-syntax-numeric-separator@npm:^7.10.4, @babel/plugin-syntax-numeric-separator@npm:^7.8.3": + version: 7.10.4 + resolution: "@babel/plugin-syntax-numeric-separator@npm:7.10.4" + dependencies: + "@babel/helper-plugin-utils": ^7.10.4 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 01ec5547bd0497f76cc903ff4d6b02abc8c05f301c88d2622b6d834e33a5651aa7c7a3d80d8d57656a4588f7276eba357f6b7e006482f5b564b7a6488de493a1 + languageName: node + linkType: hard + +"@babel/plugin-syntax-object-rest-spread@npm:^7.8.3": + version: 7.8.3 + resolution: "@babel/plugin-syntax-object-rest-spread@npm:7.8.3" + dependencies: + "@babel/helper-plugin-utils": ^7.8.0 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: fddcf581a57f77e80eb6b981b10658421bc321ba5f0a5b754118c6a92a5448f12a0c336f77b8abf734841e102e5126d69110a306eadb03ca3e1547cab31f5cbf + languageName: node + linkType: hard + +"@babel/plugin-syntax-optional-catch-binding@npm:^7.8.3": + version: 7.8.3 + resolution: "@babel/plugin-syntax-optional-catch-binding@npm:7.8.3" + dependencies: + "@babel/helper-plugin-utils": ^7.8.0 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 910d90e72bc90ea1ce698e89c1027fed8845212d5ab588e35ef91f13b93143845f94e2539d831dc8d8ededc14ec02f04f7bd6a8179edd43a326c784e7ed7f0b9 + languageName: node + linkType: hard + +"@babel/plugin-syntax-optional-chaining@npm:^7.8.3": + version: 7.8.3 + resolution: "@babel/plugin-syntax-optional-chaining@npm:7.8.3" + dependencies: + "@babel/helper-plugin-utils": ^7.8.0 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: eef94d53a1453361553c1f98b68d17782861a04a392840341bc91780838dd4e695209c783631cf0de14c635758beafb6a3a65399846ffa4386bff90639347f30 + languageName: node + linkType: hard + +"@babel/plugin-syntax-private-property-in-object@npm:^7.14.5": + version: 7.14.5 + resolution: "@babel/plugin-syntax-private-property-in-object@npm:7.14.5" + dependencies: + "@babel/helper-plugin-utils": ^7.14.5 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: b317174783e6e96029b743ccff2a67d63d38756876e7e5d0ba53a322e38d9ca452c13354a57de1ad476b4c066dbae699e0ca157441da611117a47af88985ecda + languageName: node + linkType: hard + +"@babel/plugin-syntax-top-level-await@npm:^7.14.5, @babel/plugin-syntax-top-level-await@npm:^7.8.3": + version: 7.14.5 + resolution: "@babel/plugin-syntax-top-level-await@npm:7.14.5" + dependencies: + "@babel/helper-plugin-utils": ^7.14.5 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: bbd1a56b095be7820029b209677b194db9b1d26691fe999856462e66b25b281f031f3dfd91b1619e9dcf95bebe336211833b854d0fb8780d618e35667c2d0d7e + languageName: node + linkType: hard + +"@babel/plugin-syntax-typescript@npm:^7.7.2": + version: 7.22.5 + resolution: "@babel/plugin-syntax-typescript@npm:7.22.5" + dependencies: + "@babel/helper-plugin-utils": ^7.22.5 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 8ab7718fbb026d64da93681a57797d60326097fd7cb930380c8bffd9eb101689e90142c760a14b51e8e69c88a73ba3da956cb4520a3b0c65743aee5c71ef360a + languageName: node + linkType: hard + +"@babel/plugin-syntax-unicode-sets-regex@npm:^7.18.6": + version: 7.18.6 + resolution: "@babel/plugin-syntax-unicode-sets-regex@npm:7.18.6" + dependencies: + "@babel/helper-create-regexp-features-plugin": ^7.18.6 + "@babel/helper-plugin-utils": ^7.18.6 + peerDependencies: + "@babel/core": ^7.0.0 + checksum: a651d700fe63ff0ddfd7186f4ebc24447ca734f114433139e3c027bc94a900d013cf1ef2e2db8430425ba542e39ae160c3b05f06b59fd4656273a3df97679e9c + languageName: node + linkType: hard + +"@babel/plugin-transform-arrow-functions@npm:^7.22.5": + version: 7.22.5 + resolution: "@babel/plugin-transform-arrow-functions@npm:7.22.5" + dependencies: + "@babel/helper-plugin-utils": ^7.22.5 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 35abb6c57062802c7ce8bd96b2ef2883e3124370c688bbd67609f7d2453802fb73944df8808f893b6c67de978eb2bcf87bbfe325e46d6f39b5fcb09ece11d01a + languageName: node + linkType: hard + +"@babel/plugin-transform-async-generator-functions@npm:^7.22.5": + version: 7.22.5 + resolution: "@babel/plugin-transform-async-generator-functions@npm:7.22.5" + dependencies: + "@babel/helper-environment-visitor": ^7.22.5 + "@babel/helper-plugin-utils": ^7.22.5 + "@babel/helper-remap-async-to-generator": ^7.22.5 + "@babel/plugin-syntax-async-generators": ^7.8.4 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 32890b69ec5627eb46ee8e084bddc6b98d85b66cae5e015f3a23924611a759789d2ff836406605f5293b5c2bad306b20cb1f5b7a46ed549b07bfec634bcd31f9 + languageName: node + linkType: hard + +"@babel/plugin-transform-async-to-generator@npm:^7.22.5": + version: 7.22.5 + resolution: "@babel/plugin-transform-async-to-generator@npm:7.22.5" + dependencies: + "@babel/helper-module-imports": ^7.22.5 + "@babel/helper-plugin-utils": ^7.22.5 + "@babel/helper-remap-async-to-generator": ^7.22.5 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: b95f23f99dcb379a9f0a1c2a3bbea3f8dc0e1b16dc1ac8b484fe378370169290a7a63d520959a9ba1232837cf74a80e23f6facbe14fd42a3cda6d3c2d7168e62 + languageName: node + linkType: hard + +"@babel/plugin-transform-block-scoped-functions@npm:^7.22.5": + version: 7.22.5 + resolution: "@babel/plugin-transform-block-scoped-functions@npm:7.22.5" + dependencies: + "@babel/helper-plugin-utils": ^7.22.5 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 416b1341858e8ca4e524dee66044735956ced5f478b2c3b9bc11ec2285b0c25d7dbb96d79887169eb938084c95d0a89338c8b2fe70d473bd9dc92e5d9db1732c + languageName: node + linkType: hard + +"@babel/plugin-transform-block-scoping@npm:^7.22.5": + version: 7.22.5 + resolution: "@babel/plugin-transform-block-scoping@npm:7.22.5" + dependencies: + "@babel/helper-plugin-utils": ^7.22.5 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 26987002cfe6e24544e60fa35f07052b6557f590c1a1cc5cf35d6dc341d7fea163c1222a2d70d5d2692f0b9860d942fd3ba979848b2995d4debffa387b9b19ae + languageName: node + linkType: hard + +"@babel/plugin-transform-class-properties@npm:^7.22.5": + version: 7.22.5 + resolution: "@babel/plugin-transform-class-properties@npm:7.22.5" + dependencies: + "@babel/helper-create-class-features-plugin": ^7.22.5 + "@babel/helper-plugin-utils": ^7.22.5 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: b830152dfc2ff2f647f0abe76e6251babdfbef54d18c4b2c73a6bf76b1a00050a5d998dac80dc901a48514e95604324943a9dd39317073fe0928b559e0e0c579 + languageName: node + linkType: hard + +"@babel/plugin-transform-class-static-block@npm:^7.22.5": + version: 7.22.5 + resolution: "@babel/plugin-transform-class-static-block@npm:7.22.5" + dependencies: + "@babel/helper-create-class-features-plugin": ^7.22.5 + "@babel/helper-plugin-utils": ^7.22.5 + "@babel/plugin-syntax-class-static-block": ^7.14.5 + peerDependencies: + "@babel/core": ^7.12.0 + checksum: bc48b92dbaf625a14f2bf62382384eef01e0515802426841636ae9146e27395d068c7a8a45e9e15699491b0a01d990f38f179cbc9dc89274a393f85648772f12 + languageName: node + linkType: hard + +"@babel/plugin-transform-classes@npm:^7.22.5": + version: 7.22.5 + resolution: "@babel/plugin-transform-classes@npm:7.22.5" + dependencies: + "@babel/helper-annotate-as-pure": ^7.22.5 + "@babel/helper-compilation-targets": ^7.22.5 + "@babel/helper-environment-visitor": ^7.22.5 + "@babel/helper-function-name": ^7.22.5 + "@babel/helper-optimise-call-expression": ^7.22.5 + "@babel/helper-plugin-utils": ^7.22.5 + "@babel/helper-replace-supers": ^7.22.5 + "@babel/helper-split-export-declaration": ^7.22.5 + globals: ^11.1.0 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 124b1b79180524cc9d08155cecde92c7f2ab0db02cbe0f8befa187ef3c7320909ce1a6d6daf5ce73e8330f9b40cf9991f424c6e572b8dddc1f14e2758fa80d20 + languageName: node + linkType: hard + +"@babel/plugin-transform-computed-properties@npm:^7.22.5": + version: 7.22.5 + resolution: "@babel/plugin-transform-computed-properties@npm:7.22.5" + dependencies: + "@babel/helper-plugin-utils": ^7.22.5 + "@babel/template": ^7.22.5 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: c2a77a0f94ec71efbc569109ec14ea2aa925b333289272ced8b33c6108bdbb02caf01830ffc7e49486b62dec51911924d13f3a76f1149f40daace1898009e131 + languageName: node + linkType: hard + +"@babel/plugin-transform-destructuring@npm:^7.22.5": + version: 7.22.5 + resolution: "@babel/plugin-transform-destructuring@npm:7.22.5" + dependencies: + "@babel/helper-plugin-utils": ^7.22.5 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 76f6ea2aee1fcfa1c3791eb7a5b89703c6472650b993e8666fff0f1d6e9d737a84134edf89f63c92297f3e75064c1263219463b02dd9bc7434b6e5b9935e3f20 + languageName: node + linkType: hard + +"@babel/plugin-transform-dotall-regex@npm:^7.22.5, @babel/plugin-transform-dotall-regex@npm:^7.4.4": + version: 7.22.5 + resolution: "@babel/plugin-transform-dotall-regex@npm:7.22.5" + dependencies: + "@babel/helper-create-regexp-features-plugin": ^7.22.5 + "@babel/helper-plugin-utils": ^7.22.5 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 409b658d11e3082c8f69e9cdef2d96e4d6d11256f005772425fb230cc48fd05945edbfbcb709dab293a1a2f01f9c8a5bb7b4131e632b23264039d9f95864b453 + languageName: node + linkType: hard + +"@babel/plugin-transform-duplicate-keys@npm:^7.22.5": + version: 7.22.5 + resolution: "@babel/plugin-transform-duplicate-keys@npm:7.22.5" + dependencies: + "@babel/helper-plugin-utils": ^7.22.5 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: bb1280fbabaab6fab2ede585df34900712698210a3bd413f4df5bae6d8c24be36b496c92722ae676a7a67d060a4624f4d6c23b923485f906bfba8773c69f55b4 + languageName: node + linkType: hard + +"@babel/plugin-transform-dynamic-import@npm:^7.22.5": + version: 7.22.5 + resolution: "@babel/plugin-transform-dynamic-import@npm:7.22.5" + dependencies: + "@babel/helper-plugin-utils": ^7.22.5 + "@babel/plugin-syntax-dynamic-import": ^7.8.3 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 186a6d59f36eb3c5824739fc9c22ed0f4ca68e001662aa3a302634346a8b785cb9579b23b0c158f4570604d697d19598ca09b58c60a7fa2894da1163c4eb1907 + languageName: node + linkType: hard + +"@babel/plugin-transform-exponentiation-operator@npm:^7.22.5": + version: 7.22.5 + resolution: "@babel/plugin-transform-exponentiation-operator@npm:7.22.5" + dependencies: + "@babel/helper-builder-binary-assignment-operator-visitor": ^7.22.5 + "@babel/helper-plugin-utils": ^7.22.5 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: f2d660c1b1d51ad5fec1cd5ad426a52187204068c4158f8c4aa977b31535c61b66898d532603eef21c15756827be8277f724c869b888d560f26d7fe848bb5eae + languageName: node + linkType: hard + +"@babel/plugin-transform-export-namespace-from@npm:^7.22.5": + version: 7.22.5 + resolution: "@babel/plugin-transform-export-namespace-from@npm:7.22.5" + dependencies: + "@babel/helper-plugin-utils": ^7.22.5 + "@babel/plugin-syntax-export-namespace-from": ^7.8.3 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 3d197b788758044983c96b9c49bed4b456055f35a388521a405968db0f6e2ffb6fd59110e3931f4dcc5e126ae9e5e00e154a0afb47a7ea359d8d0dea79f480d7 + languageName: node + linkType: hard + +"@babel/plugin-transform-for-of@npm:^7.22.5": + version: 7.22.5 + resolution: "@babel/plugin-transform-for-of@npm:7.22.5" + dependencies: + "@babel/helper-plugin-utils": ^7.22.5 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: d7b8d4db010bce7273674caa95c4e6abd909362866ce297e86a2ecaa9ae636e05d525415811db9b3c942155df7f3651d19b91dd6c41f142f7308a97c7cb06023 + languageName: node + linkType: hard + +"@babel/plugin-transform-function-name@npm:^7.22.5": + version: 7.22.5 + resolution: "@babel/plugin-transform-function-name@npm:7.22.5" + dependencies: + "@babel/helper-compilation-targets": ^7.22.5 + "@babel/helper-function-name": ^7.22.5 + "@babel/helper-plugin-utils": ^7.22.5 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: cff3b876357999cb8ae30e439c3ec6b0491a53b0aa6f722920a4675a6dd5b53af97a833051df4b34791fe5b3dd326ccf769d5c8e45b322aa50ee11a660b17845 + languageName: node + linkType: hard + +"@babel/plugin-transform-json-strings@npm:^7.22.5": + version: 7.22.5 + resolution: "@babel/plugin-transform-json-strings@npm:7.22.5" + dependencies: + "@babel/helper-plugin-utils": ^7.22.5 + "@babel/plugin-syntax-json-strings": ^7.8.3 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 4e00b902487a670b6c8948f33f9108133fd745cf9d1478aca515fb460b9b2f12e137988ebc1663630fb82070a870aed8b0c1aa4d007a841c18004619798f255c + languageName: node + linkType: hard + +"@babel/plugin-transform-literals@npm:^7.22.5": + version: 7.22.5 + resolution: "@babel/plugin-transform-literals@npm:7.22.5" + dependencies: + "@babel/helper-plugin-utils": ^7.22.5 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: ec37cc2ffb32667af935ab32fe28f00920ec8a1eb999aa6dc6602f2bebd8ba205a558aeedcdccdebf334381d5c57106c61f52332045730393e73410892a9735b + languageName: node + linkType: hard + +"@babel/plugin-transform-logical-assignment-operators@npm:^7.22.5": + version: 7.22.5 + resolution: "@babel/plugin-transform-logical-assignment-operators@npm:7.22.5" + dependencies: + "@babel/helper-plugin-utils": ^7.22.5 + "@babel/plugin-syntax-logical-assignment-operators": ^7.10.4 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 18748e953c08f64885f18c224eac58df10a13eac4d845d16b5d9b6276907da7ca2530dfebe6ed41cdc5f8a75d9db3e36d8eb54ddce7cd0364af1cab09b435302 + languageName: node + linkType: hard + +"@babel/plugin-transform-member-expression-literals@npm:^7.22.5": + version: 7.22.5 + resolution: "@babel/plugin-transform-member-expression-literals@npm:7.22.5" + dependencies: + "@babel/helper-plugin-utils": ^7.22.5 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: ec4b0e07915ddd4fda0142fd104ee61015c208608a84cfa13643a95d18760b1dc1ceb6c6e0548898b8c49e5959a994e46367260176dbabc4467f729b21868504 + languageName: node + linkType: hard + +"@babel/plugin-transform-modules-amd@npm:^7.22.5": + version: 7.22.5 + resolution: "@babel/plugin-transform-modules-amd@npm:7.22.5" + dependencies: + "@babel/helper-module-transforms": ^7.22.5 + "@babel/helper-plugin-utils": ^7.22.5 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 7da4c4ebbbcf7d182abb59b2046b22d86eee340caf8a22a39ef6a727da2d8acfec1f714fcdcd5054110b280e4934f735e80a6848d192b6834c5d4459a014f04d + languageName: node + linkType: hard + +"@babel/plugin-transform-modules-commonjs@npm:^7.22.5": + version: 7.22.5 + resolution: "@babel/plugin-transform-modules-commonjs@npm:7.22.5" + dependencies: + "@babel/helper-module-transforms": ^7.22.5 + "@babel/helper-plugin-utils": ^7.22.5 + "@babel/helper-simple-access": ^7.22.5 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 2067aca8f6454d54ffcce69b02c457cfa61428e11372f6a1d99ff4fcfbb55c396ed2ca6ca886bf06c852e38c1a205b8095921b2364fd0243f3e66bc1dda61caa + languageName: node + linkType: hard + +"@babel/plugin-transform-modules-systemjs@npm:^7.22.5": + version: 7.22.5 + resolution: "@babel/plugin-transform-modules-systemjs@npm:7.22.5" + dependencies: + "@babel/helper-hoist-variables": ^7.22.5 + "@babel/helper-module-transforms": ^7.22.5 + "@babel/helper-plugin-utils": ^7.22.5 + "@babel/helper-validator-identifier": ^7.22.5 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 04f4178589543396b3c24330a67a59c5e69af5e96119c9adda730c0f20122deaff54671ebbc72ad2df6495a5db8a758bd96942de95fba7ad427de9c80b1b38c8 + languageName: node + linkType: hard + +"@babel/plugin-transform-modules-umd@npm:^7.22.5": + version: 7.22.5 + resolution: "@babel/plugin-transform-modules-umd@npm:7.22.5" + dependencies: + "@babel/helper-module-transforms": ^7.22.5 + "@babel/helper-plugin-utils": ^7.22.5 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 46622834c54c551b231963b867adbc80854881b3e516ff29984a8da989bd81665bd70e8cba6710345248e97166689310f544aee1a5773e262845a8f1b3e5b8b4 + languageName: node + linkType: hard + +"@babel/plugin-transform-named-capturing-groups-regex@npm:^7.22.5": + version: 7.22.5 + resolution: "@babel/plugin-transform-named-capturing-groups-regex@npm:7.22.5" + dependencies: + "@babel/helper-create-regexp-features-plugin": ^7.22.5 + "@babel/helper-plugin-utils": ^7.22.5 + peerDependencies: + "@babel/core": ^7.0.0 + checksum: 3ee564ddee620c035b928fdc942c5d17e9c4b98329b76f9cefac65c111135d925eb94ed324064cd7556d4f5123beec79abea1d4b97d1c8a2a5c748887a2eb623 + languageName: node + linkType: hard + +"@babel/plugin-transform-new-target@npm:^7.22.5": + version: 7.22.5 + resolution: "@babel/plugin-transform-new-target@npm:7.22.5" + dependencies: + "@babel/helper-plugin-utils": ^7.22.5 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 6b72112773487a881a1d6ffa680afde08bad699252020e86122180ee7a88854d5da3f15d9bca3331cf2e025df045604494a8208a2e63b486266b07c14e2ffbf3 + languageName: node + linkType: hard + +"@babel/plugin-transform-nullish-coalescing-operator@npm:^7.22.5": + version: 7.22.5 + resolution: "@babel/plugin-transform-nullish-coalescing-operator@npm:7.22.5" + dependencies: + "@babel/helper-plugin-utils": ^7.22.5 + "@babel/plugin-syntax-nullish-coalescing-operator": ^7.8.3 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: e6a059169d257fc61322d0708edae423072449b7c33de396261e68dee582aec5396789a1c22bce84e5bd88a169623c2e750b513fc222930979e6accd52a44bf2 + languageName: node + linkType: hard + +"@babel/plugin-transform-numeric-separator@npm:^7.22.5": + version: 7.22.5 + resolution: "@babel/plugin-transform-numeric-separator@npm:7.22.5" + dependencies: + "@babel/helper-plugin-utils": ^7.22.5 + "@babel/plugin-syntax-numeric-separator": ^7.10.4 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 9e7837d4eae04f211ebaa034fe5003d2927b6bf6d5b9dc09f2b1183c01482cdde5a75b8bd5c7ff195c2abc7b923339eb0b2a9d27cb78359d38248a3b2c2367c4 + languageName: node + linkType: hard + +"@babel/plugin-transform-object-rest-spread@npm:^7.22.5": + version: 7.22.5 + resolution: "@babel/plugin-transform-object-rest-spread@npm:7.22.5" + dependencies: + "@babel/compat-data": ^7.22.5 + "@babel/helper-compilation-targets": ^7.22.5 + "@babel/helper-plugin-utils": ^7.22.5 + "@babel/plugin-syntax-object-rest-spread": ^7.8.3 + "@babel/plugin-transform-parameters": ^7.22.5 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 3b5e091f0dc67108f2e41ed5a97e15bbe4381a19d9a7eea80b71c7de1d8169fd28784e1e41a3d2ad12709ab212e58fc481282a5bb65d591fae7b443048de3330 + languageName: node + linkType: hard + +"@babel/plugin-transform-object-super@npm:^7.22.5": + version: 7.22.5 + resolution: "@babel/plugin-transform-object-super@npm:7.22.5" + dependencies: + "@babel/helper-plugin-utils": ^7.22.5 + "@babel/helper-replace-supers": ^7.22.5 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: b71887877d74cb64dbccb5c0324fa67e31171e6a5311991f626650e44a4083e5436a1eaa89da78c0474fb095d4ec322d63ee778b202d33aa2e4194e1ed8e62d7 + languageName: node + linkType: hard + +"@babel/plugin-transform-optional-catch-binding@npm:^7.22.5": + version: 7.22.5 + resolution: "@babel/plugin-transform-optional-catch-binding@npm:7.22.5" + dependencies: + "@babel/helper-plugin-utils": ^7.22.5 + "@babel/plugin-syntax-optional-catch-binding": ^7.8.3 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: b0e8b4233ff06b5c9d285257f49c5bd441f883189b24282e6200f9ebdf5db29aeeebbffae57fbbcd5df9f4387b3e66e5d322aaae5652a78e89685ddbae46bbd1 + languageName: node + linkType: hard + +"@babel/plugin-transform-optional-chaining@npm:^7.22.5": + version: 7.22.5 + resolution: "@babel/plugin-transform-optional-chaining@npm:7.22.5" + dependencies: + "@babel/helper-plugin-utils": ^7.22.5 + "@babel/helper-skip-transparent-expression-wrappers": ^7.22.5 + "@babel/plugin-syntax-optional-chaining": ^7.8.3 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 57b9c05fb22ae881b8a334b184fc6ee966661ed5d1eb4eed8c2fb9a12e68150d90b229efcb1aa777e246999830844fee06d7365f8bb4bb262fdcd23876ff3ea2 + languageName: node + linkType: hard + +"@babel/plugin-transform-parameters@npm:^7.22.5": + version: 7.22.5 + resolution: "@babel/plugin-transform-parameters@npm:7.22.5" + dependencies: + "@babel/helper-plugin-utils": ^7.22.5 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: b44f89cf97daf23903776ba27c2ab13b439d80d8c8a95be5c476ab65023b1e0c0e94c28d3745f3b60a58edc4e590fa0cd4287a0293e51401ca7d29a2ddb13b8e + languageName: node + linkType: hard + +"@babel/plugin-transform-private-methods@npm:^7.22.5": + version: 7.22.5 + resolution: "@babel/plugin-transform-private-methods@npm:7.22.5" + dependencies: + "@babel/helper-create-class-features-plugin": ^7.22.5 + "@babel/helper-plugin-utils": ^7.22.5 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 321479b4fcb6d3b3ef622ab22fd24001e43d46e680e8e41324c033d5810c84646e470f81b44cbcbef5c22e99030784f7cac92f1829974da7a47a60a7139082c3 + languageName: node + linkType: hard + +"@babel/plugin-transform-private-property-in-object@npm:^7.22.5": + version: 7.22.5 + resolution: "@babel/plugin-transform-private-property-in-object@npm:7.22.5" + dependencies: + "@babel/helper-annotate-as-pure": ^7.22.5 + "@babel/helper-create-class-features-plugin": ^7.22.5 + "@babel/helper-plugin-utils": ^7.22.5 + "@babel/plugin-syntax-private-property-in-object": ^7.14.5 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 9ac019fb2772f3af6278a7f4b8b14b0663accb3fd123d87142ceb2fbc57fd1afa07c945d1329029b026b9ee122096ef71a3f34f257a9e04cf4245b87298c38b4 + languageName: node + linkType: hard + +"@babel/plugin-transform-property-literals@npm:^7.22.5": + version: 7.22.5 + resolution: "@babel/plugin-transform-property-literals@npm:7.22.5" + dependencies: + "@babel/helper-plugin-utils": ^7.22.5 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 796176a3176106f77fcb8cd04eb34a8475ce82d6d03a88db089531b8f0453a2fb8b0c6ec9a52c27948bc0ea478becec449893741fc546dfc3930ab927e3f9f2e + languageName: node + linkType: hard + +"@babel/plugin-transform-regenerator@npm:^7.22.5": + version: 7.22.5 + resolution: "@babel/plugin-transform-regenerator@npm:7.22.5" + dependencies: + "@babel/helper-plugin-utils": ^7.22.5 + regenerator-transform: ^0.15.1 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: f7c5ca5151321963df777cc02725d10d1ccc3b3b8323da0423aecd9ac6144cbdd2274af5281a5580db2fc2f8b234e318517b5d76b85669118906533a559f2b6a + languageName: node + linkType: hard + +"@babel/plugin-transform-reserved-words@npm:^7.22.5": + version: 7.22.5 + resolution: "@babel/plugin-transform-reserved-words@npm:7.22.5" + dependencies: + "@babel/helper-plugin-utils": ^7.22.5 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 3ffd7dbc425fe8132bfec118b9817572799cab1473113a635d25ab606c1f5a2341a636c04cf6b22df3813320365ed5a965b5eeb3192320a10e4cc2c137bd8bfc + languageName: node + linkType: hard + +"@babel/plugin-transform-shorthand-properties@npm:^7.22.5": + version: 7.22.5 + resolution: "@babel/plugin-transform-shorthand-properties@npm:7.22.5" + dependencies: + "@babel/helper-plugin-utils": ^7.22.5 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: a5ac902c56ea8effa99f681340ee61bac21094588f7aef0bc01dff98246651702e677552fa6d10e548c4ac22a3ffad047dd2f8c8f0540b68316c2c203e56818b + languageName: node + linkType: hard + +"@babel/plugin-transform-spread@npm:^7.22.5": + version: 7.22.5 + resolution: "@babel/plugin-transform-spread@npm:7.22.5" + dependencies: + "@babel/helper-plugin-utils": ^7.22.5 + "@babel/helper-skip-transparent-expression-wrappers": ^7.22.5 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 5587f0deb60b3dfc9b274e269031cc45ec75facccf1933ea2ea71ced9fd3ce98ed91bb36d6cd26817c14474b90ed998c5078415f0eab531caf301496ce24c95c + languageName: node + linkType: hard + +"@babel/plugin-transform-sticky-regex@npm:^7.22.5": + version: 7.22.5 + resolution: "@babel/plugin-transform-sticky-regex@npm:7.22.5" + dependencies: + "@babel/helper-plugin-utils": ^7.22.5 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 63b2c575e3e7f96c32d52ed45ee098fb7d354b35c2223b8c8e76840b32cc529ee0c0ceb5742fd082e56e91e3d82842a367ce177e82b05039af3d602c9627a729 + languageName: node + linkType: hard + +"@babel/plugin-transform-template-literals@npm:^7.22.5": + version: 7.22.5 + resolution: "@babel/plugin-transform-template-literals@npm:7.22.5" + dependencies: + "@babel/helper-plugin-utils": ^7.22.5 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 27e9bb030654cb425381c69754be4abe6a7c75b45cd7f962cd8d604b841b2f0fb7b024f2efc1c25cc53f5b16d79d5e8cfc47cacbdaa983895b3aeefa3e7e24ff + languageName: node + linkType: hard + +"@babel/plugin-transform-typeof-symbol@npm:^7.22.5": + version: 7.22.5 + resolution: "@babel/plugin-transform-typeof-symbol@npm:7.22.5" + dependencies: + "@babel/helper-plugin-utils": ^7.22.5 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 82a53a63ffc3010b689ca9a54e5f53b2718b9f4b4a9818f36f9b7dba234f38a01876680553d2716a645a61920b5e6e4aaf8d4a0064add379b27ca0b403049512 + languageName: node + linkType: hard + +"@babel/plugin-transform-unicode-escapes@npm:^7.22.5": + version: 7.22.5 + resolution: "@babel/plugin-transform-unicode-escapes@npm:7.22.5" + dependencies: + "@babel/helper-plugin-utils": ^7.22.5 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: da5e85ab3bb33a75cbf6181bfd236b208dc934702fd304db127232f17b4e0f42c6d3f238de8589470b4190906967eea8ca27adf3ae9d8ee4de2a2eae906ed186 + languageName: node + linkType: hard + +"@babel/plugin-transform-unicode-property-regex@npm:^7.22.5": + version: 7.22.5 + resolution: "@babel/plugin-transform-unicode-property-regex@npm:7.22.5" + dependencies: + "@babel/helper-create-regexp-features-plugin": ^7.22.5 + "@babel/helper-plugin-utils": ^7.22.5 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 2495e5f663cb388e3d888b4ba3df419ac436a5012144ac170b622ddfc221f9ea9bdba839fa2bc0185cb776b578030666406452ec7791cbf0e7a3d4c88ae9574c + languageName: node + linkType: hard + +"@babel/plugin-transform-unicode-regex@npm:^7.22.5": + version: 7.22.5 + resolution: "@babel/plugin-transform-unicode-regex@npm:7.22.5" + dependencies: + "@babel/helper-create-regexp-features-plugin": ^7.22.5 + "@babel/helper-plugin-utils": ^7.22.5 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 6b5d1404c8c623b0ec9bd436c00d885a17d6a34f3f2597996343ddb9d94f6379705b21582dfd4cec2c47fd34068872e74ab6b9580116c0566b3f9447e2a7fa06 + languageName: node + linkType: hard + +"@babel/plugin-transform-unicode-sets-regex@npm:^7.22.5": + version: 7.22.5 + resolution: "@babel/plugin-transform-unicode-sets-regex@npm:7.22.5" + dependencies: + "@babel/helper-create-regexp-features-plugin": ^7.22.5 + "@babel/helper-plugin-utils": ^7.22.5 + peerDependencies: + "@babel/core": ^7.0.0 + checksum: c042070f980b139547f8b0179efbc049ac5930abec7fc26ed7a41d89a048d8ab17d362200e204b6f71c3c20d6991a0e74415e1a412a49adc8131c2a40c04822e + languageName: node + linkType: hard + +"@babel/preset-env@npm:^7.10.2": + version: 7.22.5 + resolution: "@babel/preset-env@npm:7.22.5" + dependencies: + "@babel/compat-data": ^7.22.5 + "@babel/helper-compilation-targets": ^7.22.5 + "@babel/helper-plugin-utils": ^7.22.5 + "@babel/helper-validator-option": ^7.22.5 + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": ^7.22.5 + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": ^7.22.5 + "@babel/plugin-proposal-private-property-in-object": 7.21.0-placeholder-for-preset-env.2 + "@babel/plugin-syntax-async-generators": ^7.8.4 + "@babel/plugin-syntax-class-properties": ^7.12.13 + "@babel/plugin-syntax-class-static-block": ^7.14.5 + "@babel/plugin-syntax-dynamic-import": ^7.8.3 + "@babel/plugin-syntax-export-namespace-from": ^7.8.3 + "@babel/plugin-syntax-import-assertions": ^7.22.5 + "@babel/plugin-syntax-import-attributes": ^7.22.5 + "@babel/plugin-syntax-import-meta": ^7.10.4 + "@babel/plugin-syntax-json-strings": ^7.8.3 + "@babel/plugin-syntax-logical-assignment-operators": ^7.10.4 + "@babel/plugin-syntax-nullish-coalescing-operator": ^7.8.3 + "@babel/plugin-syntax-numeric-separator": ^7.10.4 + "@babel/plugin-syntax-object-rest-spread": ^7.8.3 + "@babel/plugin-syntax-optional-catch-binding": ^7.8.3 + "@babel/plugin-syntax-optional-chaining": ^7.8.3 + "@babel/plugin-syntax-private-property-in-object": ^7.14.5 + "@babel/plugin-syntax-top-level-await": ^7.14.5 + "@babel/plugin-syntax-unicode-sets-regex": ^7.18.6 + "@babel/plugin-transform-arrow-functions": ^7.22.5 + "@babel/plugin-transform-async-generator-functions": ^7.22.5 + "@babel/plugin-transform-async-to-generator": ^7.22.5 + "@babel/plugin-transform-block-scoped-functions": ^7.22.5 + "@babel/plugin-transform-block-scoping": ^7.22.5 + "@babel/plugin-transform-class-properties": ^7.22.5 + "@babel/plugin-transform-class-static-block": ^7.22.5 + "@babel/plugin-transform-classes": ^7.22.5 + "@babel/plugin-transform-computed-properties": ^7.22.5 + "@babel/plugin-transform-destructuring": ^7.22.5 + "@babel/plugin-transform-dotall-regex": ^7.22.5 + "@babel/plugin-transform-duplicate-keys": ^7.22.5 + "@babel/plugin-transform-dynamic-import": ^7.22.5 + "@babel/plugin-transform-exponentiation-operator": ^7.22.5 + "@babel/plugin-transform-export-namespace-from": ^7.22.5 + "@babel/plugin-transform-for-of": ^7.22.5 + "@babel/plugin-transform-function-name": ^7.22.5 + "@babel/plugin-transform-json-strings": ^7.22.5 + "@babel/plugin-transform-literals": ^7.22.5 + "@babel/plugin-transform-logical-assignment-operators": ^7.22.5 + "@babel/plugin-transform-member-expression-literals": ^7.22.5 + "@babel/plugin-transform-modules-amd": ^7.22.5 + "@babel/plugin-transform-modules-commonjs": ^7.22.5 + "@babel/plugin-transform-modules-systemjs": ^7.22.5 + "@babel/plugin-transform-modules-umd": ^7.22.5 + "@babel/plugin-transform-named-capturing-groups-regex": ^7.22.5 + "@babel/plugin-transform-new-target": ^7.22.5 + "@babel/plugin-transform-nullish-coalescing-operator": ^7.22.5 + "@babel/plugin-transform-numeric-separator": ^7.22.5 + "@babel/plugin-transform-object-rest-spread": ^7.22.5 + "@babel/plugin-transform-object-super": ^7.22.5 + "@babel/plugin-transform-optional-catch-binding": ^7.22.5 + "@babel/plugin-transform-optional-chaining": ^7.22.5 + "@babel/plugin-transform-parameters": ^7.22.5 + "@babel/plugin-transform-private-methods": ^7.22.5 + "@babel/plugin-transform-private-property-in-object": ^7.22.5 + "@babel/plugin-transform-property-literals": ^7.22.5 + "@babel/plugin-transform-regenerator": ^7.22.5 + "@babel/plugin-transform-reserved-words": ^7.22.5 + "@babel/plugin-transform-shorthand-properties": ^7.22.5 + "@babel/plugin-transform-spread": ^7.22.5 + "@babel/plugin-transform-sticky-regex": ^7.22.5 + "@babel/plugin-transform-template-literals": ^7.22.5 + "@babel/plugin-transform-typeof-symbol": ^7.22.5 + "@babel/plugin-transform-unicode-escapes": ^7.22.5 + "@babel/plugin-transform-unicode-property-regex": ^7.22.5 + "@babel/plugin-transform-unicode-regex": ^7.22.5 + "@babel/plugin-transform-unicode-sets-regex": ^7.22.5 + "@babel/preset-modules": ^0.1.5 + "@babel/types": ^7.22.5 + babel-plugin-polyfill-corejs2: ^0.4.3 + babel-plugin-polyfill-corejs3: ^0.8.1 + babel-plugin-polyfill-regenerator: ^0.5.0 + core-js-compat: ^3.30.2 + semver: ^6.3.0 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 6d9d09010ababef2ab48c8830770b2a8f45d6cce51db0924a98b0d95a5b1248a99ee07ee61cb5446d8b05b562db99a8af30b3ed194546419fb9b2889b8fd1ed3 + languageName: node + linkType: hard + +"@babel/preset-modules@npm:^0.1.5": + version: 0.1.5 + resolution: "@babel/preset-modules@npm:0.1.5" + dependencies: + "@babel/helper-plugin-utils": ^7.0.0 + "@babel/plugin-proposal-unicode-property-regex": ^7.4.4 + "@babel/plugin-transform-dotall-regex": ^7.4.4 + "@babel/types": ^7.4.4 + esutils: ^2.0.2 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 8430e0e9e9d520b53e22e8c4c6a5a080a12b63af6eabe559c2310b187bd62ae113f3da82ba33e9d1d0f3230930ca702843aae9dd226dec51f7d7114dc1f51c10 + languageName: node + linkType: hard + +"@babel/regjsgen@npm:^0.8.0": + version: 0.8.0 + resolution: "@babel/regjsgen@npm:0.8.0" + checksum: 89c338fee774770e5a487382170711014d49a68eb281e74f2b5eac88f38300a4ad545516a7786a8dd5702e9cf009c94c2f582d200f077ac5decd74c56b973730 + languageName: node + linkType: hard + +"@babel/runtime@npm:^7.8.4": + version: 7.21.0 + resolution: "@babel/runtime@npm:7.21.0" + dependencies: + regenerator-runtime: ^0.13.11 + checksum: 7b33e25bfa9e0e1b9e8828bb61b2d32bdd46b41b07ba7cb43319ad08efc6fda8eb89445193e67d6541814627df0ca59122c0ea795e412b99c5183a0540d338ab + languageName: node + linkType: hard + +"@babel/template@npm:^7.22.5, @babel/template@npm:^7.3.3": + version: 7.22.5 + resolution: "@babel/template@npm:7.22.5" + dependencies: + "@babel/code-frame": ^7.22.5 + "@babel/parser": ^7.22.5 + "@babel/types": ^7.22.5 + checksum: c5746410164039aca61829cdb42e9a55410f43cace6f51ca443313f3d0bdfa9a5a330d0b0df73dc17ef885c72104234ae05efede37c1cc8a72dc9f93425977a3 + languageName: node + linkType: hard + +"@babel/traverse@npm:^7.22.5": + version: 7.22.5 + resolution: "@babel/traverse@npm:7.22.5" + dependencies: + "@babel/code-frame": ^7.22.5 + "@babel/generator": ^7.22.5 + "@babel/helper-environment-visitor": ^7.22.5 + "@babel/helper-function-name": ^7.22.5 + "@babel/helper-hoist-variables": ^7.22.5 + "@babel/helper-split-export-declaration": ^7.22.5 + "@babel/parser": ^7.22.5 + "@babel/types": ^7.22.5 + debug: ^4.1.0 + globals: ^11.1.0 + checksum: 560931422dc1761f2df723778dcb4e51ce0d02e560cf2caa49822921578f49189a5a7d053b78a32dca33e59be886a6b2200a6e24d4ae9b5086ca0ba803815694 + languageName: node + linkType: hard + +"@babel/types@npm:^7.0.0, @babel/types@npm:^7.20.7, @babel/types@npm:^7.22.5, @babel/types@npm:^7.3.0, @babel/types@npm:^7.3.3, @babel/types@npm:^7.4.4, @babel/types@npm:^7.8.3": + version: 7.22.5 + resolution: "@babel/types@npm:7.22.5" + dependencies: + "@babel/helper-string-parser": ^7.22.5 + "@babel/helper-validator-identifier": ^7.22.5 + to-fast-properties: ^2.0.0 + checksum: c13a9c1dc7d2d1a241a2f8363540cb9af1d66e978e8984b400a20c4f38ba38ca29f06e26a0f2d49a70bad9e57615dac09c35accfddf1bb90d23cd3e0a0bab892 + languageName: node + linkType: hard + +"@bcoe/v8-coverage@npm:^0.2.3": + version: 0.2.3 + resolution: "@bcoe/v8-coverage@npm:0.2.3" + checksum: 850f9305536d0f2bd13e9e0881cb5f02e4f93fad1189f7b2d4bebf694e3206924eadee1068130d43c11b750efcc9405f88a8e42ef098b6d75239c0f047de1a27 + languageName: node + linkType: hard + +"@codemirror/autocomplete@npm:^6.0.0, @codemirror/autocomplete@npm:^6.3.2, @codemirror/autocomplete@npm:^6.5.1": + version: 6.8.0 + resolution: "@codemirror/autocomplete@npm:6.8.0" + dependencies: + "@codemirror/language": ^6.0.0 + "@codemirror/state": ^6.0.0 + "@codemirror/view": ^6.6.0 + "@lezer/common": ^1.0.0 + peerDependencies: + "@codemirror/language": ^6.0.0 + "@codemirror/state": ^6.0.0 + "@codemirror/view": ^6.0.0 + "@lezer/common": ^1.0.0 + checksum: b251a21065a954be7a4a9cf6fd1dce6027bd79ac7006728c0fde364b50c75ee4079bd53acf9890fdfdca78453c863f0c010010c26010cd9acdede3480273ad23 + languageName: node + linkType: hard + +"@codemirror/commands@npm:^6.2.3": + version: 6.2.4 + resolution: "@codemirror/commands@npm:6.2.4" + dependencies: + "@codemirror/language": ^6.0.0 + "@codemirror/state": ^6.2.0 + "@codemirror/view": ^6.0.0 + "@lezer/common": ^1.0.0 + checksum: 468895fa19ff0554181b698c81f850820de5c0289cab92c44392fb127286f09ca72b921d6ea4353b70b616a4fd0c3667d86b6f917202a3ad2e196eb7b581f7b6 + languageName: node + linkType: hard + +"@codemirror/lang-cpp@npm:^6.0.2": + version: 6.0.2 + resolution: "@codemirror/lang-cpp@npm:6.0.2" + dependencies: + "@codemirror/language": ^6.0.0 + "@lezer/cpp": ^1.0.0 + checksum: bb9eba482cca80037ce30c7b193cf45eff19ccbb773764fddf2071756468ecc25aa53c777c943635054f89095b0247b9b50c339e107e41e68d34d12a7295f9a9 + languageName: node + linkType: hard + +"@codemirror/lang-css@npm:^6.0.0, @codemirror/lang-css@npm:^6.1.1": + version: 6.2.0 + resolution: "@codemirror/lang-css@npm:6.2.0" + dependencies: + "@codemirror/autocomplete": ^6.0.0 + "@codemirror/language": ^6.0.0 + "@codemirror/state": ^6.0.0 + "@lezer/common": ^1.0.2 + "@lezer/css": ^1.0.0 + checksum: d824f169083613b63f04992c24d3fecd45c718cd3deb9da3f332dd3a889a762d05ea812e31ddf7ee4b661722f8c8b49676515cb98609067c53e25ac8b469a5e4 + languageName: node + linkType: hard + +"@codemirror/lang-html@npm:^6.0.0, @codemirror/lang-html@npm:^6.4.3": + version: 6.4.4 + resolution: "@codemirror/lang-html@npm:6.4.4" + dependencies: + "@codemirror/autocomplete": ^6.0.0 + "@codemirror/lang-css": ^6.0.0 + "@codemirror/lang-javascript": ^6.0.0 + "@codemirror/language": ^6.4.0 + "@codemirror/state": ^6.0.0 + "@codemirror/view": ^6.2.2 + "@lezer/common": ^1.0.0 + "@lezer/css": ^1.1.0 + "@lezer/html": ^1.3.0 + checksum: 99693fee5392c85b0974c4cfd015aa9ba6e015baf8abbddfbb1f5f8c4801e78c3d053d8b19e1dafe3d913b2902e97ed6c95d8a237cd496e8fbcc1548cebe6485 + languageName: node + linkType: hard + +"@codemirror/lang-java@npm:^6.0.1": + version: 6.0.1 + resolution: "@codemirror/lang-java@npm:6.0.1" + dependencies: + "@codemirror/language": ^6.0.0 + "@lezer/java": ^1.0.0 + checksum: 4679104683cbffcd224ac04c7e5d144b787494697b26470b07017259035b7bb3fa62609d9a61bfbc566f1756d9f972f9f26d96a3c1362dd48881c1172f9a914d + languageName: node + linkType: hard + +"@codemirror/lang-javascript@npm:^6.0.0, @codemirror/lang-javascript@npm:^6.1.7": + version: 6.1.9 + resolution: "@codemirror/lang-javascript@npm:6.1.9" + dependencies: + "@codemirror/autocomplete": ^6.0.0 + "@codemirror/language": ^6.6.0 + "@codemirror/lint": ^6.0.0 + "@codemirror/state": ^6.0.0 + "@codemirror/view": ^6.0.0 + "@lezer/common": ^1.0.0 + "@lezer/javascript": ^1.0.0 + checksum: 6c79b51c61d37b3f4dde6312df02183045c31f055e5cf8550b497f39798b823b4e380a641a2cfc97f3f26fd4e89194258d8ef741c42acd72b3f2e18257b427a5 + languageName: node + linkType: hard + +"@codemirror/lang-json@npm:^6.0.1": + version: 6.0.1 + resolution: "@codemirror/lang-json@npm:6.0.1" + dependencies: + "@codemirror/language": ^6.0.0 + "@lezer/json": ^1.0.0 + checksum: e9e87d50ff7b81bd56a6ab50740b1dd54e9a93f1be585e1d59d0642e2148842ea1528ac7b7221eb4ddc7fe84bbc28065144cc3ab86f6e06c6aeb2d4b4e62acf1 + languageName: node + linkType: hard + +"@codemirror/lang-markdown@npm:^6.1.1": + version: 6.1.1 + resolution: "@codemirror/lang-markdown@npm:6.1.1" + dependencies: + "@codemirror/lang-html": ^6.0.0 + "@codemirror/language": ^6.3.0 + "@codemirror/state": ^6.0.0 + "@codemirror/view": ^6.0.0 + "@lezer/common": ^1.0.0 + "@lezer/markdown": ^1.0.0 + checksum: db891dad10a8ea8db17d0a9222774389794cb0957b784e3f154bf27ab4a9be89a28ad4c2f6abf7d829115c3ce46694a2816b61723a5d5776c1d75d566ce016c8 + languageName: node + linkType: hard + +"@codemirror/lang-php@npm:^6.0.1": + version: 6.0.1 + resolution: "@codemirror/lang-php@npm:6.0.1" + dependencies: + "@codemirror/lang-html": ^6.0.0 + "@codemirror/language": ^6.0.0 + "@codemirror/state": ^6.0.0 + "@lezer/common": ^1.0.0 + "@lezer/php": ^1.0.0 + checksum: c003a29a426486453fdfddbf7302982fa2aa7f059bf6f1ce4cbf08341b0162eee5e2f50e0d71c418dcd358491631780156d846fe352754d042576172c5d86721 + languageName: node + linkType: hard + +"@codemirror/lang-python@npm:^6.1.3": + version: 6.1.3 + resolution: "@codemirror/lang-python@npm:6.1.3" + dependencies: + "@codemirror/autocomplete": ^6.3.2 + "@codemirror/language": ^6.8.0 + "@lezer/python": ^1.1.4 + checksum: 65a0276a4503e4e3b70dd28d1c93ef472632b6d2c4bf3ae92d305d14ee8cf60b0bbbf62d5ceb51294de9598d9e2d42eafcde26f317ee7b90d0a11dfa863c1d1a + languageName: node + linkType: hard + +"@codemirror/lang-rust@npm:^6.0.1": + version: 6.0.1 + resolution: "@codemirror/lang-rust@npm:6.0.1" + dependencies: + "@codemirror/language": ^6.0.0 + "@lezer/rust": ^1.0.0 + checksum: 8a439944cb22159b0b3465ca4fa4294c69843219d5d30e278ae6df8e48f30a7a9256129723c025ec9b5e694d31a3560fb004300b125ffcd81c22d13825845170 + languageName: node + linkType: hard + +"@codemirror/lang-sql@npm:^6.4.1": + version: 6.5.0 + resolution: "@codemirror/lang-sql@npm:6.5.0" + dependencies: + "@codemirror/autocomplete": ^6.0.0 + "@codemirror/language": ^6.0.0 + "@codemirror/state": ^6.0.0 + "@lezer/highlight": ^1.0.0 + "@lezer/lr": ^1.0.0 + checksum: 5bc73293d85f3892633703f277787336c00135011b14ca34a3590975a02c5ec1d6826d201d827e3dfc1d3427e28d23f36b1ef4fd69fc5d79c98290030c11dad5 + languageName: node + linkType: hard + +"@codemirror/lang-wast@npm:^6.0.1": + version: 6.0.1 + resolution: "@codemirror/lang-wast@npm:6.0.1" + dependencies: + "@codemirror/language": ^6.0.0 + "@lezer/highlight": ^1.0.0 + "@lezer/lr": ^1.0.0 + checksum: 600d98d3ea6a4e99292244ed707e39a2abd9f3abf62cfeff5c819a0cc0c7e86b8c5b91e91c1b7ea21233d9ea09c41abe61d8a40b2547bb5db74239c6df857934 + languageName: node + linkType: hard + +"@codemirror/lang-xml@npm:^6.0.2": + version: 6.0.2 + resolution: "@codemirror/lang-xml@npm:6.0.2" + dependencies: + "@codemirror/autocomplete": ^6.0.0 + "@codemirror/language": ^6.4.0 + "@codemirror/state": ^6.0.0 + "@lezer/common": ^1.0.0 + "@lezer/xml": ^1.0.0 + checksum: e156ecafaa87e9b6ef4ab6812ccd00d8f3c6cb81f232837636b36336d80513b61936dfee6f4f6800574f236208b61e95a2abcb997cdcd7366585a6b796e0e13b + languageName: node + linkType: hard + +"@codemirror/language@npm:^6.0.0, @codemirror/language@npm:^6.3.0, @codemirror/language@npm:^6.4.0, @codemirror/language@npm:^6.6.0, @codemirror/language@npm:^6.8.0": + version: 6.8.0 + resolution: "@codemirror/language@npm:6.8.0" + dependencies: + "@codemirror/state": ^6.0.0 + "@codemirror/view": ^6.0.0 + "@lezer/common": ^1.0.0 + "@lezer/highlight": ^1.0.0 + "@lezer/lr": ^1.0.0 + style-mod: ^4.0.0 + checksum: 64408d996641931fa4c6b892e17ee1fdaee0f63d3d84c019a6ea7b1e6d1c774f92357b95c2ebaed60545062b795b72d0a058c03578b2bf4023c87726e97b5d2f + languageName: node + linkType: hard + +"@codemirror/legacy-modes@npm:^6.3.2": + version: 6.3.2 + resolution: "@codemirror/legacy-modes@npm:6.3.2" + dependencies: + "@codemirror/language": ^6.0.0 + checksum: fa5f5477fb9e19267251e2ecd3de8c1a4c2512813555bb60111dce3951f2c3f6080a2985a573b7542534ba1d2c34115f7e39ee23fdf8f6f81db6f8ce447c1efc + languageName: node + linkType: hard + +"@codemirror/lint@npm:^6.0.0, @codemirror/lint@npm:^6.4.0": + version: 6.4.0 + resolution: "@codemirror/lint@npm:6.4.0" + dependencies: + "@codemirror/state": ^6.0.0 + "@codemirror/view": ^6.0.0 + crelt: ^1.0.5 + checksum: ba15f7dd87afbceafaa0b68f94b0d53727e4aacca7a81a4ed3278706df5787fdf18cd3f0d807a136f902b2fc2296bf3490462fd543d1d4ced17a0d8c171820fd + languageName: node + linkType: hard + +"@codemirror/search@npm:^6.3.0": + version: 6.5.0 + resolution: "@codemirror/search@npm:6.5.0" + dependencies: + "@codemirror/state": ^6.0.0 + "@codemirror/view": ^6.0.0 + crelt: ^1.0.5 + checksum: 2e9f2344b7dbd4bad79058c105d8cbd02b2bf94c27495310f0e3b6e999010aa080dceea47ef46e35439cc9e131b47c46f7d2eda700ef491b5f2f34bbc8e145ab + languageName: node + linkType: hard + +"@codemirror/state@npm:^6.0.0, @codemirror/state@npm:^6.1.4, @codemirror/state@npm:^6.2.0": + version: 6.2.1 + resolution: "@codemirror/state@npm:6.2.1" + checksum: d12a321d0471b264b9d3259042bff913a8b939e8d28d408ff452004538a71ca9d5329df3f8a1d8a9183f5b42a7ef5b200737bcab1065714f5ae8e0a5ba9d59d3 + languageName: node + linkType: hard + +"@codemirror/view@npm:^6.0.0, @codemirror/view@npm:^6.2.2, @codemirror/view@npm:^6.6.0, @codemirror/view@npm:^6.9.6": + version: 6.13.2 + resolution: "@codemirror/view@npm:6.13.2" + dependencies: + "@codemirror/state": ^6.1.4 + style-mod: ^4.0.0 + w3c-keyname: ^2.2.4 + checksum: db0d638fbbe2f9a832674f06512ca55cdb7576a265c01ab8a7b6715d2a50ddf53200f597637b146adebe1df51255fe5bd2d2c74cf1fa539b0434764c0550d3a5 + languageName: node + linkType: hard + +"@discoveryjs/json-ext@npm:^0.5.0": + version: 0.5.7 + resolution: "@discoveryjs/json-ext@npm:0.5.7" + checksum: 2176d301cc258ea5c2324402997cf8134ebb212469c0d397591636cea8d3c02f2b3cf9fd58dcb748c7a0dade77ebdc1b10284fa63e608c033a1db52fddc69918 + languageName: node + linkType: hard + +"@eslint/eslintrc@npm:^1.3.3": + version: 1.3.3 + resolution: "@eslint/eslintrc@npm:1.3.3" + dependencies: + ajv: ^6.12.4 + debug: ^4.3.2 + espree: ^9.4.0 + globals: ^13.15.0 + ignore: ^5.2.0 + import-fresh: ^3.2.1 + js-yaml: ^4.1.0 + minimatch: ^3.1.2 + strip-json-comments: ^3.1.1 + checksum: f03e9d6727efd3e0719da2051ea80c0c73d20e28c171121527dbb868cd34232ca9c1d0525a66e517a404afea26624b1e47895b6a92474678418c2f50c9566694 + languageName: node + linkType: hard + +"@fortawesome/fontawesome-free@npm:^5.12.0": + version: 5.15.4 + resolution: "@fortawesome/fontawesome-free@npm:5.15.4" + checksum: 32281c3df4075290d9a96dfc22f72fadb3da7055d4117e48d34046b8c98032a55fa260ae351b0af5d6f6fb57a2f5d79a4abe52af456da35195f7cb7dda27b4a2 + languageName: node + linkType: hard + +"@gar/promisify@npm:^1.0.1, @gar/promisify@npm:^1.1.3": + version: 1.1.3 + resolution: "@gar/promisify@npm:1.1.3" + checksum: 4059f790e2d07bf3c3ff3e0fec0daa8144fe35c1f6e0111c9921bd32106adaa97a4ab096ad7dab1e28ee6a9060083c4d1a4ada42a7f5f3f7a96b8812e2b757c1 + languageName: node + linkType: hard + +"@google-cloud/bigquery@npm:^5.9.0": + version: 5.12.0 + resolution: "@google-cloud/bigquery@npm:5.12.0" + dependencies: + "@google-cloud/common": ^3.9.0 + "@google-cloud/paginator": ^3.0.0 + "@google-cloud/promisify": ^2.0.0 + arrify: ^2.0.1 + big.js: ^6.0.0 + duplexify: ^4.0.0 + extend: ^3.0.2 + is: ^3.3.0 + p-event: ^4.1.0 + readable-stream: ^3.6.0 + stream-events: ^1.0.5 + uuid: ^8.0.0 + checksum: 959d94cb59b188f1e2b6c6129946ab8b2aa5bf5f904cc092145b596c38d24be4871e3acc92b4ddb404713b3c58116ada64466649c8e2ef534f9cc7f3d39904a8 + languageName: node + linkType: hard + +"@google-cloud/common@npm:^3.9.0": + version: 3.10.0 + resolution: "@google-cloud/common@npm:3.10.0" + dependencies: + "@google-cloud/projectify": ^2.0.0 + "@google-cloud/promisify": ^2.0.0 + arrify: ^2.0.1 + duplexify: ^4.1.1 + ent: ^2.2.0 + extend: ^3.0.2 + google-auth-library: ^7.14.0 + retry-request: ^4.2.2 + teeny-request: ^7.0.0 + checksum: 833b593777425c4193620e94d5eba6b63065b35681b9a45d3c77fbfcf728844a1cc15ec383c7dabb9926d3d40a1e96f6a7386f26939cf69575671aff91e81717 + languageName: node + linkType: hard + +"@google-cloud/paginator@npm:^3.0.0": + version: 3.0.7 + resolution: "@google-cloud/paginator@npm:3.0.7" + dependencies: + arrify: ^2.0.0 + extend: ^3.0.2 + checksum: bdecce8a894a0c7f47f13d0e42b2fa142098e1dd34ce571b7216ad624057214baf9066ecf091501b3770da9d7be20b983eda30185c8c6596192cb748f8a0090c + languageName: node + linkType: hard + +"@google-cloud/projectify@npm:^2.0.0": + version: 2.1.1 + resolution: "@google-cloud/projectify@npm:2.1.1" + checksum: 4e773269b773068e86df9b4f9119948d9bda770a1be33eeda77a9034d795d8e07718c1f6ee048e1f2329f40f8d2eee7149d7a4692436cfbd3fbea4363fdac05b + languageName: node + linkType: hard + +"@google-cloud/promisify@npm:^2.0.0": + version: 2.0.4 + resolution: "@google-cloud/promisify@npm:2.0.4" + checksum: 51a9fb6c43e5342d995435b3660afe8d7a498ed65e6f5fef6492cc2ac2b494c1ec89e8f220b8a8e23f1c90334b7db5169c292f0a317e971d57366426a2420247 + languageName: node + linkType: hard + +"@humanwhocodes/config-array@npm:^0.11.6": + version: 0.11.7 + resolution: "@humanwhocodes/config-array@npm:0.11.7" + dependencies: + "@humanwhocodes/object-schema": ^1.2.1 + debug: ^4.1.1 + minimatch: ^3.0.5 + checksum: cf506dc45d9488af7fbf108ea6ac2151ba1a25e6d2b94b9b4fc36d2c1e4099b89ff560296dbfa13947e44604d4ca4a90d97a4fb167370bf8dd01a6ca2b6d83ac + languageName: node + linkType: hard + +"@humanwhocodes/module-importer@npm:^1.0.1": + version: 1.0.1 + resolution: "@humanwhocodes/module-importer@npm:1.0.1" + checksum: 0fd22007db8034a2cdf2c764b140d37d9020bbfce8a49d3ec5c05290e77d4b0263b1b972b752df8c89e5eaa94073408f2b7d977aed131faf6cf396ebb5d7fb61 + languageName: node + linkType: hard + +"@humanwhocodes/object-schema@npm:^1.2.1": + version: 1.2.1 + resolution: "@humanwhocodes/object-schema@npm:1.2.1" + checksum: a824a1ec31591231e4bad5787641f59e9633827d0a2eaae131a288d33c9ef0290bd16fda8da6f7c0fcb014147865d12118df10db57f27f41e20da92369fcb3f1 + languageName: node + linkType: hard + +"@hutson/parse-repository-url@npm:^3.0.0": + version: 3.0.2 + resolution: "@hutson/parse-repository-url@npm:3.0.2" + checksum: 39992c5f183c5ca3d761d6ed9dfabcb79b5f3750bf1b7f3532e1dc439ca370138bbd426ee250fdaba460bc948e6761fbefd484b8f4f36885d71ded96138340d1 + languageName: node + linkType: hard + +"@isaacs/cliui@npm:^8.0.2": + version: 8.0.2 + resolution: "@isaacs/cliui@npm:8.0.2" + 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" + checksum: 4a473b9b32a7d4d3cfb7a614226e555091ff0c5a29a1734c28c72a182c2f6699b26fc6b5c2131dfd841e86b185aea714c72201d7c98c2fba5f17709333a67aeb + languageName: node + linkType: hard + +"@isaacs/string-locale-compare@npm:^1.1.0": + version: 1.1.0 + resolution: "@isaacs/string-locale-compare@npm:1.1.0" + checksum: 7287da5d11497b82c542d3c2abe534808015be4f4883e71c26853277b5456f6bbe4108535db847a29f385ad6dc9318ffb0f55ee79bb5f39993233d7dccf8751d + languageName: node + linkType: hard + +"@istanbuljs/load-nyc-config@npm:^1.0.0": + version: 1.1.0 + resolution: "@istanbuljs/load-nyc-config@npm:1.1.0" + 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 + checksum: d578da5e2e804d5c93228450a1380e1a3c691de4953acc162f387b717258512a3e07b83510a936d9fab03eac90817473917e24f5d16297af3867f59328d58568 + languageName: node + linkType: hard + +"@istanbuljs/schema@npm:^0.1.2": + version: 0.1.3 + resolution: "@istanbuljs/schema@npm:0.1.3" + checksum: 5282759d961d61350f33d9118d16bcaed914ebf8061a52f4fa474b2cb08720c9c81d165e13b82f2e5a8a212cc5af482f0c6fc1ac27b9e067e5394c9a6ed186c9 + languageName: node + linkType: hard + +"@jest/console@npm:^29.6.1": + version: 29.6.1 + resolution: "@jest/console@npm:29.6.1" + dependencies: + "@jest/types": ^29.6.1 + "@types/node": "*" + chalk: ^4.0.0 + jest-message-util: ^29.6.1 + jest-util: ^29.6.1 + slash: ^3.0.0 + checksum: d0ab23a00947bfb4bff8c0a7e5a7afd16519de16dde3fe7e77b9f13e794c6df7043ecf7fcdde66ac0d2b5fb3262e9cab3d92eaf61f89a12d3b8e3602e06a9902 + languageName: node + linkType: hard + +"@jest/core@npm:^29.6.1": + version: 29.6.1 + resolution: "@jest/core@npm:29.6.1" + dependencies: + "@jest/console": ^29.6.1 + "@jest/reporters": ^29.6.1 + "@jest/test-result": ^29.6.1 + "@jest/transform": ^29.6.1 + "@jest/types": ^29.6.1 + "@types/node": "*" + ansi-escapes: ^4.2.1 + chalk: ^4.0.0 + ci-info: ^3.2.0 + exit: ^0.1.2 + graceful-fs: ^4.2.9 + jest-changed-files: ^29.5.0 + jest-config: ^29.6.1 + jest-haste-map: ^29.6.1 + jest-message-util: ^29.6.1 + jest-regex-util: ^29.4.3 + jest-resolve: ^29.6.1 + jest-resolve-dependencies: ^29.6.1 + jest-runner: ^29.6.1 + jest-runtime: ^29.6.1 + jest-snapshot: ^29.6.1 + jest-util: ^29.6.1 + jest-validate: ^29.6.1 + jest-watcher: ^29.6.1 + micromatch: ^4.0.4 + pretty-format: ^29.6.1 + slash: ^3.0.0 + strip-ansi: ^6.0.0 + peerDependencies: + node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 + peerDependenciesMeta: + node-notifier: + optional: true + checksum: 736dcc90c6c58dd9e1d2da122103b851187719ce3b3d4167689c63e68252632cd817712955b52ddaa648eba9c6f98f86cd58677325f0db4185f76899c64d7dac + languageName: node + linkType: hard + +"@jest/environment@npm:^29.5.0, @jest/environment@npm:^29.6.1": + version: 29.6.1 + resolution: "@jest/environment@npm:29.6.1" + dependencies: + "@jest/fake-timers": ^29.6.1 + "@jest/types": ^29.6.1 + "@types/node": "*" + jest-mock: ^29.6.1 + checksum: fb671f91f27e7aa1ba04983ef87a83f0794a597aba0a57d08cbb1fcb484c2aedc2201e99f85fafe27aec9be78af6f2d1d7e6ea88267938992a1d0f9d4615f5b2 + languageName: node + linkType: hard + +"@jest/expect-utils@npm:^29.6.1": + version: 29.6.1 + resolution: "@jest/expect-utils@npm:29.6.1" + dependencies: + jest-get-type: ^29.4.3 + checksum: 037ee017eca62f7b45e1465fb5c6f9e92d5709a9ac716b8bff0bd294240a54de734e8f968fb69309cc4aef6c83b9552d5a821f3b18371af394bf04783859d706 + languageName: node + linkType: hard + +"@jest/expect@npm:^29.6.1": + version: 29.6.1 + resolution: "@jest/expect@npm:29.6.1" + dependencies: + expect: ^29.6.1 + jest-snapshot: ^29.6.1 + checksum: 5c56977b3cc8489744d97d9dc2dcb196c1dfecc83a058a7ef0fd4f63d68cf120a23d27669272d1e1b184fb4337b85e4ac1fc7f886e3988fdf243d42d73973eac + languageName: node + linkType: hard + +"@jest/fake-timers@npm:^29.5.0, @jest/fake-timers@npm:^29.6.1": + version: 29.6.1 + resolution: "@jest/fake-timers@npm:29.6.1" + dependencies: + "@jest/types": ^29.6.1 + "@sinonjs/fake-timers": ^10.0.2 + "@types/node": "*" + jest-message-util: ^29.6.1 + jest-mock: ^29.6.1 + jest-util: ^29.6.1 + checksum: 86991276944b7d6c2ada3703a272517f5f8f2f4e2af1fe26065f6db1dac4dc6299729a88c46bcb781dcc1b20504c1d4bbd8119fd8a0838ac81a9a4b5d2c8e429 + languageName: node + linkType: hard + +"@jest/globals@npm:^29.6.1": + version: 29.6.1 + resolution: "@jest/globals@npm:29.6.1" + dependencies: + "@jest/environment": ^29.6.1 + "@jest/expect": ^29.6.1 + "@jest/types": ^29.6.1 + jest-mock: ^29.6.1 + checksum: fcca0b970a8b4894a1cdff0f500a86b45609e72c0a4319875e9504237b839df1a46c44d2f1362c6d87fdc7a05928edcc4b5a3751c9e6648dd70a761cdab64c94 + languageName: node + linkType: hard + +"@jest/reporters@npm:^29.6.1": + version: 29.6.1 + resolution: "@jest/reporters@npm:29.6.1" + dependencies: + "@bcoe/v8-coverage": ^0.2.3 + "@jest/console": ^29.6.1 + "@jest/test-result": ^29.6.1 + "@jest/transform": ^29.6.1 + "@jest/types": ^29.6.1 + "@jridgewell/trace-mapping": ^0.3.18 + "@types/node": "*" + chalk: ^4.0.0 + collect-v8-coverage: ^1.0.0 + exit: ^0.1.2 + glob: ^7.1.3 + graceful-fs: ^4.2.9 + istanbul-lib-coverage: ^3.0.0 + istanbul-lib-instrument: ^5.1.0 + istanbul-lib-report: ^3.0.0 + istanbul-lib-source-maps: ^4.0.0 + istanbul-reports: ^3.1.3 + jest-message-util: ^29.6.1 + jest-util: ^29.6.1 + jest-worker: ^29.6.1 + slash: ^3.0.0 + string-length: ^4.0.1 + strip-ansi: ^6.0.0 + v8-to-istanbul: ^9.0.1 + peerDependencies: + node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 + peerDependenciesMeta: + node-notifier: + optional: true + checksum: b7dae415f3f6342b4db2671261bbee29af20a829f42135316c3dd548b9ef85290c9bb64a0e3aec4a55486596be1257ac8216a0f8d9794acd43f8b8fb686fc7e3 + languageName: node + linkType: hard + +"@jest/schemas@npm:^29.6.0": + version: 29.6.0 + resolution: "@jest/schemas@npm:29.6.0" + dependencies: + "@sinclair/typebox": ^0.27.8 + checksum: c00511c69cf89138a7d974404d3a5060af375b5a52b9c87215d91873129b382ca11c1ff25bd6d605951404bb381ddce5f8091004a61e76457da35db1f5c51365 + languageName: node + linkType: hard + +"@jest/source-map@npm:^29.6.0": + version: 29.6.0 + resolution: "@jest/source-map@npm:29.6.0" + dependencies: + "@jridgewell/trace-mapping": ^0.3.18 + callsites: ^3.0.0 + graceful-fs: ^4.2.9 + checksum: 9c6c40387410bb70b2fae8124287fc28f6bdd1b2d7f24348e8611e1bb638b404518228a4ce64a582365b589c536ae8e7ebab0126cef59a87874b71061d19783b + languageName: node + linkType: hard + +"@jest/test-result@npm:^29.6.1": + version: 29.6.1 + resolution: "@jest/test-result@npm:29.6.1" + dependencies: + "@jest/console": ^29.6.1 + "@jest/types": ^29.6.1 + "@types/istanbul-lib-coverage": ^2.0.0 + collect-v8-coverage: ^1.0.0 + checksum: 9397a3a3410c5df564e79297b1be4fe33807a6157a017a1f74b54a6ef14de1530f12b922299e822e66a82c53269da16661772bffde3d883a78c5eefd2cd6d1cc + languageName: node + linkType: hard + +"@jest/test-sequencer@npm:^29.6.1": + version: 29.6.1 + resolution: "@jest/test-sequencer@npm:29.6.1" + dependencies: + "@jest/test-result": ^29.6.1 + graceful-fs: ^4.2.9 + jest-haste-map: ^29.6.1 + slash: ^3.0.0 + checksum: f3437178b5dca0401ed2e990d8b69161442351856d56f5725e009a487f5232b51039f8829673884b9bea61c861120d08a53a36432f4a4b8aab38915a68f7000d + languageName: node + linkType: hard + +"@jest/transform@npm:^29.6.1": + version: 29.6.1 + resolution: "@jest/transform@npm:29.6.1" + dependencies: + "@babel/core": ^7.11.6 + "@jest/types": ^29.6.1 + "@jridgewell/trace-mapping": ^0.3.18 + babel-plugin-istanbul: ^6.1.1 + chalk: ^4.0.0 + convert-source-map: ^2.0.0 + fast-json-stable-stringify: ^2.1.0 + graceful-fs: ^4.2.9 + jest-haste-map: ^29.6.1 + jest-regex-util: ^29.4.3 + jest-util: ^29.6.1 + micromatch: ^4.0.4 + pirates: ^4.0.4 + slash: ^3.0.0 + write-file-atomic: ^4.0.2 + checksum: 1635cd66e4b3dbba0689ecefabc6137301756c9c12d1d23e25124dd0dd9b4a6a38653d51e825e90f74faa022152ac1eaf200591fb50417aa7e1f7d1d1c2bc11d + languageName: node + linkType: hard + +"@jest/types@npm:^29.5.0, @jest/types@npm:^29.6.1": + version: 29.6.1 + resolution: "@jest/types@npm:29.6.1" + dependencies: + "@jest/schemas": ^29.6.0 + "@types/istanbul-lib-coverage": ^2.0.0 + "@types/istanbul-reports": ^3.0.0 + "@types/node": "*" + "@types/yargs": ^17.0.8 + chalk: ^4.0.0 + checksum: 89fc1ccf71a84fe0da643e0675b1cfe6a6f19ea72e935b2ab1dbdb56ec547e94433fb59b3536d3832a6e156c077865b7176fe9dae707dab9c3d2f9405ba6233c + languageName: node + linkType: hard + +"@joe-re/sql-parser@npm:^1.2.1": + version: 1.2.1 + resolution: "@joe-re/sql-parser@npm:1.2.1" + checksum: f12de426462d3dcf53f144ca133767378083fc0aa0ffa603347d6b424522aa88fdd4ac10eb9317136eaad97017c7b8f566e99f0f8e6571dd117a211ca759d1d2 + languageName: node + linkType: hard + +"@jridgewell/gen-mapping@npm:^0.1.0": + version: 0.1.1 + resolution: "@jridgewell/gen-mapping@npm:0.1.1" + dependencies: + "@jridgewell/set-array": ^1.0.0 + "@jridgewell/sourcemap-codec": ^1.4.10 + checksum: 3bcc21fe786de6ffbf35c399a174faab05eb23ce6a03e8769569de28abbf4facc2db36a9ddb0150545ae23a8d35a7cf7237b2aa9e9356a7c626fb4698287d5cc + languageName: node + linkType: hard + +"@jridgewell/gen-mapping@npm:^0.3.0, @jridgewell/gen-mapping@npm:^0.3.2": + version: 0.3.2 + resolution: "@jridgewell/gen-mapping@npm:0.3.2" + dependencies: + "@jridgewell/set-array": ^1.0.1 + "@jridgewell/sourcemap-codec": ^1.4.10 + "@jridgewell/trace-mapping": ^0.3.9 + checksum: 1832707a1c476afebe4d0fbbd4b9434fdb51a4c3e009ab1e9938648e21b7a97049fa6009393bdf05cab7504108413441df26d8a3c12193996e65493a4efb6882 + languageName: node + linkType: hard + +"@jridgewell/resolve-uri@npm:3.1.0": + version: 3.1.0 + resolution: "@jridgewell/resolve-uri@npm:3.1.0" + checksum: b5ceaaf9a110fcb2780d1d8f8d4a0bfd216702f31c988d8042e5f8fbe353c55d9b0f55a1733afdc64806f8e79c485d2464680ac48a0d9fcadb9548ee6b81d267 + languageName: node + linkType: hard + +"@jridgewell/set-array@npm:^1.0.0, @jridgewell/set-array@npm:^1.0.1": + version: 1.1.2 + resolution: "@jridgewell/set-array@npm:1.1.2" + checksum: 69a84d5980385f396ff60a175f7177af0b8da4ddb81824cb7016a9ef914eee9806c72b6b65942003c63f7983d4f39a5c6c27185bbca88eb4690b62075602e28e + languageName: node + linkType: hard + +"@jridgewell/source-map@npm:^0.3.3": + version: 0.3.3 + resolution: "@jridgewell/source-map@npm:0.3.3" + dependencies: + "@jridgewell/gen-mapping": ^0.3.0 + "@jridgewell/trace-mapping": ^0.3.9 + checksum: ae1302146339667da5cd6541260ecbef46ae06819a60f88da8f58b3e64682f787c09359933d050dea5d2173ea7fa40f40dd4d4e7a8d325c5892cccd99aaf8959 + languageName: node + linkType: hard + +"@jridgewell/sourcemap-codec@npm:1.4.14, @jridgewell/sourcemap-codec@npm:^1.4.10": + version: 1.4.14 + resolution: "@jridgewell/sourcemap-codec@npm:1.4.14" + checksum: 61100637b6d173d3ba786a5dff019e1a74b1f394f323c1fee337ff390239f053b87266c7a948777f4b1ee68c01a8ad0ab61e5ff4abb5a012a0b091bec391ab97 + languageName: node + linkType: hard + +"@jridgewell/trace-mapping@npm:^0.3.12, @jridgewell/trace-mapping@npm:^0.3.17, @jridgewell/trace-mapping@npm:^0.3.18, @jridgewell/trace-mapping@npm:^0.3.9": + version: 0.3.18 + resolution: "@jridgewell/trace-mapping@npm:0.3.18" + dependencies: + "@jridgewell/resolve-uri": 3.1.0 + "@jridgewell/sourcemap-codec": 1.4.14 + checksum: 0572669f855260808c16fe8f78f5f1b4356463b11d3f2c7c0b5580c8ba1cbf4ae53efe9f627595830856e57dbac2325ac17eb0c3dd0ec42102e6f227cc289c02 + languageName: node + linkType: hard + +"@jupyter-lsp/code-jumpers@workspace:*, @jupyter-lsp/code-jumpers@workspace:packages/code-jumpers, @jupyter-lsp/code-jumpers@~1.2.0": + version: 0.0.0-use.local + resolution: "@jupyter-lsp/code-jumpers@workspace:packages/code-jumpers" + dependencies: + "@jupyterlab/apputils": ^4.1.5 + "@jupyterlab/codeeditor": ^4.0.5 + "@jupyterlab/coreutils": ^6.0.5 + "@jupyterlab/docmanager": ^4.0.5 + "@jupyterlab/docregistry": ^4.0.5 + "@jupyterlab/fileeditor": ^4.0.5 + "@jupyterlab/notebook": ^4.0.5 + "@jupyterlab/observables": ^5.0.5 + "@jupyterlab/testing": ^4.0.5 + "@jupyterlab/translation": ^4.0.5 + rimraf: ^3.0.0 + typescript: ~5.0.4 + peerDependencies: + "@jupyterlab/apputils": ^4.0.0 + "@jupyterlab/codeeditor": ^4.0.0 + "@jupyterlab/coreutils": ^6.0.0 + "@jupyterlab/docmanager": ^4.0.0 + "@jupyterlab/docregistry": ^4.0.0 + "@jupyterlab/fileeditor": ^4.0.0 + "@jupyterlab/notebook": ^4.0.0 + "@jupyterlab/observables": ^5.0.0 + "@jupyterlab/translation": ^4.0.0 + languageName: unknown + linkType: soft + +"@jupyter-lsp/completion-theme@^3.0.0, @jupyter-lsp/completion-theme@workspace:*, @jupyter-lsp/completion-theme@workspace:packages/completion-theme, @jupyter-lsp/completion-theme@~3.3.0": + version: 0.0.0-use.local + resolution: "@jupyter-lsp/completion-theme@workspace:packages/completion-theme" + dependencies: + "@jupyterlab/builder": ^4.0.5 + "@jupyterlab/ui-components": ^4.0.5 + react: ^18.2.0 + rimraf: ^3.0.0 + typescript: ~5.0.4 + languageName: unknown + linkType: soft + +"@jupyter-lsp/jupyterlab-lsp-example-extractor@workspace:*, @jupyter-lsp/jupyterlab-lsp-example-extractor@workspace:packages/_example-extractor": + version: 0.0.0-use.local + resolution: "@jupyter-lsp/jupyterlab-lsp-example-extractor@workspace:packages/_example-extractor" + dependencies: + "@jupyter-lsp/jupyterlab-lsp": ^5.0.0-alpha.0 + "@jupyterlab/application": ^4.0.5 + "@jupyterlab/testing": ^4.0.5 + "@types/jest": ^29.5.4 + jest: ^29.2.0 + rimraf: ^3.0.0 + typescript: ~5.0.4 + languageName: unknown + linkType: soft + +"@jupyter-lsp/jupyterlab-lsp-klingon-integration@workspace:*, @jupyter-lsp/jupyterlab-lsp-klingon-integration@workspace:packages/_klingon-integration": + version: 0.0.0-use.local + resolution: "@jupyter-lsp/jupyterlab-lsp-klingon-integration@workspace:packages/_klingon-integration" + dependencies: + "@jupyterlab/application": ^4.0.5 + "@jupyterlab/builder": ^4.0.5 + typescript: ~5.0.4 + languageName: unknown + linkType: soft + +"@jupyter-lsp/jupyterlab-lsp-metapackage@workspace:packages/metapackage": + version: 0.0.0-use.local + resolution: "@jupyter-lsp/jupyterlab-lsp-metapackage@workspace:packages/metapackage" + dependencies: + "@jupyter-lsp/code-jumpers": "workspace:*" + "@jupyter-lsp/completion-theme": "workspace:*" + "@jupyter-lsp/jupyterlab-lsp": "workspace:*" + "@jupyter-lsp/jupyterlab-lsp-example-extractor": "workspace:*" + "@jupyter-lsp/jupyterlab-lsp-klingon-integration": "workspace:*" + "@jupyter-lsp/theme-material": "workspace:*" + "@jupyter-lsp/theme-vscode": "workspace:*" + rimraf: ^3.0.0 + typescript: ~5.0.4 + languageName: unknown + linkType: soft + +"@jupyter-lsp/jupyterlab-lsp@^5.0.0-alpha.0, @jupyter-lsp/jupyterlab-lsp@workspace:*, @jupyter-lsp/jupyterlab-lsp@workspace:packages/jupyterlab-lsp": + version: 0.0.0-use.local + resolution: "@jupyter-lsp/jupyterlab-lsp@workspace:packages/jupyterlab-lsp" + dependencies: + "@codemirror/lint": ^6.4.0 + "@jupyter-lsp/code-jumpers": ~1.2.0 + "@jupyter-lsp/completion-theme": ~3.3.0 + "@jupyter-lsp/theme-material": ~2.1.1 + "@jupyter-lsp/theme-vscode": ~2.1.1 + "@jupyter-notebook/application": ^7.0.2 + "@jupyterlab/application": ^4.0.5 + "@jupyterlab/apputils": ^4.1.5 + "@jupyterlab/builder": ^4.0.5 + "@jupyterlab/cells": ^4.0.5 + "@jupyterlab/codeeditor": ^4.0.5 + "@jupyterlab/codemirror": ^4.0.5 + "@jupyterlab/completer": ^4.0.5 + "@jupyterlab/coreutils": ^6.0.5 + "@jupyterlab/docmanager": ^4.0.5 + "@jupyterlab/docregistry": ^4.0.5 + "@jupyterlab/fileeditor": ^4.0.5 + "@jupyterlab/logconsole": ^4.0.5 + "@jupyterlab/lsp": ^4.0.5 + "@jupyterlab/notebook": ^4.0.5 + "@jupyterlab/rendermime": ^4.0.5 + "@jupyterlab/services": ^7.0.5 + "@jupyterlab/statusbar": ^4.0.5 + "@jupyterlab/testing": ^4.0.5 + "@jupyterlab/tooltip": ^4.0.5 + "@jupyterlab/ui-components": ^4.0.5 + "@lumino/algorithm": "*" + "@lumino/widgets": ^2.3.0 + "@rjsf/validator-ajv8": ^5.12.1 + "@types/jest": ^29.5.4 + "@types/lodash.mergewith": ^4.6.1 + codemirror: "*" + jest: ^29.2.0 + json-schema-to-typescript: ^8.0.0 + lodash.mergewith: ^4.6.1 + npm-run-all: ^4.1.5 + prettier: ^2.8.8 + react: ^18.2.0 + rimraf: ^3.0.0 + typescript: ~5.0.4 + vscode-languageserver-protocol: ^3.17.0 + peerDependencies: + "@codemirror/state": "*" + "@codemirror/view": "*" + "@jupyterlab/application": ^4.0.0 + "@jupyterlab/apputils": ^4.0.0 + "@jupyterlab/cells": ^4.0.0 + "@jupyterlab/codeeditor": ^4.0.0 + "@jupyterlab/codemirror": ^4.0.0 + "@jupyterlab/completer": ^3.3.0 + "@jupyterlab/coreutils": ^6.0.0 + "@jupyterlab/docmanager": ^4.0.0 + "@jupyterlab/docregistry": ^4.0.0 + "@jupyterlab/fileeditor": ^4.0.0 + "@jupyterlab/notebook": ^4.0.0 + "@jupyterlab/rendermime": ^4.0.0 + "@jupyterlab/services": ^7.0.0 + "@jupyterlab/statusbar": ^4.0.0 + "@jupyterlab/tooltip": ^4.0.0 + "@jupyterlab/ui-components": ^4.0.0 + "@lumino/algorithm": "*" + "@lumino/widgets": ^2.0.0 + react: "*" + languageName: unknown + linkType: soft + +"@jupyter-lsp/theme-material@workspace:*, @jupyter-lsp/theme-material@workspace:packages/theme-material, @jupyter-lsp/theme-material@~2.1.1": + version: 0.0.0-use.local + resolution: "@jupyter-lsp/theme-material@workspace:packages/theme-material" + dependencies: + "@jupyter-lsp/completion-theme": ^3.0.0 + languageName: unknown + linkType: soft + +"@jupyter-lsp/theme-vscode@workspace:*, @jupyter-lsp/theme-vscode@workspace:packages/theme-vscode, @jupyter-lsp/theme-vscode@~2.1.1": + version: 0.0.0-use.local + resolution: "@jupyter-lsp/theme-vscode@workspace:packages/theme-vscode" + dependencies: + "@jupyter-lsp/completion-theme": ^3.0.0 + languageName: unknown + linkType: soft + +"@jupyter-notebook/application@npm:^7.0.2": + version: 7.0.2 + resolution: "@jupyter-notebook/application@npm:7.0.2" + dependencies: + "@jupyterlab/application": ^4.0.4 + "@jupyterlab/coreutils": ^6.0.4 + "@jupyterlab/docregistry": ^4.0.4 + "@jupyterlab/rendermime-interfaces": ^3.8.4 + "@jupyterlab/ui-components": ^4.0.4 + "@lumino/algorithm": ^2.0.0 + "@lumino/coreutils": ^2.1.1 + "@lumino/messaging": ^2.0.0 + "@lumino/polling": ^2.1.1 + "@lumino/signaling": ^2.1.1 + "@lumino/widgets": ^2.1.1 + checksum: dd3d2592baa458881265107b8c985a02a8d137a2e6fcd362c4ff43500ed99144c46f9871bfb8d44e7a23168298a440a830f87431177dd954674f89ff944ca148 + languageName: node + linkType: hard + +"@jupyter/ydoc@npm:^1.0.2": + version: 1.0.2 + resolution: "@jupyter/ydoc@npm:1.0.2" + dependencies: + "@jupyterlab/nbformat": ^3.0.0 || ^4.0.0-alpha.21 || ^4.0.0 + "@lumino/coreutils": ^1.11.0 || ^2.0.0 + "@lumino/disposable": ^1.10.0 || ^2.0.0 + "@lumino/signaling": ^1.10.0 || ^2.0.0 + y-protocols: ^1.0.5 + yjs: ^13.5.40 + checksum: 739f9630940466b3cfcd7b742dd06479f81772ca13f863d057af0bbb5e318829506969066ab72977e7c721644982b5c8f88cf44e1ae81955ed1c27e87632d1f2 + languageName: node + linkType: hard + +"@jupyterlab/application@npm:^4.0.4, @jupyterlab/application@npm:^4.0.5": + version: 4.0.5 + resolution: "@jupyterlab/application@npm:4.0.5" + dependencies: + "@fortawesome/fontawesome-free": ^5.12.0 + "@jupyterlab/apputils": ^4.1.5 + "@jupyterlab/coreutils": ^6.0.5 + "@jupyterlab/docregistry": ^4.0.5 + "@jupyterlab/rendermime": ^4.0.5 + "@jupyterlab/rendermime-interfaces": ^3.8.5 + "@jupyterlab/services": ^7.0.5 + "@jupyterlab/statedb": ^4.0.5 + "@jupyterlab/translation": ^4.0.5 + "@jupyterlab/ui-components": ^4.0.5 + "@lumino/algorithm": ^2.0.1 + "@lumino/application": ^2.2.1 + "@lumino/commands": ^2.1.3 + "@lumino/coreutils": ^2.1.2 + "@lumino/disposable": ^2.1.2 + "@lumino/messaging": ^2.0.1 + "@lumino/polling": ^2.1.2 + "@lumino/properties": ^2.0.1 + "@lumino/signaling": ^2.1.2 + "@lumino/widgets": ^2.3.0 + checksum: 532f0090016d72fd7c2366a7d6de44033ccdc9b70f0a27a13141ce673d0ebad7804c73c0c55f18ccf3e0dec5c6f7d0190ef489753c220d649c2f42d6b0c8e61f + languageName: node + linkType: hard + +"@jupyterlab/apputils@npm:^4.1.5": + version: 4.1.5 + resolution: "@jupyterlab/apputils@npm:4.1.5" + dependencies: + "@jupyterlab/coreutils": ^6.0.5 + "@jupyterlab/observables": ^5.0.5 + "@jupyterlab/rendermime-interfaces": ^3.8.5 + "@jupyterlab/services": ^7.0.5 + "@jupyterlab/settingregistry": ^4.0.5 + "@jupyterlab/statedb": ^4.0.5 + "@jupyterlab/statusbar": ^4.0.5 + "@jupyterlab/translation": ^4.0.5 + "@jupyterlab/ui-components": ^4.0.5 + "@lumino/algorithm": ^2.0.1 + "@lumino/commands": ^2.1.3 + "@lumino/coreutils": ^2.1.2 + "@lumino/disposable": ^2.1.2 + "@lumino/domutils": ^2.0.1 + "@lumino/messaging": ^2.0.1 + "@lumino/signaling": ^2.1.2 + "@lumino/virtualdom": ^2.0.1 + "@lumino/widgets": ^2.3.0 + "@types/react": ^18.0.26 + react: ^18.2.0 + sanitize-html: ~2.7.3 + checksum: b569303e8b38173de8612a3c04bac349f25c151bbb83b4f594311d679896aed37ba1467e9ff123e605c0d5400c89cf0d66fce697440ea07fff9dd4a408148e2f + languageName: node + linkType: hard + +"@jupyterlab/attachments@npm:^4.0.5": + version: 4.0.5 + resolution: "@jupyterlab/attachments@npm:4.0.5" + dependencies: + "@jupyterlab/nbformat": ^4.0.5 + "@jupyterlab/observables": ^5.0.5 + "@jupyterlab/rendermime": ^4.0.5 + "@jupyterlab/rendermime-interfaces": ^3.8.5 + "@lumino/disposable": ^2.1.2 + "@lumino/signaling": ^2.1.2 + checksum: bb0a5dc7e830fc42824743cc817cf59a43c43b6f3979b3d6214619baf69f77bb70606241b39a92da21788348eb1144a0914e3683f0b2b8d01a530e8aeaf6f01e + languageName: node + linkType: hard + +"@jupyterlab/builder@npm:^4.0.5": + version: 4.0.5 + resolution: "@jupyterlab/builder@npm:4.0.5" + dependencies: + "@lumino/algorithm": ^2.0.1 + "@lumino/application": ^2.2.1 + "@lumino/commands": ^2.1.3 + "@lumino/coreutils": ^2.1.2 + "@lumino/disposable": ^2.1.2 + "@lumino/domutils": ^2.0.1 + "@lumino/dragdrop": ^2.1.3 + "@lumino/messaging": ^2.0.1 + "@lumino/properties": ^2.0.1 + "@lumino/signaling": ^2.1.2 + "@lumino/virtualdom": ^2.0.1 + "@lumino/widgets": ^2.3.0 + ajv: ^8.12.0 + commander: ^9.4.1 + css-loader: ^6.7.1 + duplicate-package-checker-webpack-plugin: ^3.0.0 + fs-extra: ^10.1.0 + glob: ~7.1.6 + license-webpack-plugin: ^2.3.14 + mini-css-extract-plugin: ^2.7.0 + mini-svg-data-uri: ^1.4.4 + path-browserify: ^1.0.0 + process: ^0.11.10 + source-map-loader: ~1.0.2 + style-loader: ~3.3.1 + supports-color: ^7.2.0 + terser-webpack-plugin: ^5.3.7 + webpack: ^5.76.1 + webpack-cli: ^5.0.1 + webpack-merge: ^5.8.0 + worker-loader: ^3.0.2 + bin: + build-labextension: lib/build-labextension.js + checksum: 60b12e784881a16a3d2c794b0edfaea85e5da0b84f1a751564741df665c0bfcea8baabb91e5c061461fc431a8a5570e837cbf7692b39935b0df7fe87e1c0f213 + languageName: node + linkType: hard + +"@jupyterlab/cells@npm:^4.0.5": + version: 4.0.5 + resolution: "@jupyterlab/cells@npm:4.0.5" + dependencies: + "@codemirror/state": ^6.2.0 + "@codemirror/view": ^6.9.6 + "@jupyter/ydoc": ^1.0.2 + "@jupyterlab/apputils": ^4.1.5 + "@jupyterlab/attachments": ^4.0.5 + "@jupyterlab/codeeditor": ^4.0.5 + "@jupyterlab/codemirror": ^4.0.5 + "@jupyterlab/coreutils": ^6.0.5 + "@jupyterlab/documentsearch": ^4.0.5 + "@jupyterlab/filebrowser": ^4.0.5 + "@jupyterlab/nbformat": ^4.0.5 + "@jupyterlab/observables": ^5.0.5 + "@jupyterlab/outputarea": ^4.0.5 + "@jupyterlab/rendermime": ^4.0.5 + "@jupyterlab/services": ^7.0.5 + "@jupyterlab/toc": ^6.0.5 + "@jupyterlab/translation": ^4.0.5 + "@jupyterlab/ui-components": ^4.0.5 + "@lumino/algorithm": ^2.0.1 + "@lumino/coreutils": ^2.1.2 + "@lumino/domutils": ^2.0.1 + "@lumino/dragdrop": ^2.1.3 + "@lumino/messaging": ^2.0.1 + "@lumino/polling": ^2.1.2 + "@lumino/signaling": ^2.1.2 + "@lumino/virtualdom": ^2.0.1 + "@lumino/widgets": ^2.3.0 + react: ^18.2.0 + checksum: d674a15ddf870bea876d8b40ec598bbe9ba6d59b653223b381beec7e4e1e18c1b2c623585a9edc24e186dc666d73c63c55cee76ec83f975183f17bb5a56a8573 + languageName: node + linkType: hard + +"@jupyterlab/codeeditor@npm:^4.0.5": + version: 4.0.5 + resolution: "@jupyterlab/codeeditor@npm:4.0.5" + dependencies: + "@codemirror/state": ^6.2.0 + "@jupyter/ydoc": ^1.0.2 + "@jupyterlab/coreutils": ^6.0.5 + "@jupyterlab/nbformat": ^4.0.5 + "@jupyterlab/observables": ^5.0.5 + "@jupyterlab/statusbar": ^4.0.5 + "@jupyterlab/translation": ^4.0.5 + "@jupyterlab/ui-components": ^4.0.5 + "@lumino/coreutils": ^2.1.2 + "@lumino/disposable": ^2.1.2 + "@lumino/dragdrop": ^2.1.3 + "@lumino/messaging": ^2.0.1 + "@lumino/signaling": ^2.1.2 + "@lumino/widgets": ^2.3.0 + react: ^18.2.0 + checksum: 4bd539cd22ccf84b982b427ad921b33f0e4dd0c02980827b59bf748b30c6e85180e03357f92c2a2b54c3e086965d2458b6a5f2043160ede85f530a14300b3f00 + languageName: node + linkType: hard + +"@jupyterlab/codemirror@npm:^4.0.5": + version: 4.0.5 + resolution: "@jupyterlab/codemirror@npm:4.0.5" + dependencies: + "@codemirror/autocomplete": ^6.5.1 + "@codemirror/commands": ^6.2.3 + "@codemirror/lang-cpp": ^6.0.2 + "@codemirror/lang-css": ^6.1.1 + "@codemirror/lang-html": ^6.4.3 + "@codemirror/lang-java": ^6.0.1 + "@codemirror/lang-javascript": ^6.1.7 + "@codemirror/lang-json": ^6.0.1 + "@codemirror/lang-markdown": ^6.1.1 + "@codemirror/lang-php": ^6.0.1 + "@codemirror/lang-python": ^6.1.3 + "@codemirror/lang-rust": ^6.0.1 + "@codemirror/lang-sql": ^6.4.1 + "@codemirror/lang-wast": ^6.0.1 + "@codemirror/lang-xml": ^6.0.2 + "@codemirror/language": ^6.6.0 + "@codemirror/legacy-modes": ^6.3.2 + "@codemirror/search": ^6.3.0 + "@codemirror/state": ^6.2.0 + "@codemirror/view": ^6.9.6 + "@jupyter/ydoc": ^1.0.2 + "@jupyterlab/codeeditor": ^4.0.5 + "@jupyterlab/coreutils": ^6.0.5 + "@jupyterlab/documentsearch": ^4.0.5 + "@jupyterlab/nbformat": ^4.0.5 + "@jupyterlab/translation": ^4.0.5 + "@lezer/common": ^1.0.2 + "@lezer/generator": ^1.2.2 + "@lezer/highlight": ^1.1.4 + "@lezer/markdown": ^1.0.2 + "@lumino/coreutils": ^2.1.2 + "@lumino/disposable": ^2.1.2 + "@lumino/signaling": ^2.1.2 + yjs: ^13.5.40 + checksum: 840d9abd7c34ce7fb09446eff235e056e2d04da290f83380c020a9c3e2a1a27c0d3fc7ffcbd54a1f6de6325a57cc18d350d30c61a0f27d9810d8d2ec32aa5cf2 + languageName: node + linkType: hard + +"@jupyterlab/completer@npm:^4.0.5": + version: 4.0.5 + resolution: "@jupyterlab/completer@npm:4.0.5" + dependencies: + "@jupyter/ydoc": ^1.0.2 + "@jupyterlab/apputils": ^4.1.5 + "@jupyterlab/codeeditor": ^4.0.5 + "@jupyterlab/coreutils": ^6.0.5 + "@jupyterlab/rendermime": ^4.0.5 + "@jupyterlab/services": ^7.0.5 + "@jupyterlab/statedb": ^4.0.5 + "@jupyterlab/ui-components": ^4.0.5 + "@lumino/algorithm": ^2.0.1 + "@lumino/coreutils": ^2.1.2 + "@lumino/disposable": ^2.1.2 + "@lumino/domutils": ^2.0.1 + "@lumino/messaging": ^2.0.1 + "@lumino/signaling": ^2.1.2 + "@lumino/widgets": ^2.3.0 + checksum: bca52950049bfad7a03a2a36d8ed0ac0c430bb4b7cbd833be5ece0d03293edd474349ff462dfe25a5dd76c9de77dd1c68d42d1444f43faec6dd4d1f79cefb162 + languageName: node + linkType: hard + +"@jupyterlab/coreutils@npm:^6.0.4, @jupyterlab/coreutils@npm:^6.0.5": + version: 6.0.5 + resolution: "@jupyterlab/coreutils@npm:6.0.5" + dependencies: + "@lumino/coreutils": ^2.1.2 + "@lumino/disposable": ^2.1.2 + "@lumino/signaling": ^2.1.2 + minimist: ~1.2.0 + path-browserify: ^1.0.0 + url-parse: ~1.5.4 + checksum: c09be7c8f389bb7f019fb868acfc528a0bc553a7b091412b7e0bfb1d0f2c71223ada8d6972d42df25fb6f70be21ecac00703e12d1df62a44dc2a512baac54dac + languageName: node + linkType: hard + +"@jupyterlab/docmanager@npm:^4.0.5": + version: 4.0.5 + resolution: "@jupyterlab/docmanager@npm:4.0.5" + dependencies: + "@jupyterlab/apputils": ^4.1.5 + "@jupyterlab/coreutils": ^6.0.5 + "@jupyterlab/docregistry": ^4.0.5 + "@jupyterlab/services": ^7.0.5 + "@jupyterlab/statusbar": ^4.0.5 + "@jupyterlab/translation": ^4.0.5 + "@jupyterlab/ui-components": ^4.0.5 + "@lumino/algorithm": ^2.0.1 + "@lumino/coreutils": ^2.1.2 + "@lumino/disposable": ^2.1.2 + "@lumino/messaging": ^2.0.1 + "@lumino/properties": ^2.0.1 + "@lumino/signaling": ^2.1.2 + "@lumino/widgets": ^2.3.0 + react: ^18.2.0 + checksum: 16627833d9d540e9569bd27e3464c6c9a5cf9f628265b5018a4f63e05f351c4891494b8c731f83bb279da3bb42d0da23cb1d1b536c0b1b4422e4f6f250377ca5 + languageName: node + linkType: hard + +"@jupyterlab/docregistry@npm:^4.0.4, @jupyterlab/docregistry@npm:^4.0.5": + version: 4.0.5 + resolution: "@jupyterlab/docregistry@npm:4.0.5" + dependencies: + "@jupyter/ydoc": ^1.0.2 + "@jupyterlab/apputils": ^4.1.5 + "@jupyterlab/codeeditor": ^4.0.5 + "@jupyterlab/coreutils": ^6.0.5 + "@jupyterlab/observables": ^5.0.5 + "@jupyterlab/rendermime": ^4.0.5 + "@jupyterlab/rendermime-interfaces": ^3.8.5 + "@jupyterlab/services": ^7.0.5 + "@jupyterlab/translation": ^4.0.5 + "@jupyterlab/ui-components": ^4.0.5 + "@lumino/algorithm": ^2.0.1 + "@lumino/coreutils": ^2.1.2 + "@lumino/disposable": ^2.1.2 + "@lumino/messaging": ^2.0.1 + "@lumino/properties": ^2.0.1 + "@lumino/signaling": ^2.1.2 + "@lumino/widgets": ^2.3.0 + checksum: 455286f8fbeb00f7afcc52c43830d6ab6941020338df23564591a0a59e1b2551f918a55382540983a1bf0b1bf4bdfc008b88f5acbff4a2e3c5dca6ac1dd84a6d + languageName: node + linkType: hard + +"@jupyterlab/documentsearch@npm:^4.0.5": + version: 4.0.5 + resolution: "@jupyterlab/documentsearch@npm:4.0.5" + dependencies: + "@jupyterlab/apputils": ^4.1.5 + "@jupyterlab/translation": ^4.0.5 + "@jupyterlab/ui-components": ^4.0.5 + "@lumino/coreutils": ^2.1.2 + "@lumino/disposable": ^2.1.2 + "@lumino/messaging": ^2.0.1 + "@lumino/polling": ^2.1.2 + "@lumino/signaling": ^2.1.2 + "@lumino/widgets": ^2.3.0 + react: ^18.2.0 + checksum: d7fe83a57562e9f90555c8b938f77edff21f7204b52a7cdd4a0cd21f5382fd5a7906e5d7c2ec661802b5d9bada42f80fcaa5d129931aeac949e8655d290d9adf + languageName: node + linkType: hard + +"@jupyterlab/filebrowser@npm:^4.0.5": + version: 4.0.5 + resolution: "@jupyterlab/filebrowser@npm:4.0.5" + dependencies: + "@jupyterlab/apputils": ^4.1.5 + "@jupyterlab/coreutils": ^6.0.5 + "@jupyterlab/docmanager": ^4.0.5 + "@jupyterlab/docregistry": ^4.0.5 + "@jupyterlab/services": ^7.0.5 + "@jupyterlab/statedb": ^4.0.5 + "@jupyterlab/statusbar": ^4.0.5 + "@jupyterlab/translation": ^4.0.5 + "@jupyterlab/ui-components": ^4.0.5 + "@lumino/algorithm": ^2.0.1 + "@lumino/coreutils": ^2.1.2 + "@lumino/disposable": ^2.1.2 + "@lumino/domutils": ^2.0.1 + "@lumino/dragdrop": ^2.1.3 + "@lumino/messaging": ^2.0.1 + "@lumino/polling": ^2.1.2 + "@lumino/signaling": ^2.1.2 + "@lumino/virtualdom": ^2.0.1 + "@lumino/widgets": ^2.3.0 + react: ^18.2.0 + checksum: f47d55cc8ff246efe65fdbf1f0fc09e227eca9bafcf0f1e45e1973612ad13e0853f1393882decddc2f1df015f11097b6d751bdbcdc255ed438adc96598b376a8 + languageName: node + linkType: hard + +"@jupyterlab/fileeditor@npm:^4.0.5": + version: 4.0.5 + resolution: "@jupyterlab/fileeditor@npm:4.0.5" + dependencies: + "@jupyterlab/apputils": ^4.1.5 + "@jupyterlab/codeeditor": ^4.0.5 + "@jupyterlab/codemirror": ^4.0.5 + "@jupyterlab/coreutils": ^6.0.5 + "@jupyterlab/docregistry": ^4.0.5 + "@jupyterlab/documentsearch": ^4.0.5 + "@jupyterlab/lsp": ^4.0.5 + "@jupyterlab/statusbar": ^4.0.5 + "@jupyterlab/toc": ^6.0.5 + "@jupyterlab/translation": ^4.0.5 + "@jupyterlab/ui-components": ^4.0.5 + "@lumino/commands": ^2.1.3 + "@lumino/coreutils": ^2.1.2 + "@lumino/messaging": ^2.0.1 + "@lumino/widgets": ^2.3.0 + react: ^18.2.0 + regexp-match-indices: ^1.0.2 + checksum: 7598dec866704fb664223b805a3fa7db4eb6506f10b4c59a831404d1462e2d993955b259095ea7d35258bb1be9147860d261f11e48c493331bb77746807565ac + languageName: node + linkType: hard + +"@jupyterlab/logconsole@npm:^4.0.5": + version: 4.0.5 + resolution: "@jupyterlab/logconsole@npm:4.0.5" + dependencies: + "@jupyterlab/coreutils": ^6.0.5 + "@jupyterlab/nbformat": ^4.0.5 + "@jupyterlab/outputarea": ^4.0.5 + "@jupyterlab/rendermime": ^4.0.5 + "@jupyterlab/services": ^7.0.5 + "@jupyterlab/translation": ^4.0.5 + "@lumino/coreutils": ^2.1.2 + "@lumino/disposable": ^2.1.2 + "@lumino/messaging": ^2.0.1 + "@lumino/signaling": ^2.1.2 + "@lumino/widgets": ^2.3.0 + checksum: e18e395e38ce3994c2a5ccc637a6a2bf2beeb3e8b727f0aa5d8c816e47a1ffbb681af592596e55fb67cf2e66f7d05ce6e969cf7983d9d41d5a98832dcfed2ec5 + languageName: node + linkType: hard + +"@jupyterlab/lsp@npm:^4.0.5": + version: 4.0.5 + resolution: "@jupyterlab/lsp@npm:4.0.5" + dependencies: + "@jupyterlab/apputils": ^4.1.5 + "@jupyterlab/codeeditor": ^4.0.5 + "@jupyterlab/coreutils": ^6.0.5 + "@jupyterlab/docregistry": ^4.0.5 + "@jupyterlab/services": ^7.0.5 + "@jupyterlab/translation": ^4.0.5 + "@lumino/coreutils": ^2.1.2 + "@lumino/disposable": ^2.1.2 + "@lumino/signaling": ^2.1.2 + lodash.mergewith: ^4.6.1 + vscode-jsonrpc: ^6.0.0 + vscode-languageserver-protocol: ^3.17.0 + vscode-ws-jsonrpc: ~1.0.2 + checksum: b59d21c9df84963c354422134e525acabab7f7fe2930e4bb5b5b81edd3e8397772ce5c395bc1faa7c79cddb6bfefc9e1c41edfd939241681da483ae3238be00d + languageName: node + linkType: hard + +"@jupyterlab/nbformat@npm:^3.0.0 || ^4.0.0-alpha.21 || ^4.0.0, @jupyterlab/nbformat@npm:^4.0.5": + version: 4.0.5 + resolution: "@jupyterlab/nbformat@npm:4.0.5" + dependencies: + "@lumino/coreutils": ^2.1.2 + checksum: 51611e95e6b16dc3e952b731e0ef036d1e0f7eec497555e3bf8394f181da4184dc37c6b25a1b11b5ea031f22fd4b9602fb6a2e675d65fddc2ccb099236cf3e01 + languageName: node + linkType: hard + +"@jupyterlab/notebook@npm:^4.0.5": + version: 4.0.5 + resolution: "@jupyterlab/notebook@npm:4.0.5" + dependencies: + "@jupyter/ydoc": ^1.0.2 + "@jupyterlab/apputils": ^4.1.5 + "@jupyterlab/cells": ^4.0.5 + "@jupyterlab/codeeditor": ^4.0.5 + "@jupyterlab/codemirror": ^4.0.5 + "@jupyterlab/coreutils": ^6.0.5 + "@jupyterlab/docregistry": ^4.0.5 + "@jupyterlab/documentsearch": ^4.0.5 + "@jupyterlab/lsp": ^4.0.5 + "@jupyterlab/nbformat": ^4.0.5 + "@jupyterlab/observables": ^5.0.5 + "@jupyterlab/rendermime": ^4.0.5 + "@jupyterlab/services": ^7.0.5 + "@jupyterlab/settingregistry": ^4.0.5 + "@jupyterlab/statusbar": ^4.0.5 + "@jupyterlab/toc": ^6.0.5 + "@jupyterlab/translation": ^4.0.5 + "@jupyterlab/ui-components": ^4.0.5 + "@lumino/algorithm": ^2.0.1 + "@lumino/coreutils": ^2.1.2 + "@lumino/domutils": ^2.0.1 + "@lumino/dragdrop": ^2.1.3 + "@lumino/messaging": ^2.0.1 + "@lumino/properties": ^2.0.1 + "@lumino/signaling": ^2.1.2 + "@lumino/virtualdom": ^2.0.1 + "@lumino/widgets": ^2.3.0 + react: ^18.2.0 + checksum: c6979a1b3cc1a6e4eb82176d97bc2109f8f3bcf6b281853a6fb8d350e66fa443dcd34981d46b0aebb03356e6533956dd4ad233e6dee9198acbd62b9c6f027bcd + languageName: node + linkType: hard + +"@jupyterlab/observables@npm:^5.0.5": + version: 5.0.5 + resolution: "@jupyterlab/observables@npm:5.0.5" + dependencies: + "@lumino/algorithm": ^2.0.1 + "@lumino/coreutils": ^2.1.2 + "@lumino/disposable": ^2.1.2 + "@lumino/messaging": ^2.0.1 + "@lumino/signaling": ^2.1.2 + checksum: e94d5a187a356f19db176d16a93e2b380c245a8bcf54eb283b405fc9a39cc937b790a0684defadd0eb103359838751d0184c23c5816c5fc36b86c90e2cbb96b9 + languageName: node + linkType: hard + +"@jupyterlab/outputarea@npm:^4.0.5": + version: 4.0.5 + resolution: "@jupyterlab/outputarea@npm:4.0.5" + dependencies: + "@jupyterlab/apputils": ^4.1.5 + "@jupyterlab/nbformat": ^4.0.5 + "@jupyterlab/observables": ^5.0.5 + "@jupyterlab/rendermime": ^4.0.5 + "@jupyterlab/rendermime-interfaces": ^3.8.5 + "@jupyterlab/services": ^7.0.5 + "@jupyterlab/translation": ^4.0.5 + "@lumino/algorithm": ^2.0.1 + "@lumino/coreutils": ^2.1.2 + "@lumino/disposable": ^2.1.2 + "@lumino/messaging": ^2.0.1 + "@lumino/properties": ^2.0.1 + "@lumino/signaling": ^2.1.2 + "@lumino/widgets": ^2.3.0 + checksum: fc7f49b09ad8104fd0ac022366877eee228beb63f237afa76e785e170cb17e9ae18a686e7ac09f5f74bf25735ebc089812ea9374cc7920f4a0a641b9d565a046 + languageName: node + linkType: hard + +"@jupyterlab/rendermime-interfaces@npm:^3.8.4, @jupyterlab/rendermime-interfaces@npm:^3.8.5": + version: 3.8.5 + resolution: "@jupyterlab/rendermime-interfaces@npm:3.8.5" + dependencies: + "@lumino/coreutils": ^1.11.0 || ^2.1.2 + "@lumino/widgets": ^1.37.2 || ^2.3.0 + checksum: 3824c1aa0fa4b946211fd342ff73b0ebc7722dfeaf9794a8c64740dcc53151c0e6b81468f92d83fbe9a6da75d54fe4b176bd3ec98e1a526b50bbc0f91057c1aa + languageName: node + linkType: hard + +"@jupyterlab/rendermime@npm:^4.0.5": + version: 4.0.5 + resolution: "@jupyterlab/rendermime@npm:4.0.5" + dependencies: + "@jupyterlab/apputils": ^4.1.5 + "@jupyterlab/coreutils": ^6.0.5 + "@jupyterlab/nbformat": ^4.0.5 + "@jupyterlab/observables": ^5.0.5 + "@jupyterlab/rendermime-interfaces": ^3.8.5 + "@jupyterlab/services": ^7.0.5 + "@jupyterlab/translation": ^4.0.5 + "@lumino/coreutils": ^2.1.2 + "@lumino/messaging": ^2.0.1 + "@lumino/signaling": ^2.1.2 + "@lumino/widgets": ^2.3.0 + lodash.escape: ^4.0.1 + checksum: 472e25ebdee77599a90fef33402ef7c8f05d3c5266c9617805602b4e26022962e8973d55ab0b11bc24982c3aea1dc7d0b151064c822c2d1093111c17e87d1e80 + languageName: node + linkType: hard + +"@jupyterlab/services@npm:^7.0.5": + version: 7.0.5 + resolution: "@jupyterlab/services@npm:7.0.5" + dependencies: + "@jupyter/ydoc": ^1.0.2 + "@jupyterlab/coreutils": ^6.0.5 + "@jupyterlab/nbformat": ^4.0.5 + "@jupyterlab/settingregistry": ^4.0.5 + "@jupyterlab/statedb": ^4.0.5 + "@lumino/coreutils": ^2.1.2 + "@lumino/disposable": ^2.1.2 + "@lumino/polling": ^2.1.2 + "@lumino/properties": ^2.0.1 + "@lumino/signaling": ^2.1.2 + ws: ^8.11.0 + checksum: cf4176dbb73c08e777b5e6ca26cba6ad7a142fc76ae6b46ef17ac7d8c8021f62d66e95e2ee0dbce5c33a0b2380750d440783d0398d787b8e8028920e04dd1d0b + languageName: node + linkType: hard + +"@jupyterlab/settingregistry@npm:^4.0.5": + version: 4.0.5 + resolution: "@jupyterlab/settingregistry@npm:4.0.5" + dependencies: + "@jupyterlab/nbformat": ^4.0.5 + "@jupyterlab/statedb": ^4.0.5 + "@lumino/commands": ^2.1.3 + "@lumino/coreutils": ^2.1.2 + "@lumino/disposable": ^2.1.2 + "@lumino/signaling": ^2.1.2 + "@rjsf/utils": ^5.1.0 + ajv: ^8.12.0 + json5: ^2.2.3 + peerDependencies: + react: ">=16" + checksum: b7d686e0f9629f25f423fbd114e598f5af2ae1cc7b683f3e236ff8c94f6d05b20e13ee4555e0eba6277b58fbcdf3c75dbcd66d4e79884b49bed649372d871540 + languageName: node + linkType: hard + +"@jupyterlab/statedb@npm:^4.0.5": + version: 4.0.5 + resolution: "@jupyterlab/statedb@npm:4.0.5" + dependencies: + "@lumino/commands": ^2.1.3 + "@lumino/coreutils": ^2.1.2 + "@lumino/disposable": ^2.1.2 + "@lumino/properties": ^2.0.1 + "@lumino/signaling": ^2.1.2 + checksum: 8e01de74a2168d19124773fa2b72329cfb43601c702127845a4172e87ee67b1304d34f53f65a6db214d832bd8c244c333936a22e08bbf1ea02e458e245140f62 + languageName: node + linkType: hard + +"@jupyterlab/statusbar@npm:^4.0.5": + version: 4.0.5 + resolution: "@jupyterlab/statusbar@npm:4.0.5" + dependencies: + "@jupyterlab/ui-components": ^4.0.5 + "@lumino/algorithm": ^2.0.1 + "@lumino/coreutils": ^2.1.2 + "@lumino/disposable": ^2.1.2 + "@lumino/messaging": ^2.0.1 + "@lumino/signaling": ^2.1.2 + "@lumino/widgets": ^2.3.0 + react: ^18.2.0 + checksum: eac3bc5cc191885fe0fb35466a015ecd8df103a38bc8fac0e2a2c0c7bc783d47e43a31679f83777c0a059091988d9dd2e191624c774fd32cb80c05f2d1166163 + languageName: node + linkType: hard + +"@jupyterlab/testing@npm:^4.0.5": + version: 4.0.5 + resolution: "@jupyterlab/testing@npm:4.0.5" + dependencies: + "@babel/core": ^7.10.2 + "@babel/preset-env": ^7.10.2 + "@jupyterlab/coreutils": ^6.0.5 + "@lumino/coreutils": ^2.1.2 + "@lumino/signaling": ^2.1.2 + child_process: ~1.0.2 + deepmerge: ^4.2.2 + fs-extra: ^10.1.0 + identity-obj-proxy: ^3.0.0 + jest: ^29.2.0 + jest-environment-jsdom: ^29.3.0 + jest-junit: ^15.0.0 + node-fetch: ^2.6.0 + simulate-event: ~1.4.0 + ts-jest: ^29.1.0 + peerDependencies: + typescript: ">=4.3" + checksum: 5f242263f879bb075db6ff5125dbdb495589703ae2e287c171b7680954db16eb6fd3ab66d09d77ca27686a1d1ec3a0736c78f86808dd222949c834ebd13910fb + languageName: node + linkType: hard + +"@jupyterlab/toc@npm:^6.0.5": + version: 6.0.5 + resolution: "@jupyterlab/toc@npm:6.0.5" + dependencies: + "@jupyterlab/apputils": ^4.1.5 + "@jupyterlab/coreutils": ^6.0.5 + "@jupyterlab/docregistry": ^4.0.5 + "@jupyterlab/observables": ^5.0.5 + "@jupyterlab/rendermime": ^4.0.5 + "@jupyterlab/translation": ^4.0.5 + "@jupyterlab/ui-components": ^4.0.5 + "@lumino/coreutils": ^2.1.2 + "@lumino/disposable": ^2.1.2 + "@lumino/messaging": ^2.0.1 + "@lumino/signaling": ^2.1.2 + "@lumino/widgets": ^2.3.0 + react: ^18.2.0 + checksum: 4b688fdd2aa0d14db02394bafcbae5e0ce632681e8541ff3ca6153ba0e219dc20cb99f03ef4ac25f849b4b7b23f3e168e50a450bf952f42b0418e2e42aaeb546 + languageName: node + linkType: hard + +"@jupyterlab/tooltip@npm:^4.0.5": + version: 4.0.5 + resolution: "@jupyterlab/tooltip@npm:4.0.5" + dependencies: + "@jupyterlab/codeeditor": ^4.0.5 + "@jupyterlab/rendermime": ^4.0.5 + "@jupyterlab/services": ^7.0.5 + "@jupyterlab/ui-components": ^4.0.5 + "@lumino/coreutils": ^2.1.2 + "@lumino/messaging": ^2.0.1 + "@lumino/widgets": ^2.3.0 + checksum: 8a096fe65fb6887e47f12f20109b83f71249bb435eb552341958fd78a3f2d8d0979b900f143a4889e361ba722cb6f7cbd6831ac49d8ad17ce0710b5bea2c921e + languageName: node + linkType: hard + +"@jupyterlab/translation@npm:^4.0.5": + version: 4.0.5 + resolution: "@jupyterlab/translation@npm:4.0.5" + dependencies: + "@jupyterlab/coreutils": ^6.0.5 + "@jupyterlab/rendermime-interfaces": ^3.8.5 + "@jupyterlab/services": ^7.0.5 + "@jupyterlab/statedb": ^4.0.5 + "@lumino/coreutils": ^2.1.2 + checksum: ba879b7ed27f9398f409333624f679ad4c6d02f668a832eb7ee0cc27998e17d12938192dc32cdf74eff9c1b76116215543b1218093c32717d465568794b49660 + languageName: node + linkType: hard + +"@jupyterlab/ui-components@npm:^4.0.4, @jupyterlab/ui-components@npm:^4.0.5": + version: 4.0.5 + resolution: "@jupyterlab/ui-components@npm:4.0.5" + dependencies: + "@jupyterlab/coreutils": ^6.0.5 + "@jupyterlab/observables": ^5.0.5 + "@jupyterlab/rendermime-interfaces": ^3.8.5 + "@jupyterlab/translation": ^4.0.5 + "@lumino/algorithm": ^2.0.1 + "@lumino/commands": ^2.1.3 + "@lumino/coreutils": ^2.1.2 + "@lumino/disposable": ^2.1.2 + "@lumino/messaging": ^2.0.1 + "@lumino/polling": ^2.1.2 + "@lumino/properties": ^2.0.1 + "@lumino/signaling": ^2.1.2 + "@lumino/virtualdom": ^2.0.1 + "@lumino/widgets": ^2.3.0 + "@rjsf/core": ^5.1.0 + "@rjsf/utils": ^5.1.0 + react: ^18.2.0 + react-dom: ^18.2.0 + typestyle: ^2.0.4 + peerDependencies: + react: ^18.2.0 + checksum: 4dfae7b37d7e7b58b83bdc75d260126fcdabfb9fd52cc3f04e3bf3c481c8f05c3b3323953389408f793ec7ec6580fd582667a83ab906a308361f0f20f766ad7a + languageName: node + linkType: hard + +"@lerna/child-process@npm:6.5.1": + version: 6.5.1 + resolution: "@lerna/child-process@npm:6.5.1" + dependencies: + chalk: ^4.1.0 + execa: ^5.0.0 + strong-log-transformer: ^2.1.0 + checksum: 78629ce48ce4b9464c3a51f30ed304915591fd2755398a3adc41a66140e34f1408ce41ac9cf96203c0be68930e39e3347ce92d677e5047ec94103576f68a26ea + languageName: node + linkType: hard + +"@lerna/create@npm:6.5.1": + version: 6.5.1 + resolution: "@lerna/create@npm:6.5.1" + dependencies: + "@lerna/child-process": 6.5.1 + dedent: ^0.7.0 + fs-extra: ^9.1.0 + init-package-json: ^3.0.2 + npm-package-arg: 8.1.1 + p-reduce: ^2.1.0 + pacote: ^13.6.1 + pify: ^5.0.0 + semver: ^7.3.4 + slash: ^3.0.0 + validate-npm-package-license: ^3.0.4 + validate-npm-package-name: ^4.0.0 + yargs-parser: 20.2.4 + checksum: dd2c7ffd555468b7e11302de5f2a4da65fa944769c6962be1742db144ee8cf415adf240cfc3a7eca20b8749d7e0f77e716f92359a19431356fce0e2d103e32a5 + languageName: node + linkType: hard + +"@lezer/common@npm:^1.0.0, @lezer/common@npm:^1.0.2": + version: 1.0.3 + resolution: "@lezer/common@npm:1.0.3" + checksum: cc90dc2f0aeaebeb3fe886cbd27f8b1e8bee817d8c2efff178604807debd68c5db820fd23afb830962780063d21891afbdf564420221faca2822e77bc6327184 + languageName: node + linkType: hard + +"@lezer/cpp@npm:^1.0.0": + version: 1.1.0 + resolution: "@lezer/cpp@npm:1.1.0" + dependencies: + "@lezer/highlight": ^1.0.0 + "@lezer/lr": ^1.0.0 + checksum: 9b25c881fc9b64fd2b019a077a85b0ba7cfda0bbdd92dbb0ff43300c9ba1ec4360128fe912bfe0f06a1c1bb5a564c5ace375c8aad254d07a717768a8f268695d + languageName: node + linkType: hard + +"@lezer/css@npm:^1.0.0, @lezer/css@npm:^1.1.0": + version: 1.1.2 + resolution: "@lezer/css@npm:1.1.2" + dependencies: + "@lezer/highlight": ^1.0.0 + "@lezer/lr": ^1.0.0 + checksum: 02218fe6901428e191a91a1f1a3728a051af982bafaf37144884c9261a7e24b2ad1dfdaa6e7feeb160e5bc34157ce92213cd92ae244cdf0b8485b8b8113850f8 + languageName: node + linkType: hard + +"@lezer/generator@npm:^1.2.2": + version: 1.3.0 + resolution: "@lezer/generator@npm:1.3.0" + dependencies: + "@lezer/common": ^1.0.2 + "@lezer/lr": ^1.3.0 + bin: + lezer-generator: dist/lezer-generator.cjs + checksum: 114df33679b44e86d0801473088bd1d52c208e3b3beb16cc923efac88280fc897bc2b79fd1a7bf2c04579a315898f4029127e5f15dc9557ff3c0ba0e710987eb + languageName: node + linkType: hard + +"@lezer/highlight@npm:^1.0.0, @lezer/highlight@npm:^1.1.3, @lezer/highlight@npm:^1.1.4": + version: 1.1.6 + resolution: "@lezer/highlight@npm:1.1.6" + dependencies: + "@lezer/common": ^1.0.0 + checksum: 411a702394c4c996b7d7f145a38f3a85a8cc698b3918acc7121c629255bb76d4ab383753f69009e011dc415210c6acbbb5b27bde613259ab67e600b29397b03b + languageName: node + linkType: hard + +"@lezer/html@npm:^1.3.0": + version: 1.3.4 + resolution: "@lezer/html@npm:1.3.4" + dependencies: + "@lezer/common": ^1.0.0 + "@lezer/highlight": ^1.0.0 + "@lezer/lr": ^1.0.0 + checksum: 81dd134ac094edf7c40bae4c3b7126d336ce4c3c87756344bf604eff64d89b06fcb55f91618a4622eb0dae6d6015722f5bab58e2252d86e81fca8c3ced1a0c4d + languageName: node + linkType: hard + +"@lezer/java@npm:^1.0.0": + version: 1.0.3 + resolution: "@lezer/java@npm:1.0.3" + dependencies: + "@lezer/highlight": ^1.0.0 + "@lezer/lr": ^1.0.0 + checksum: 2fffea6627d130413ffad4e61040267974cca3167d98881b9e5b5e2455530de74a82c234d93603e92a4972fad314671453c49c0a76b0f4547c4617d671fd7b99 + languageName: node + linkType: hard + +"@lezer/javascript@npm:^1.0.0": + version: 1.4.3 + resolution: "@lezer/javascript@npm:1.4.3" + dependencies: + "@lezer/highlight": ^1.1.3 + "@lezer/lr": ^1.3.0 + checksum: 520dc2d84c84841ef554993c1c0dfe503487aa9be398ebcf617b51d06f99121841d4ca1cf25f3f53d00efa820ea778cc2271da425a606ac66e9f09a4c8cc6677 + languageName: node + linkType: hard + +"@lezer/json@npm:^1.0.0": + version: 1.0.0 + resolution: "@lezer/json@npm:1.0.0" + dependencies: + "@lezer/highlight": ^1.0.0 + "@lezer/lr": ^1.0.0 + checksum: c1ca0cdf681415b58a383a669944bed66da3aa830870d32d1e471d545cff0fe43d9ac8a0d2a318a96daa99cd5a645b1d58ba8fbdd2e8d7ca4d33a62c7582cbab + languageName: node + linkType: hard + +"@lezer/lr@npm:^1.0.0, @lezer/lr@npm:^1.1.0, @lezer/lr@npm:^1.3.0": + version: 1.3.6 + resolution: "@lezer/lr@npm:1.3.6" + dependencies: + "@lezer/common": ^1.0.0 + checksum: b2bbcfecc01bd9c801f3ee636ceda333adbbea1f274017cec6f315a23346e7a035a984f325d4f1cd14b157d74d28badda6f794514c29a0b078f7fb3357cdfc32 + languageName: node + linkType: hard + +"@lezer/markdown@npm:^1.0.0, @lezer/markdown@npm:^1.0.2": + version: 1.0.2 + resolution: "@lezer/markdown@npm:1.0.2" + dependencies: + "@lezer/common": ^1.0.0 + "@lezer/highlight": ^1.0.0 + checksum: c4bbfcd8a5a9d924a7cf2b5e5e99c78e7705473cc59804070278b5cfcf478af9dd567025d0926cbf03e3ea6abb8f173425220d3107c05a2d7e0ca3fe3d5c92ef + languageName: node + linkType: hard + +"@lezer/php@npm:^1.0.0": + version: 1.0.1 + resolution: "@lezer/php@npm:1.0.1" + dependencies: + "@lezer/highlight": ^1.0.0 + "@lezer/lr": ^1.1.0 + checksum: a847c255c030b4d38913ddf1d5bd7324d83be7ef8d1d244542870be03b9bf7dc71283afeb2415c40dfd188cb99f0cc44bad760b5f3b7c35c3b8e5e00253848fc + languageName: node + linkType: hard + +"@lezer/python@npm:^1.1.4": + version: 1.1.7 + resolution: "@lezer/python@npm:1.1.7" + dependencies: + "@lezer/highlight": ^1.0.0 + "@lezer/lr": ^1.0.0 + checksum: 7ae6b4ae770b3cd849eee3d8fb1d904745aee202a76e7db0a079725a97571c4778fa5bd74878206e44aa3349044bf056008e19e7a90650fad93d51890f685077 + languageName: node + linkType: hard + +"@lezer/rust@npm:^1.0.0": + version: 1.0.0 + resolution: "@lezer/rust@npm:1.0.0" + dependencies: + "@lezer/highlight": ^1.0.0 + "@lezer/lr": ^1.0.0 + checksum: 0c42f415674f60ca2ef4274b446577621cdeec8f31168b1c3b90888a4377c513f02a89ee346421c264ec3a77fe2fa3e134996be6463ed506dbbc79b4b4505375 + languageName: node + linkType: hard + +"@lezer/xml@npm:^1.0.0": + version: 1.0.1 + resolution: "@lezer/xml@npm:1.0.1" + dependencies: + "@lezer/highlight": ^1.0.0 + "@lezer/lr": ^1.0.0 + checksum: 271319aa7802c123845b70ffa63d7065c0f92fc6a1ddb1f8ec9f3aa965bca3df3c9fad4d4de53187ddf230e833cd3ab3a84cb2aded76ab5f6831e9a2fc310923 + languageName: node + linkType: hard + +"@lumino/algorithm@npm:*, @lumino/algorithm@npm:^2.0.0, @lumino/algorithm@npm:^2.0.1": + version: 2.0.1 + resolution: "@lumino/algorithm@npm:2.0.1" + checksum: cbf7fcf6ee6b785ea502cdfddc53d61f9d353dcb9659343511d5cd4b4030be2ff2ca4c08daec42f84417ab0318a3d9972a17319fa5231693e109ab112dcf8000 + languageName: node + linkType: hard + +"@lumino/application@npm:^2.2.1": + version: 2.2.1 + resolution: "@lumino/application@npm:2.2.1" + dependencies: + "@lumino/commands": ^2.1.3 + "@lumino/coreutils": ^2.1.2 + "@lumino/widgets": ^2.3.0 + checksum: a33e661703728440bc7d2ddb4674261f4de0d20eb8c9846646cbd6debac03b5c65e78d739a500903550fd83b8f47b47fa82ec178c97bc9967ca3ac4014075cde + languageName: node + linkType: hard + +"@lumino/collections@npm:^2.0.1": + version: 2.0.1 + resolution: "@lumino/collections@npm:2.0.1" + dependencies: + "@lumino/algorithm": ^2.0.1 + checksum: 8a29b7973a388a33c5beda0819dcd2dc2aad51a8406dcfd4581b055a9f77a39dc5800f7a8b4ae3c0bb97ae7b56a7a869e2560ffb7a920a28e93b477ba05907d6 + languageName: node + linkType: hard + +"@lumino/commands@npm:^2.1.3": + version: 2.1.3 + resolution: "@lumino/commands@npm:2.1.3" + dependencies: + "@lumino/algorithm": ^2.0.1 + "@lumino/coreutils": ^2.1.2 + "@lumino/disposable": ^2.1.2 + "@lumino/domutils": ^2.0.1 + "@lumino/keyboard": ^2.0.1 + "@lumino/signaling": ^2.1.2 + "@lumino/virtualdom": ^2.0.1 + checksum: e4e3ee279f2a5e8d68e4ce142c880333f5542f90c684972402356936ecb5cf5e07163800b59e7cb8c911cbdb4e5089edcc5dd2990bc8db10c87517268de1fc5d + languageName: node + linkType: hard + +"@lumino/coreutils@npm:^1.11.0 || ^2.0.0, @lumino/coreutils@npm:^1.11.0 || ^2.1.2, @lumino/coreutils@npm:^2.1.1, @lumino/coreutils@npm:^2.1.2": + version: 2.1.2 + resolution: "@lumino/coreutils@npm:2.1.2" + checksum: 7865317ac0676b448d108eb57ab5d8b2a17c101995c0f7a7106662d9fe6c859570104525f83ee3cda12ae2e326803372206d6f4c1f415a5b59e4158a7b81066f + languageName: node + linkType: hard + +"@lumino/disposable@npm:^1.10.0 || ^2.0.0, @lumino/disposable@npm:^2.1.2": + version: 2.1.2 + resolution: "@lumino/disposable@npm:2.1.2" + dependencies: + "@lumino/signaling": ^2.1.2 + checksum: ac2fb2bf18d0b2939fda454f3db248a0ff6e8a77b401e586d1caa9293b3318f808b93a117c9c3ac27cd17aab545aea83b49108d099b9b2f5503ae2a012fbc6e2 + languageName: node + linkType: hard + +"@lumino/domutils@npm:^2.0.1": + version: 2.0.1 + resolution: "@lumino/domutils@npm:2.0.1" + checksum: 61fa0ab226869dfbb763fc426790cf5a43b7d6f4cea1364c6dd56d61c44bff05eea188d33ff847449608ef58ed343161bee15c19b96f35410e4ee35815dc611a + languageName: node + linkType: hard + +"@lumino/dragdrop@npm:^2.1.3": + version: 2.1.3 + resolution: "@lumino/dragdrop@npm:2.1.3" + dependencies: + "@lumino/coreutils": ^2.1.2 + "@lumino/disposable": ^2.1.2 + checksum: d5f7eb4cc9f9a084cb9af10f02d6741b25d683350878ecbc324e24ba9d4b5246451a410e2ca5fff227aab1c191d1e73a2faf431f93e13111d67a4e426e126258 + languageName: node + linkType: hard + +"@lumino/keyboard@npm:^2.0.1": + version: 2.0.1 + resolution: "@lumino/keyboard@npm:2.0.1" + checksum: cf33f13427a418efd7cc91061233321e860d5404f3d86397781028309bef86c8ad2d88276ffe335c1db0fe619bd9d1e60641c81f881696957a58703ee4652c3e + languageName: node + linkType: hard + +"@lumino/messaging@npm:^2.0.0, @lumino/messaging@npm:^2.0.1": + version: 2.0.1 + resolution: "@lumino/messaging@npm:2.0.1" + dependencies: + "@lumino/algorithm": ^2.0.1 + "@lumino/collections": ^2.0.1 + checksum: 964c4651c374b17452b4252b7d71500b32d2ecd87c192fc5bcf5d3bd1070661d78d07edcac8eca7d1d6fd50aa25992505485e1296d6dd995691b8e349b652045 + languageName: node + linkType: hard + +"@lumino/polling@npm:^2.1.1, @lumino/polling@npm:^2.1.2": + version: 2.1.2 + resolution: "@lumino/polling@npm:2.1.2" + dependencies: + "@lumino/coreutils": ^2.1.2 + "@lumino/disposable": ^2.1.2 + "@lumino/signaling": ^2.1.2 + checksum: fa9b401e6dbeb8f31d7e3ba485e8ef1e0c92b3f2da086239c0ed49931026f5d3528709193c93e031e35ac624fb4bbbfcdcbaa0e25eb797f36e2952e5cd91e9e3 + languageName: node + linkType: hard + +"@lumino/properties@npm:^2.0.1": + version: 2.0.1 + resolution: "@lumino/properties@npm:2.0.1" + checksum: c50173a935148cc4148fdaea119df1d323ee004ae16ab666800388d27e9730345629662d85f25591683329b39f0cdae60ee8c94e8943b4d0ef7d7370a38128d6 + languageName: node + linkType: hard + +"@lumino/signaling@npm:^1.10.0 || ^2.0.0, @lumino/signaling@npm:^2.1.1, @lumino/signaling@npm:^2.1.2": + version: 2.1.2 + resolution: "@lumino/signaling@npm:2.1.2" + dependencies: + "@lumino/algorithm": ^2.0.1 + "@lumino/coreutils": ^2.1.2 + checksum: ad7d7153db57980da899c43e412e6130316ef30b231a70250e7af49058db16cadb018c1417a2ea8083d83c48623cfe6b705fa82bf10216b1a8949aed9f4aca4e + languageName: node + linkType: hard + +"@lumino/virtualdom@npm:^2.0.1": + version: 2.0.1 + resolution: "@lumino/virtualdom@npm:2.0.1" + dependencies: + "@lumino/algorithm": ^2.0.1 + checksum: cf59b6f15b430e13e9e657b7a0619b9056cd9ea7b2a87f407391d071c501b77403c302b6a66dca510382045e75b2e3fe551630bb391f1c6b33678057d4bec164 + languageName: node + linkType: hard + +"@lumino/widgets@npm:^1.37.2 || ^2.3.0, @lumino/widgets@npm:^2.1.1, @lumino/widgets@npm:^2.3.0": + version: 2.3.0 + resolution: "@lumino/widgets@npm:2.3.0" + dependencies: + "@lumino/algorithm": ^2.0.1 + "@lumino/commands": ^2.1.3 + "@lumino/coreutils": ^2.1.2 + "@lumino/disposable": ^2.1.2 + "@lumino/domutils": ^2.0.1 + "@lumino/dragdrop": ^2.1.3 + "@lumino/keyboard": ^2.0.1 + "@lumino/messaging": ^2.0.1 + "@lumino/properties": ^2.0.1 + "@lumino/signaling": ^2.1.2 + "@lumino/virtualdom": ^2.0.1 + checksum: a8559bd3574b7fc16e7679e05994c515b0d3e78dada35786d161f67c639941d134e92ce31d95c2e4ac06709cdf83b0e7fb4b6414a3f7779579222a2fb525d025 + languageName: node + linkType: hard + +"@mapbox/node-pre-gyp@npm:^1.0.0": + version: 1.0.9 + resolution: "@mapbox/node-pre-gyp@npm:1.0.9" + dependencies: + detect-libc: ^2.0.0 + https-proxy-agent: ^5.0.0 + make-dir: ^3.1.0 + node-fetch: ^2.6.7 + nopt: ^5.0.0 + npmlog: ^5.0.1 + rimraf: ^3.0.2 + semver: ^7.3.5 + tar: ^6.1.11 + bin: + node-pre-gyp: bin/node-pre-gyp + checksum: 1b9c4c87a68d200daa13151d0fe033aa7aa8f7b26f3585255424dd8dfee2ec672c3e9bea4071c624469bc0aebbbcde08f8a300c8a958db52c50abadd5fb56920 + languageName: node + linkType: hard + +"@nodelib/fs.scandir@npm:2.1.5": + version: 2.1.5 + resolution: "@nodelib/fs.scandir@npm:2.1.5" + dependencies: + "@nodelib/fs.stat": 2.0.5 + run-parallel: ^1.1.9 + checksum: a970d595bd23c66c880e0ef1817791432dbb7acbb8d44b7e7d0e7a22f4521260d4a83f7f9fd61d44fda4610105577f8f58a60718105fb38352baed612fd79e59 + 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 + languageName: node + linkType: hard + +"@nodelib/fs.walk@npm:^1.2.3, @nodelib/fs.walk@npm:^1.2.8": + version: 1.2.8 + resolution: "@nodelib/fs.walk@npm:1.2.8" + dependencies: + "@nodelib/fs.scandir": 2.1.5 + fastq: ^1.6.0 + checksum: 190c643f156d8f8f277bf2a6078af1ffde1fd43f498f187c2db24d35b4b4b5785c02c7dc52e356497b9a1b65b13edc996de08de0b961c32844364da02986dc53 + languageName: node + linkType: hard + +"@npmcli/arborist@npm:5.3.0": + version: 5.3.0 + resolution: "@npmcli/arborist@npm:5.3.0" + dependencies: + "@isaacs/string-locale-compare": ^1.1.0 + "@npmcli/installed-package-contents": ^1.0.7 + "@npmcli/map-workspaces": ^2.0.3 + "@npmcli/metavuln-calculator": ^3.0.1 + "@npmcli/move-file": ^2.0.0 + "@npmcli/name-from-folder": ^1.0.1 + "@npmcli/node-gyp": ^2.0.0 + "@npmcli/package-json": ^2.0.0 + "@npmcli/run-script": ^4.1.3 + bin-links: ^3.0.0 + cacache: ^16.0.6 + common-ancestor-path: ^1.0.1 + json-parse-even-better-errors: ^2.3.1 + json-stringify-nice: ^1.1.4 + mkdirp: ^1.0.4 + mkdirp-infer-owner: ^2.0.0 + nopt: ^5.0.0 + npm-install-checks: ^5.0.0 + npm-package-arg: ^9.0.0 + npm-pick-manifest: ^7.0.0 + npm-registry-fetch: ^13.0.0 + npmlog: ^6.0.2 + pacote: ^13.6.1 + parse-conflict-json: ^2.0.1 + proc-log: ^2.0.0 + promise-all-reject-late: ^1.0.0 + promise-call-limit: ^1.0.1 + read-package-json-fast: ^2.0.2 + readdir-scoped-modules: ^1.1.0 + rimraf: ^3.0.2 + semver: ^7.3.7 + ssri: ^9.0.0 + treeverse: ^2.0.0 + walk-up-path: ^1.0.0 + bin: + arborist: bin/index.js + checksum: 7f99f451ba625dd3532e7a69b27cc399cab1e7ef2a069bbc04cf22ef9d16a0076f8f5fb92c4cd146c256cd8a41963b2e417684f063a108e96939c440bad0e95e + languageName: node + linkType: hard + +"@npmcli/fs@npm:^1.0.0": + version: 1.1.1 + resolution: "@npmcli/fs@npm:1.1.1" + dependencies: + "@gar/promisify": ^1.0.1 + semver: ^7.3.5 + checksum: f5ad92f157ed222e4e31c352333d0901df02c7c04311e42a81d8eb555d4ec4276ea9c635011757de20cc476755af33e91622838de573b17e52e2e7703f0a9965 + languageName: node + linkType: hard + +"@npmcli/fs@npm:^2.1.0": + version: 2.1.2 + resolution: "@npmcli/fs@npm:2.1.2" + dependencies: + "@gar/promisify": ^1.1.3 + semver: ^7.3.5 + checksum: 405074965e72d4c9d728931b64d2d38e6ea12066d4fad651ac253d175e413c06fe4350970c783db0d749181da8fe49c42d3880bd1cbc12cd68e3a7964d820225 + languageName: node + linkType: hard + +"@npmcli/fs@npm:^3.1.0": + version: 3.1.0 + resolution: "@npmcli/fs@npm:3.1.0" + dependencies: + semver: ^7.3.5 + checksum: a50a6818de5fc557d0b0e6f50ec780a7a02ab8ad07e5ac8b16bf519e0ad60a144ac64f97d05c443c3367235d337182e1d012bbac0eb8dbae8dc7b40b193efd0e + languageName: node + linkType: hard + +"@npmcli/git@npm:^3.0.0": + version: 3.0.2 + resolution: "@npmcli/git@npm:3.0.2" + dependencies: + "@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 + promise-inflight: ^1.0.1 + promise-retry: ^2.0.1 + semver: ^7.3.5 + which: ^2.0.2 + checksum: bdfd1229bb1113ad4883ef89b74b5dc442a2c96225d830491dd0dec4fa83d083b93cde92b6978d4956a8365521e61bc8dc1891fb905c7c693d5d6aa178f2ab44 + languageName: node + linkType: hard + +"@npmcli/installed-package-contents@npm:^1.0.7": + version: 1.0.7 + resolution: "@npmcli/installed-package-contents@npm:1.0.7" + dependencies: + npm-bundled: ^1.1.1 + npm-normalize-package-bin: ^1.0.1 + bin: + installed-package-contents: index.js + checksum: a4a29b99d439827ce2e7817c1f61b56be160e640696e31dc513a2c8a37c792f75cdb6258ec15a1e22904f20df0a8a3019dd3766de5e6619f259834cf64233538 + languageName: node + linkType: hard + +"@npmcli/map-workspaces@npm:^2.0.3": + version: 2.0.4 + resolution: "@npmcli/map-workspaces@npm:2.0.4" + dependencies: + "@npmcli/name-from-folder": ^1.0.1 + glob: ^8.0.1 + minimatch: ^5.0.1 + read-package-json-fast: ^2.0.3 + checksum: cc8d662ac5115ad9822742a11e11d2d32eda74214bd0f4efec30c9cd833975b5b4c8409fe54ddbb451b040b17a943f770976506cba0f26cfccd58d99b5880d6f + languageName: node + linkType: hard + +"@npmcli/metavuln-calculator@npm:^3.0.1": + version: 3.1.1 + resolution: "@npmcli/metavuln-calculator@npm:3.1.1" + dependencies: + cacache: ^16.0.0 + json-parse-even-better-errors: ^2.3.1 + pacote: ^13.0.3 + semver: ^7.3.5 + checksum: dc9846fdb82a1f4274ff8943f81452c75615bd9bca523c862956ea2c32e18c5a4be5572e169104d3a0eb262b7ede72c8dbbc202a4ab3b3f4946fa55f226dcc64 + languageName: node + linkType: hard + +"@npmcli/move-file@npm:^1.0.1": + version: 1.1.2 + resolution: "@npmcli/move-file@npm:1.1.2" + dependencies: + mkdirp: ^1.0.4 + rimraf: ^3.0.2 + checksum: c96381d4a37448ea280951e46233f7e541058cf57a57d4094dd4bdcaae43fa5872b5f2eb6bfb004591a68e29c5877abe3cdc210cb3588cbf20ab2877f31a7de7 + 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: ^1.0.4 + rimraf: ^3.0.2 + checksum: 52dc02259d98da517fae4cb3a0a3850227bdae4939dda1980b788a7670636ca2b4a01b58df03dd5f65c1e3cb70c50fa8ce5762b582b3f499ec30ee5ce1fd9380 + languageName: node + linkType: hard + +"@npmcli/name-from-folder@npm:^1.0.1": + version: 1.0.1 + resolution: "@npmcli/name-from-folder@npm:1.0.1" + checksum: 67339f4096e32b712d2df0250cc95c087569f09e657d7f81a1760fa2cc5123e29c3c3e1524388832310ba2d96ec4679985b643b44627f6a51f4a00c3b0075de9 + languageName: node + linkType: hard + +"@npmcli/node-gyp@npm:^2.0.0": + version: 2.0.0 + resolution: "@npmcli/node-gyp@npm:2.0.0" + checksum: b6bbf0015000f9b64d31aefdc30f244b0348c57adb64017667e0304e96c38644d83da46a4581252652f5d606268df49118f9c9993b41d8020f62b7b15dd2c8d8 + languageName: node + linkType: hard + +"@npmcli/package-json@npm:^2.0.0": + version: 2.0.0 + resolution: "@npmcli/package-json@npm:2.0.0" + dependencies: + json-parse-even-better-errors: ^2.3.1 + checksum: 7a598e42d2778654ec87438ebfafbcbafbe5a5f5e89ed2ca1db6ca3f94ef14655e304aa41f77632a2a3f5c66b6bd5960bd9370e0ceb4902ea09346720364f9e4 + languageName: node + linkType: hard + +"@npmcli/promise-spawn@npm:^3.0.0": + version: 3.0.0 + resolution: "@npmcli/promise-spawn@npm:3.0.0" + dependencies: + infer-owner: ^1.0.4 + checksum: 3454465a2731cea5875ba51f80873e2205e5bd878c31517286b0ede4ea931c7bf3de895382287e906d03710fff6f9e44186bd0eee068ce578901c5d3b58e7692 + languageName: node + linkType: hard + +"@npmcli/run-script@npm:4.1.7, @npmcli/run-script@npm:^4.1.0, @npmcli/run-script@npm:^4.1.3": + version: 4.1.7 + resolution: "@npmcli/run-script@npm:4.1.7" + 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 + which: ^2.0.2 + checksum: 87c32b12fed981fe8a48de985dd1ae0350bcda2830ca4a35efe4b2b96932905cccd04e6e2de5bfea8ed4e2bf3b6f8315630ff9a09c72f80ff3c49f19a9fc80ff + languageName: node + linkType: hard + +"@nrwl/cli@npm:15.9.4": + version: 15.9.4 + resolution: "@nrwl/cli@npm:15.9.4" + dependencies: + nx: 15.9.4 + checksum: 039df998bbc56cc6d506a4c07500c97ce6662dff1ed0756d893d48398ffbfcfc9a1c274914011dbe331c0663b5c3e6de496ad6cdd05180ea0505fdcee19c67ff + languageName: node + linkType: hard + +"@nrwl/devkit@npm:>=15.5.2 < 16": + version: 15.9.4 + resolution: "@nrwl/devkit@npm:15.9.4" + dependencies: + ejs: ^3.1.7 + ignore: ^5.0.4 + semver: 7.3.4 + tmp: ~0.2.1 + tslib: ^2.3.0 + peerDependencies: + nx: ">= 14.1 <= 16" + checksum: 4207edab94384315bc80da673ae5c31bd63a8944c69ad1a2a2834d0e6f9ef5eb8a4118a1943ae855c6da889e326490cc4e5df718cb8df5853263e3b3c44d0148 + languageName: node + linkType: hard + +"@nrwl/nx-darwin-arm64@npm:15.9.4": + version: 15.9.4 + resolution: "@nrwl/nx-darwin-arm64@npm:15.9.4" + conditions: os=darwin & cpu=arm64 + languageName: node + linkType: hard + +"@nrwl/nx-darwin-x64@npm:15.9.4": + version: 15.9.4 + resolution: "@nrwl/nx-darwin-x64@npm:15.9.4" + conditions: os=darwin & cpu=x64 + languageName: node + linkType: hard + +"@nrwl/nx-linux-arm-gnueabihf@npm:15.9.4": + version: 15.9.4 + resolution: "@nrwl/nx-linux-arm-gnueabihf@npm:15.9.4" + conditions: os=linux & cpu=arm + languageName: node + linkType: hard + +"@nrwl/nx-linux-arm64-gnu@npm:15.9.4": + version: 15.9.4 + resolution: "@nrwl/nx-linux-arm64-gnu@npm:15.9.4" + conditions: os=linux & cpu=arm64 & libc=glibc + languageName: node + linkType: hard + +"@nrwl/nx-linux-arm64-musl@npm:15.9.4": + version: 15.9.4 + resolution: "@nrwl/nx-linux-arm64-musl@npm:15.9.4" + conditions: os=linux & cpu=arm64 & libc=musl + languageName: node + linkType: hard + +"@nrwl/nx-linux-x64-gnu@npm:15.9.4": + version: 15.9.4 + resolution: "@nrwl/nx-linux-x64-gnu@npm:15.9.4" + conditions: os=linux & cpu=x64 & libc=glibc + languageName: node + linkType: hard + +"@nrwl/nx-linux-x64-musl@npm:15.9.4": + version: 15.9.4 + resolution: "@nrwl/nx-linux-x64-musl@npm:15.9.4" + conditions: os=linux & cpu=x64 & libc=musl + languageName: node + linkType: hard + +"@nrwl/nx-win32-arm64-msvc@npm:15.9.4": + version: 15.9.4 + resolution: "@nrwl/nx-win32-arm64-msvc@npm:15.9.4" + conditions: os=win32 & cpu=arm64 + languageName: node + linkType: hard + +"@nrwl/nx-win32-x64-msvc@npm:15.9.4": + version: 15.9.4 + resolution: "@nrwl/nx-win32-x64-msvc@npm:15.9.4" + conditions: os=win32 & cpu=x64 + languageName: node + linkType: hard + +"@nrwl/tao@npm:15.9.4": + version: 15.9.4 + resolution: "@nrwl/tao@npm:15.9.4" + dependencies: + nx: 15.9.4 + bin: + tao: index.js + checksum: 03acf914b443fc5b0a93674dbdf9d770856d48adf8956819869aef6c5378ecb52e9696361e8c8799c639fd384f7ab5d109189d44251a8975901adcfe77fa0c9e + languageName: node + linkType: hard + +"@octokit/auth-token@npm:^3.0.0": + version: 3.0.1 + resolution: "@octokit/auth-token@npm:3.0.1" + dependencies: + "@octokit/types": ^7.0.0 + checksum: e94ba5abc2f86cf49e8dc0b86225f2fdda6af451328b13a43d68972117d4e3dccba5cb375fa0c5970a43c9392665bf4e4f0ef1332522f76d4fa4b16c5ad6cc1d + languageName: node + linkType: hard + +"@octokit/core@npm:^4.0.0": + version: 4.0.5 + resolution: "@octokit/core@npm:4.0.5" + dependencies: + "@octokit/auth-token": ^3.0.0 + "@octokit/graphql": ^5.0.0 + "@octokit/request": ^6.0.0 + "@octokit/request-error": ^3.0.0 + "@octokit/types": ^7.0.0 + before-after-hook: ^2.2.0 + universal-user-agent: ^6.0.0 + checksum: 6e4a2161d22b9cb24cd1cf702e6d18200fc48a29dc66db08c37809d65243d29429123652072126d9f161e45aef6a57e72a5d56d7e975829c190e8c3c46b3f1b9 + languageName: node + linkType: hard + +"@octokit/endpoint@npm:^7.0.0": + version: 7.0.1 + resolution: "@octokit/endpoint@npm:7.0.1" + dependencies: + "@octokit/types": ^7.0.0 + is-plain-object: ^5.0.0 + universal-user-agent: ^6.0.0 + checksum: a0ff70202e8355845e9462df4e56e7ce4b32f15eddfb169d91e9939b7602fb05c78088b9d1ac9936b1655d61a883c7fe7b08e8f60c100ee05f40844bb4a95097 + languageName: node + linkType: hard + +"@octokit/graphql@npm:^5.0.0": + version: 5.0.1 + resolution: "@octokit/graphql@npm:5.0.1" + dependencies: + "@octokit/request": ^6.0.0 + "@octokit/types": ^7.0.0 + universal-user-agent: ^6.0.0 + checksum: 310549c2d7966adb46428e943cd99cb766519819bd4945d8349d3ec0642e4ee39d9194e1b0a87a5404951c04c247fafb4a8456ed4c839c64bfb4042aa4a6812c + languageName: node + linkType: hard + +"@octokit/openapi-types@npm:^12.11.0": + version: 12.11.0 + resolution: "@octokit/openapi-types@npm:12.11.0" + checksum: 8a7d4bd6288cc4085cabe0ca9af2b87c875c303af932cb138aa1b2290eb69d32407759ac23707bb02776466e671244a902e9857896903443a69aff4b6b2b0e3b + languageName: node + linkType: hard + +"@octokit/openapi-types@npm:^13.4.0": + version: 13.4.0 + resolution: "@octokit/openapi-types@npm:13.4.0" + checksum: e5bb4573f065d0847c783db818eaa28fe2f8ec160334060e606c65dbf96a8c2108bcfed03da457e25b5dd9c0847b09cccf1206c709ee45c43108bb5d29808e9e + languageName: node + linkType: hard + +"@octokit/plugin-enterprise-rest@npm:6.0.1": + version: 6.0.1 + resolution: "@octokit/plugin-enterprise-rest@npm:6.0.1" + checksum: 1c9720002f31daf62f4f48e73557dcdd7fcde6e0f6d43256e3f2ec827b5548417297186c361fb1af497fdcc93075a7b681e6ff06e2f20e4a8a3e74cc09d1f7e3 + languageName: node + linkType: hard + +"@octokit/plugin-paginate-rest@npm:^3.0.0": + version: 3.1.0 + resolution: "@octokit/plugin-paginate-rest@npm:3.1.0" + dependencies: + "@octokit/types": ^6.41.0 + peerDependencies: + "@octokit/core": ">=4" + checksum: a09212a1c6e0be4a7929acd192659cb204fcb7c6a52cf7e7f1b87da0338d812c8c26e7ee44d00e8b9824d8904d6caaa978a84c26001ab982ffec5123600aa4d8 + languageName: node + linkType: hard + +"@octokit/plugin-request-log@npm:^1.0.4": + version: 1.0.4 + resolution: "@octokit/plugin-request-log@npm:1.0.4" + peerDependencies: + "@octokit/core": ">=3" + checksum: 2086db00056aee0f8ebd79797b5b57149ae1014e757ea08985b71eec8c3d85dbb54533f4fd34b6b9ecaa760904ae6a7536be27d71e50a3782ab47809094bfc0c + languageName: node + linkType: hard + +"@octokit/plugin-rest-endpoint-methods@npm:^6.0.0": + version: 6.3.0 + resolution: "@octokit/plugin-rest-endpoint-methods@npm:6.3.0" + dependencies: + "@octokit/types": ^7.0.0 + deprecation: ^2.3.1 + peerDependencies: + "@octokit/core": ">=3" + checksum: 8fefbdcfc16fe39aa216c440cf52c2861f6c0c905f1fdfbd0e720fb59815c079100b877535bcd428cb782ef31a8d508470d69d4ecf307b8af4ccc34a5669c050 + languageName: node + linkType: hard + +"@octokit/request-error@npm:^3.0.0": + version: 3.0.1 + resolution: "@octokit/request-error@npm:3.0.1" + dependencies: + "@octokit/types": ^7.0.0 + deprecation: ^2.0.0 + once: ^1.4.0 + checksum: ae386b5181b3cb66b844047a21d062b683cd7ec4daf70cb9868406c1a51608a72d683955e692c7cc6237d66a09b12c6bcf102a712985da68bcedcc3820117e75 + languageName: node + linkType: hard + +"@octokit/request@npm:^6.0.0": + version: 6.2.1 + resolution: "@octokit/request@npm:6.2.1" + dependencies: + "@octokit/endpoint": ^7.0.0 + "@octokit/request-error": ^3.0.0 + "@octokit/types": ^7.0.0 + is-plain-object: ^5.0.0 + node-fetch: ^2.6.7 + universal-user-agent: ^6.0.0 + checksum: f0a3e878de8c2e6930da5af835d9a3750800eff9ba66af02400dc75238475a9b9c2c5473047792c0f37c2c371095a36485c0729c419873bdccb6058bb8637685 + languageName: node + linkType: hard + +"@octokit/rest@npm:19.0.3": + version: 19.0.3 + resolution: "@octokit/rest@npm:19.0.3" + dependencies: + "@octokit/core": ^4.0.0 + "@octokit/plugin-paginate-rest": ^3.0.0 + "@octokit/plugin-request-log": ^1.0.4 + "@octokit/plugin-rest-endpoint-methods": ^6.0.0 + checksum: 9ee96976c4c22dab11b3dacd541e694f3ad9bb1d44243985dc90ce6e8a42c3e3176a206e8d3a883b63b517fc15af8c8c88d8d0ecd9bac2b86a635a9667fc6ff4 + languageName: node + linkType: hard + +"@octokit/types@npm:^6.41.0": + version: 6.41.0 + resolution: "@octokit/types@npm:6.41.0" + dependencies: + "@octokit/openapi-types": ^12.11.0 + checksum: fd6f75e0b19b90d1a3d244d2b0c323ed8f2f05e474a281f60a321986683548ef2e0ec2b3a946aa9405d6092e055344455f69f58957c60f58368c8bdda5b7d2ab + languageName: node + linkType: hard + +"@octokit/types@npm:^7.0.0": + version: 7.1.1 + resolution: "@octokit/types@npm:7.1.1" + dependencies: + "@octokit/openapi-types": ^13.4.0 + checksum: fe7847fe996b14761d1ca3e6dbb1b33bb180fc9b28ac602fab939fcdb729d99ec30a210f9ede6cd88a41cd04b3b49126ec3794220724a3be3d7863cdfbd9d490 + languageName: node + linkType: hard + +"@parcel/watcher@npm:2.0.4": + version: 2.0.4 + resolution: "@parcel/watcher@npm:2.0.4" + dependencies: + node-addon-api: ^3.2.1 + node-gyp: latest + node-gyp-build: ^4.3.0 + checksum: 890bdc69a52942791b276caa2cd65ef816576d6b5ada91aa28cf302b35d567c801dafe167f2525dcb313f5b420986ea11bd56228dd7ddde1116944d8f924a0a1 + languageName: node + linkType: hard + +"@pkgjs/parseargs@npm:^0.11.0": + version: 0.11.0 + resolution: "@pkgjs/parseargs@npm:0.11.0" + checksum: 6ad6a00fc4f2f2cfc6bff76fb1d88b8ee20bc0601e18ebb01b6d4be583733a860239a521a7fbca73b612e66705078809483549d2b18f370eb346c5155c8e4a0f + languageName: node + linkType: hard + +"@rjsf/core@npm:^5.1.0": + version: 5.8.1 + resolution: "@rjsf/core@npm:5.8.1" + dependencies: + lodash: ^4.17.21 + lodash-es: ^4.17.21 + markdown-to-jsx: ^7.2.1 + nanoid: ^3.3.6 + prop-types: ^15.8.1 + peerDependencies: + "@rjsf/utils": ^5.8.x + react: ^16.14.0 || >=17 + checksum: 616691f66285c89d7fb378bbad787960adcf7e8941b3287dce543f022dce3106b80d41cf1f41de926cd8dbe1f5006c5fcc0a6597bbca7ee9a13d422b967bb986 + languageName: node + linkType: hard + +"@rjsf/utils@npm:^5.1.0": + version: 5.8.1 + resolution: "@rjsf/utils@npm:5.8.1" + dependencies: + json-schema-merge-allof: ^0.8.1 + jsonpointer: ^5.0.1 + lodash: ^4.17.21 + lodash-es: ^4.17.21 + react-is: ^18.2.0 + peerDependencies: + react: ^16.14.0 || >=17 + checksum: 7a567ab45e62de01020a6bccd1da20e55a7a484bc5d367e3ded56ba3971d196646b690767c4f2d2840b2df1acdf5cd5611c892b1ce3c59defdd6201a107e6ff4 + languageName: node + linkType: hard + +"@rjsf/validator-ajv8@npm:^5.12.1": + version: 5.12.1 + resolution: "@rjsf/validator-ajv8@npm:5.12.1" + dependencies: + ajv: ^8.12.0 + ajv-formats: ^2.1.1 + lodash: ^4.17.21 + lodash-es: ^4.17.21 + peerDependencies: + "@rjsf/utils": ^5.8.x + checksum: da4936db733ff52cedb5c55a05112f57cbb20b186f3fae14d1d108f1a8f8561e4cc4b9c08e1f5056590394eede4b2ef1818947b58778bfbcdc8f227a23c46413 + languageName: node + linkType: hard + +"@sinclair/typebox@npm:^0.27.8": + version: 0.27.8 + resolution: "@sinclair/typebox@npm:0.27.8" + checksum: 00bd7362a3439021aa1ea51b0e0d0a0e8ca1351a3d54c606b115fdcc49b51b16db6e5f43b4fe7a28c38688523e22a94d49dd31168868b655f0d4d50f032d07a1 + languageName: node + linkType: hard + +"@sinonjs/commons@npm:^3.0.0": + version: 3.0.0 + resolution: "@sinonjs/commons@npm:3.0.0" + dependencies: + type-detect: 4.0.8 + checksum: b4b5b73d4df4560fb8c0c7b38c7ad4aeabedd362f3373859d804c988c725889cde33550e4bcc7cd316a30f5152a2d1d43db71b6d0c38f5feef71fd8d016763f8 + languageName: node + linkType: hard + +"@sinonjs/fake-timers@npm:^10.0.2": + version: 10.2.0 + resolution: "@sinonjs/fake-timers@npm:10.2.0" + dependencies: + "@sinonjs/commons": ^3.0.0 + checksum: 586c76e1dd90d03b0c4e754f2011325b38ac6055878c81c52434c900f36d9d245438c96ef69e08e28d9fbecf2335fb347b67850962d8b6e539dd7359d8c62802 + languageName: node + linkType: hard + +"@tootallnate/once@npm:1": + version: 1.1.2 + resolution: "@tootallnate/once@npm:1.1.2" + checksum: e1fb1bbbc12089a0cb9433dc290f97bddd062deadb6178ce9bcb93bb7c1aecde5e60184bc7065aec42fe1663622a213493c48bbd4972d931aae48315f18e1be9 + 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 + +"@types/babel__core@npm:^7.1.14": + version: 7.20.1 + resolution: "@types/babel__core@npm:7.20.1" + dependencies: + "@babel/parser": ^7.20.7 + "@babel/types": ^7.20.7 + "@types/babel__generator": "*" + "@types/babel__template": "*" + "@types/babel__traverse": "*" + checksum: 9fcd9691a33074802d9057ff70b0e3ff3778f52470475b68698a0f6714fbe2ccb36c16b43dc924eb978cd8a81c1f845e5ff4699e7a47606043b539eb8c6331a8 + languageName: node + linkType: hard + +"@types/babel__generator@npm:*": + version: 7.6.4 + resolution: "@types/babel__generator@npm:7.6.4" + dependencies: + "@babel/types": ^7.0.0 + checksum: 20effbbb5f8a3a0211e95959d06ae70c097fb6191011b73b38fe86deebefad8e09ee014605e0fd3cdaedc73d158be555866810e9166e1f09e4cfd880b874dcb0 + languageName: node + linkType: hard + +"@types/babel__template@npm:*": + version: 7.4.1 + resolution: "@types/babel__template@npm:7.4.1" + dependencies: + "@babel/parser": ^7.1.0 + "@babel/types": ^7.0.0 + checksum: 649fe8b42c2876be1fd28c6ed9b276f78152d5904ec290b6c861d9ef324206e0a5c242e8305c421ac52ecf6358fa7e32ab7a692f55370484825c1df29b1596ee + languageName: node + linkType: hard + +"@types/babel__traverse@npm:*, @types/babel__traverse@npm:^7.0.6": + version: 7.18.3 + resolution: "@types/babel__traverse@npm:7.18.3" + dependencies: + "@babel/types": ^7.3.0 + checksum: d20953338b2f012ab7750932ece0a78e7d1645b0a6ff42d49be90f55e9998085da1374a9786a7da252df89555c6586695ba4d1d4b4e88ab2b9f306bcd35e00d3 + languageName: node + linkType: hard + +"@types/eslint-scope@npm:^3.7.3": + version: 3.7.4 + resolution: "@types/eslint-scope@npm:3.7.4" + dependencies: + "@types/eslint": "*" + "@types/estree": "*" + checksum: ea6a9363e92f301cd3888194469f9ec9d0021fe0a397a97a6dd689e7545c75de0bd2153dfb13d3ab532853a278b6572c6f678ce846980669e41029d205653460 + languageName: node + linkType: hard + +"@types/eslint@npm:*": + version: 8.21.1 + resolution: "@types/eslint@npm:8.21.1" + dependencies: + "@types/estree": "*" + "@types/json-schema": "*" + checksum: 584068441e4000c7b41c8928274fdcc737bc62f564928c30eb64ec41bbdbac31612f9fedaf490bceab31ec8305e99615166428188ea345d58878394683086fae + languageName: node + linkType: hard + +"@types/estree@npm:*, @types/estree@npm:^1.0.0": + version: 1.0.1 + resolution: "@types/estree@npm:1.0.1" + checksum: e9aa175eacb797216fafce4d41e8202c7a75555bc55232dee0f9903d7171f8f19f0ae7d5191bb1a88cb90e65468be508c0df850a9fb81b4433b293a5a749899d + languageName: node + linkType: hard + +"@types/graceful-fs@npm:^4.1.3": + version: 4.1.6 + resolution: "@types/graceful-fs@npm:4.1.6" + dependencies: + "@types/node": "*" + checksum: c3070ccdc9ca0f40df747bced1c96c71a61992d6f7c767e8fd24bb6a3c2de26e8b84135ede000b7e79db530a23e7e88dcd9db60eee6395d0f4ce1dae91369dd4 + languageName: node + linkType: hard + +"@types/is-glob@npm:^4.0.1": + version: 4.0.1 + resolution: "@types/is-glob@npm:4.0.1" + checksum: e6108ce6275b073ae101890c9168c283b1f4129c5aa02ca1909a068459399ded5231b368a6c9bcb8ea30b661b2e61d09c54114f6c493f50ec7083a7b31f6e88e + languageName: node + linkType: hard + +"@types/istanbul-lib-coverage@npm:*, @types/istanbul-lib-coverage@npm:^2.0.0, @types/istanbul-lib-coverage@npm:^2.0.1": + version: 2.0.4 + resolution: "@types/istanbul-lib-coverage@npm:2.0.4" + checksum: a25d7589ee65c94d31464c16b72a9dc81dfa0bea9d3e105ae03882d616e2a0712a9c101a599ec482d297c3591e16336962878cb3eb1a0a62d5b76d277a890ce7 + languageName: node + linkType: hard + +"@types/istanbul-lib-report@npm:*": + version: 3.0.0 + resolution: "@types/istanbul-lib-report@npm:3.0.0" + dependencies: + "@types/istanbul-lib-coverage": "*" + checksum: 656398b62dc288e1b5226f8880af98087233cdb90100655c989a09f3052b5775bf98ba58a16c5ae642fb66c61aba402e07a9f2bff1d1569e3b306026c59f3f36 + languageName: node + linkType: hard + +"@types/istanbul-reports@npm:^3.0.0": + version: 3.0.1 + resolution: "@types/istanbul-reports@npm:3.0.1" + dependencies: + "@types/istanbul-lib-report": "*" + checksum: f1ad54bc68f37f60b30c7915886b92f86b847033e597f9b34f2415acdbe5ed742fa559a0a40050d74cdba3b6a63c342cac1f3a64dba5b68b66a6941f4abd7903 + languageName: node + linkType: hard + +"@types/jest@npm:^29.5.4": + version: 29.5.4 + resolution: "@types/jest@npm:29.5.4" + dependencies: + expect: ^29.0.0 + pretty-format: ^29.0.0 + checksum: 38ed5942f44336452efd0f071eab60aaa57cd8d46530348d0a3aa5a691dcbf1366c4ca8f6ee8364efb45b4413bfefae443e5d4f469246a472a03b21ac11cd4ed + languageName: node + linkType: hard + +"@types/jsdom@npm:^20.0.0": + version: 20.0.1 + resolution: "@types/jsdom@npm:20.0.1" + dependencies: + "@types/node": "*" + "@types/tough-cookie": "*" + parse5: ^7.0.0 + checksum: d55402c5256ef451f93a6e3d3881f98339fe73a5ac2030588df056d6835df8367b5a857b48d27528289057e26dcdd3f502edc00cb877c79174cb3a4c7f2198c1 + languageName: node + linkType: hard + +"@types/json-schema@npm:*, @types/json-schema@npm:^7.0.3, @types/json-schema@npm:^7.0.5, @types/json-schema@npm:^7.0.8, @types/json-schema@npm:^7.0.9": + version: 7.0.11 + resolution: "@types/json-schema@npm:7.0.11" + checksum: 527bddfe62db9012fccd7627794bd4c71beb77601861055d87e3ee464f2217c85fca7a4b56ae677478367bbd248dbde13553312b7d4dbc702a2f2bbf60c4018d + languageName: node + linkType: hard + +"@types/json5@npm:^0.0.29": + version: 0.0.29 + resolution: "@types/json5@npm:0.0.29" + checksum: e60b153664572116dfea673c5bda7778dbff150498f44f998e34b5886d8afc47f16799280e4b6e241c0472aef1bc36add771c569c68fc5125fc2ae519a3eb9ac + languageName: node + linkType: hard + +"@types/lodash.mergewith@npm:^4.6.1": + version: 4.6.7 + resolution: "@types/lodash.mergewith@npm:4.6.7" + dependencies: + "@types/lodash": "*" + checksum: 71e86dfd3f6058213f102b5f11087976c042709003e9ef1d62bf29363b8c2608c130bb8804ec8d54b2bfd9f1fae8bcf5478db602b36884022550c6dcfd7d69ab + languageName: node + linkType: hard + +"@types/lodash@npm:*": + version: 4.14.182 + resolution: "@types/lodash@npm:4.14.182" + checksum: 7dd137aa9dbabd632408bd37009d984655164fa1ecc3f2b6eb94afe35bf0a5852cbab6183148d883e9c73a958b7fec9a9bcf7c8e45d41195add6a18c34958209 + languageName: node + linkType: hard + +"@types/minimatch@npm:^3.0.3": + version: 3.0.5 + resolution: "@types/minimatch@npm:3.0.5" + checksum: c41d136f67231c3131cf1d4ca0b06687f4a322918a3a5adddc87ce90ed9dbd175a3610adee36b106ae68c0b92c637c35e02b58c8a56c424f71d30993ea220b92 + languageName: node + linkType: hard + +"@types/minimist@npm:^1.2.0": + version: 1.2.0 + resolution: "@types/minimist@npm:1.2.0" + checksum: 30cbd9acd7ddb60bc3729adcc43a9da4940c90180fa0f08228f1da95ec6c00db2e3fd3af5280fc5345e3fa2637253bb5cf6625f30d571ef9bc3820a531febb7e + languageName: node + linkType: hard + +"@types/mkdirp@npm:^0.5.2": + version: 0.5.2 + resolution: "@types/mkdirp@npm:0.5.2" + dependencies: + "@types/node": "*" + checksum: 21e6681ee18cee6314dbe0f57ada48981912b76de8266f438ba2573770d60aaa8dd376baad3f20e2346696a7cca84b0aadd1737222341553a0091831a46e6ad1 + languageName: node + linkType: hard + +"@types/node@npm:*": + version: 20.2.1 + resolution: "@types/node@npm:20.2.1" + checksum: ed774afa6e9b4ad7868ed0182a8ca40ad0dd54815a70d3051b23fa850f3bca6bea4d0cb55e1fc769666786ac2cc4c1b37aeade313cb4c4634133f18ebcded496 + languageName: node + linkType: hard + +"@types/normalize-package-data@npm:^2.4.0": + version: 2.4.1 + resolution: "@types/normalize-package-data@npm:2.4.1" + checksum: e87bccbf11f95035c89a132b52b79ce69a1e3652fe55962363063c9c0dae0fe2477ebc585e03a9652adc6f381d24ba5589cc5e51849df4ced3d3e004a7d40ed5 + languageName: node + linkType: hard + +"@types/parse-json@npm:^4.0.0": + version: 4.0.0 + resolution: "@types/parse-json@npm:4.0.0" + checksum: fd6bce2b674b6efc3db4c7c3d336bd70c90838e8439de639b909ce22f3720d21344f52427f1d9e57b265fcb7f6c018699b99e5e0c208a1a4823014269a6bf35b + languageName: node + linkType: hard + +"@types/pg@npm:^7.4.10": + version: 7.14.11 + resolution: "@types/pg@npm:7.14.11" + dependencies: + "@types/node": "*" + pg-protocol: ^1.2.0 + pg-types: ^2.2.0 + checksum: f398cad6a3a965eda71fa273a58013c4d5db6fda210e154e084206c3bf17c9b27c894e58af231f8b08fc606ecb71f1f58a17df218753530f51bbebf239efbfb3 + languageName: node + linkType: hard + +"@types/prettier@npm:^1.16.1": + version: 1.19.1 + resolution: "@types/prettier@npm:1.19.1" + checksum: d34229c37d3419b01efa31968b68c33b8b9b717bdf961e48f68e89821864b1329c45323d28e1200a204e7b2eefca1dabdac4aa0c3d698dbc8c60247322103b11 + languageName: node + linkType: hard + +"@types/prettier@npm:^2.1.5": + version: 2.7.3 + resolution: "@types/prettier@npm:2.7.3" + checksum: 705384209cea6d1433ff6c187c80dcc0b95d99d5c5ce21a46a9a58060c527973506822e428789d842761e0280d25e3359300f017fbe77b9755bc772ab3dc2f83 + languageName: node + linkType: hard + +"@types/prop-types@npm:*": + version: 15.7.5 + resolution: "@types/prop-types@npm:15.7.5" + checksum: 5b43b8b15415e1f298243165f1d44390403bb2bd42e662bca3b5b5633fdd39c938e91b7fce3a9483699db0f7a715d08cef220c121f723a634972fdf596aec980 + languageName: node + linkType: hard + +"@types/react@npm:^18.0.26": + version: 18.2.12 + resolution: "@types/react@npm:18.2.12" + dependencies: + "@types/prop-types": "*" + "@types/scheduler": "*" + csstype: ^3.0.2 + checksum: ad85a7eadaf1b35cfeee9f715b39311420ff46d46e0650377d918b3f888c2e47416037da4a765e1dccd3d1916abd54c105a3bee803c971ba56c955a7768ce976 + languageName: node + linkType: hard + +"@types/scheduler@npm:*": + version: 0.16.2 + resolution: "@types/scheduler@npm:0.16.2" + checksum: b6b4dcfeae6deba2e06a70941860fb1435730576d3689225a421280b7742318d1548b3d22c1f66ab68e414f346a9542f29240bc955b6332c5b11e561077583bc + languageName: node + linkType: hard + +"@types/semver@npm:^7.3.12": + version: 7.3.13 + resolution: "@types/semver@npm:7.3.13" + checksum: 00c0724d54757c2f4bc60b5032fe91cda6410e48689633d5f35ece8a0a66445e3e57fa1d6e07eb780f792e82ac542948ec4d0b76eb3484297b79bd18b8cf1cb0 + languageName: node + linkType: hard + +"@types/source-list-map@npm:*": + version: 0.1.2 + resolution: "@types/source-list-map@npm:0.1.2" + checksum: fda8f37537aca9d3ed860d559289ab1dddb6897e642e6f53e909bbd18a7ac3129a8faa2a7d093847c91346cf09c86ef36e350c715406fba1f2271759b449adf6 + languageName: node + linkType: hard + +"@types/stack-utils@npm:^2.0.0": + version: 2.0.1 + resolution: "@types/stack-utils@npm:2.0.1" + checksum: 205fdbe3326b7046d7eaf5e494d8084f2659086a266f3f9cf00bccc549c8e36e407f88168ad4383c8b07099957ad669f75f2532ed4bc70be2b037330f7bae019 + languageName: node + linkType: hard + +"@types/tough-cookie@npm:*": + version: 4.0.2 + resolution: "@types/tough-cookie@npm:4.0.2" + checksum: e055556ffdaa39ad85ede0af192c93f93f986f4bd9e9426efdc2948e3e2632db3a4a584d4937dbf6d7620527419bc99e6182d3daf2b08685e710f2eda5291905 + languageName: node + linkType: hard + +"@types/unist@npm:*, @types/unist@npm:^2.0.0, @types/unist@npm:^2.0.2": + version: 2.0.3 + resolution: "@types/unist@npm:2.0.3" + checksum: 4427306b094561da28164e7e5250c4e6b382cb8eac40bf7e6bb0ff1e6e00c13e47aaf32e4a08fc8ba54602d07f79a39fb9ba304cc9dc886b1e3caf824649edbd + languageName: node + linkType: hard + +"@types/vfile-message@npm:*": + version: 2.0.0 + resolution: "@types/vfile-message@npm:2.0.0" + dependencies: + vfile-message: "*" + checksum: 3c019a88d6ae8bb77316345d50497fecbb4f020057afb1c330ccb936a48f1bc412e5a09e1accb1537d22e7776b88e25679c477088048d575f477cbe3777eb605 + languageName: node + linkType: hard + +"@types/vfile@npm:^3.0.0": + version: 3.0.2 + resolution: "@types/vfile@npm:3.0.2" + dependencies: + "@types/node": "*" + "@types/unist": "*" + "@types/vfile-message": "*" + checksum: ab62e98474b1148909c4f9e0c7b23d80383165d401c836fe48341b0c274fee09bc373de4b073083d00abb36c520c09f086c263c34e048f7b2d5ca7ac0357d9f6 + languageName: node + linkType: hard + +"@types/webpack-sources@npm:^0.1.5": + version: 0.1.9 + resolution: "@types/webpack-sources@npm:0.1.9" + dependencies: + "@types/node": "*" + "@types/source-list-map": "*" + source-map: ^0.6.1 + checksum: bc09c584c7047e8aed29801a3981787dee3898e9e7a99891a362df114fcac3879eea5a00932314866a01b25220391839be09fe1487b16d4970ff4a7afd5b9725 + languageName: node + linkType: hard + +"@types/yargs-parser@npm:*": + version: 21.0.0 + resolution: "@types/yargs-parser@npm:21.0.0" + checksum: b2f4c8d12ac18a567440379909127cf2cec393daffb73f246d0a25df36ea983b93b7e9e824251f959e9f928cbc7c1aab6728d0a0ff15d6145f66cec2be67d9a2 + languageName: node + linkType: hard + +"@types/yargs@npm:^17.0.8": + version: 17.0.10 + resolution: "@types/yargs@npm:17.0.10" + dependencies: + "@types/yargs-parser": "*" + checksum: f0673cbfc08e17239dc58952a88350d6c4db04a027a28a06fbad27d87b670e909f9cd9e66f9c64cebdd5071d1096261e33454a55868395f125297e5c50992ca8 + languageName: node + linkType: hard + +"@typescript-eslint/eslint-plugin@npm:^5.46.0": + version: 5.46.0 + resolution: "@typescript-eslint/eslint-plugin@npm:5.46.0" + dependencies: + "@typescript-eslint/scope-manager": 5.46.0 + "@typescript-eslint/type-utils": 5.46.0 + "@typescript-eslint/utils": 5.46.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 + peerDependencies: + "@typescript-eslint/parser": ^5.0.0 + eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 + peerDependenciesMeta: + typescript: + optional: true + checksum: 5b7dde66a3db3d3009c9da5c1357d72c19b94d75474d8f51b6ac765962aa181bf8fe88fcca02a70faaceb2ed5739f790313d1d521d77149cab94ab5e3a987cf3 + languageName: node + linkType: hard + +"@typescript-eslint/parser@npm:^5.46.0": + version: 5.46.0 + resolution: "@typescript-eslint/parser@npm:5.46.0" + dependencies: + "@typescript-eslint/scope-manager": 5.46.0 + "@typescript-eslint/types": 5.46.0 + "@typescript-eslint/typescript-estree": 5.46.0 + debug: ^4.3.4 + peerDependencies: + eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 + peerDependenciesMeta: + typescript: + optional: true + checksum: 34e2e8fb35050ac119ed2696293ecd9a1b40c3ccc915d06b8d48880c6656e8f40665b969807b76058eb9198227481653f1d1465a89a4ac6a98bc7ab9850ada1f + languageName: node + linkType: hard + +"@typescript-eslint/scope-manager@npm:5.46.0": + version: 5.46.0 + resolution: "@typescript-eslint/scope-manager@npm:5.46.0" + dependencies: + "@typescript-eslint/types": 5.46.0 + "@typescript-eslint/visitor-keys": 5.46.0 + checksum: 10d992a6f9bbe747a8fb5f8b02732e3a289d2667e32ea835de825efe7a841688e683ae1d15d250df84c2ada313b9a3f41c9c9b5ae924c3d9b90d73f23241ae7f + languageName: node + linkType: hard + +"@typescript-eslint/type-utils@npm:5.46.0": + version: 5.46.0 + resolution: "@typescript-eslint/type-utils@npm:5.46.0" + dependencies: + "@typescript-eslint/typescript-estree": 5.46.0 + "@typescript-eslint/utils": 5.46.0 + debug: ^4.3.4 + tsutils: ^3.21.0 + peerDependencies: + eslint: "*" + peerDependenciesMeta: + typescript: + optional: true + checksum: 96feae3b67b78bc74b916bb7c3c654c13c6f000fc1f6945709764010fb6644e7cbf7749faa6ab0562255197b49fbf7c28c9a5b558378fa74e2cd38aeddc459cb + languageName: node + linkType: hard + +"@typescript-eslint/types@npm:5.46.0": + version: 5.46.0 + resolution: "@typescript-eslint/types@npm:5.46.0" + checksum: 162e2e7841369598d3018f315545e85b79e57cc2f9033770397dbbdab0c80d72a8ee791710d10570b70624b5f343f7f8fc7ffabaec62f708cd7bfc5b432ad595 + languageName: node + linkType: hard + +"@typescript-eslint/typescript-estree@npm:5.46.0": + version: 5.46.0 + resolution: "@typescript-eslint/typescript-estree@npm:5.46.0" + dependencies: + "@typescript-eslint/types": 5.46.0 + "@typescript-eslint/visitor-keys": 5.46.0 + debug: ^4.3.4 + globby: ^11.1.0 + is-glob: ^4.0.3 + semver: ^7.3.7 + tsutils: ^3.21.0 + peerDependenciesMeta: + typescript: + optional: true + checksum: 645f9fd65836019073fd7af5bfa0e4c3d47303deda0917c4d8fb6ed6790bebaaeb7020a7a104b96c5fda707eb20e248c38fc711cdc83439775c563ef9f169746 + languageName: node + linkType: hard + +"@typescript-eslint/utils@npm:5.46.0, @typescript-eslint/utils@npm:^5.10.0": + version: 5.46.0 + resolution: "@typescript-eslint/utils@npm:5.46.0" + dependencies: + "@types/json-schema": ^7.0.9 + "@types/semver": ^7.3.12 + "@typescript-eslint/scope-manager": 5.46.0 + "@typescript-eslint/types": 5.46.0 + "@typescript-eslint/typescript-estree": 5.46.0 + eslint-scope: ^5.1.1 + eslint-utils: ^3.0.0 + semver: ^7.3.7 + peerDependencies: + eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 + checksum: f4962a7d34f55c44b238df550d45aacbc7b8fcba7d172fd96ee17eb5ce964481e3e68376205598146f4f3aa69df7627686a9bd16022b51246d6e9fe94ffb2bb8 + languageName: node + linkType: hard + +"@typescript-eslint/visitor-keys@npm:5.46.0": + version: 5.46.0 + resolution: "@typescript-eslint/visitor-keys@npm:5.46.0" + dependencies: + "@typescript-eslint/types": 5.46.0 + eslint-visitor-keys: ^3.3.0 + checksum: 83ec2514b2469db395f006576c934bd60b21e74e2e67c183f8d9249954119c56074de286ce8c55d42e20b06d0083d4665f3baf0eed720712203796be488f0944 + languageName: node + linkType: hard + +"@webassemblyjs/ast@npm:1.11.6, @webassemblyjs/ast@npm:^1.11.5": + version: 1.11.6 + resolution: "@webassemblyjs/ast@npm:1.11.6" + dependencies: + "@webassemblyjs/helper-numbers": 1.11.6 + "@webassemblyjs/helper-wasm-bytecode": 1.11.6 + checksum: 38ef1b526ca47c210f30975b06df2faf1a8170b1636ce239fc5738fc231ce28389dd61ecedd1bacfc03cbe95b16d1af848c805652080cb60982836eb4ed2c6cf + 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 + 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 + 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 + languageName: node + linkType: hard + +"@webassemblyjs/helper-numbers@npm:1.11.6": + version: 1.11.6 + resolution: "@webassemblyjs/helper-numbers@npm:1.11.6" + dependencies: + "@webassemblyjs/floating-point-hex-parser": 1.11.6 + "@webassemblyjs/helper-api-error": 1.11.6 + "@xtuc/long": 4.2.2 + checksum: f4b562fa219f84368528339e0f8d273ad44e047a07641ffcaaec6f93e5b76fd86490a009aa91a294584e1436d74b0a01fa9fde45e333a4c657b58168b04da424 + 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: 3535ef4f1fba38de3475e383b3980f4bbf3de72bbb631c2b6584c7df45be4eccd62c6ff48b5edd3f1bcff275cfd605a37679ec199fc91fd0a7705d7f1e3972dc + languageName: node + linkType: hard + +"@webassemblyjs/helper-wasm-section@npm:1.11.6": + version: 1.11.6 + resolution: "@webassemblyjs/helper-wasm-section@npm:1.11.6" + dependencies: + "@webassemblyjs/ast": 1.11.6 + "@webassemblyjs/helper-buffer": 1.11.6 + "@webassemblyjs/helper-wasm-bytecode": 1.11.6 + "@webassemblyjs/wasm-gen": 1.11.6 + checksum: b2cf751bf4552b5b9999d27bbb7692d0aca75260140195cb58ea6374d7b9c2dc69b61e10b211a0e773f66209c3ddd612137ed66097e3684d7816f854997682e9 + languageName: node + linkType: hard + +"@webassemblyjs/ieee754@npm:1.11.6": + version: 1.11.6 + resolution: "@webassemblyjs/ieee754@npm:1.11.6" + dependencies: + "@xtuc/ieee754": ^1.2.0 + checksum: 13574b8e41f6ca39b700e292d7edf102577db5650fe8add7066a320aa4b7a7c09a5056feccac7a74eb68c10dea9546d4461412af351f13f6b24b5f32379b49de + languageName: node + linkType: hard + +"@webassemblyjs/leb128@npm:1.11.6": + version: 1.11.6 + resolution: "@webassemblyjs/leb128@npm:1.11.6" + dependencies: + "@xtuc/long": 4.2.2 + checksum: 7ea942dc9777d4b18a5ebfa3a937b30ae9e1d2ce1fee637583ed7f376334dd1d4274f813d2e250056cca803e0952def4b954913f1a3c9068bcd4ab4ee5143bf0 + languageName: node + linkType: hard + +"@webassemblyjs/utf8@npm:1.11.6": + version: 1.11.6 + resolution: "@webassemblyjs/utf8@npm:1.11.6" + checksum: 807fe5b5ce10c390cfdd93e0fb92abda8aebabb5199980681e7c3743ee3306a75729bcd1e56a3903980e96c885ee53ef901fcbaac8efdfa480f9c0dae1d08713 + languageName: node + linkType: hard + +"@webassemblyjs/wasm-edit@npm:^1.11.5": + version: 1.11.6 + resolution: "@webassemblyjs/wasm-edit@npm:1.11.6" + dependencies: + "@webassemblyjs/ast": 1.11.6 + "@webassemblyjs/helper-buffer": 1.11.6 + "@webassemblyjs/helper-wasm-bytecode": 1.11.6 + "@webassemblyjs/helper-wasm-section": 1.11.6 + "@webassemblyjs/wasm-gen": 1.11.6 + "@webassemblyjs/wasm-opt": 1.11.6 + "@webassemblyjs/wasm-parser": 1.11.6 + "@webassemblyjs/wast-printer": 1.11.6 + checksum: 29ce75870496d6fad864d815ebb072395a8a3a04dc9c3f4e1ffdc63fc5fa58b1f34304a1117296d8240054cfdbc38aca88e71fb51483cf29ffab0a61ef27b481 + languageName: node + linkType: hard + +"@webassemblyjs/wasm-gen@npm:1.11.6": + version: 1.11.6 + resolution: "@webassemblyjs/wasm-gen@npm:1.11.6" + dependencies: + "@webassemblyjs/ast": 1.11.6 + "@webassemblyjs/helper-wasm-bytecode": 1.11.6 + "@webassemblyjs/ieee754": 1.11.6 + "@webassemblyjs/leb128": 1.11.6 + "@webassemblyjs/utf8": 1.11.6 + checksum: a645a2eecbea24833c3260a249704a7f554ef4a94c6000984728e94bb2bc9140a68dfd6fd21d5e0bbb09f6dfc98e083a45760a83ae0417b41a0196ff6d45a23a + languageName: node + linkType: hard + +"@webassemblyjs/wasm-opt@npm:1.11.6": + version: 1.11.6 + resolution: "@webassemblyjs/wasm-opt@npm:1.11.6" + dependencies: + "@webassemblyjs/ast": 1.11.6 + "@webassemblyjs/helper-buffer": 1.11.6 + "@webassemblyjs/wasm-gen": 1.11.6 + "@webassemblyjs/wasm-parser": 1.11.6 + checksum: b4557f195487f8e97336ddf79f7bef40d788239169aac707f6eaa2fa5fe243557c2d74e550a8e57f2788e70c7ae4e7d32f7be16101afe183d597b747a3bdd528 + languageName: node + linkType: hard + +"@webassemblyjs/wasm-parser@npm:1.11.6, @webassemblyjs/wasm-parser@npm:^1.11.5": + version: 1.11.6 + resolution: "@webassemblyjs/wasm-parser@npm:1.11.6" + dependencies: + "@webassemblyjs/ast": 1.11.6 + "@webassemblyjs/helper-api-error": 1.11.6 + "@webassemblyjs/helper-wasm-bytecode": 1.11.6 + "@webassemblyjs/ieee754": 1.11.6 + "@webassemblyjs/leb128": 1.11.6 + "@webassemblyjs/utf8": 1.11.6 + checksum: 8200a8d77c15621724a23fdabe58d5571415cda98a7058f542e670ea965dd75499f5e34a48675184947c66f3df23adf55df060312e6d72d57908e3f049620d8a + languageName: node + linkType: hard + +"@webassemblyjs/wast-printer@npm:1.11.6": + version: 1.11.6 + resolution: "@webassemblyjs/wast-printer@npm:1.11.6" + dependencies: + "@webassemblyjs/ast": 1.11.6 + "@xtuc/long": 4.2.2 + checksum: d2fa6a4c427325ec81463e9c809aa6572af6d47f619f3091bf4c4a6fc34f1da3df7caddaac50b8e7a457f8784c62cd58c6311b6cb69b0162ccd8d4c072f79cf8 + languageName: node + linkType: hard + +"@webpack-cli/configtest@npm:^2.1.1": + version: 2.1.1 + resolution: "@webpack-cli/configtest@npm:2.1.1" + peerDependencies: + webpack: 5.x.x + webpack-cli: 5.x.x + checksum: 9f9f9145c2d05471fc83d426db1df85cf49f329836b0c4b9f46b6948bed4b013464c00622b136d2a0a26993ce2306976682592245b08ee717500b1db45009a72 + languageName: node + linkType: hard + +"@webpack-cli/info@npm:^2.0.2": + version: 2.0.2 + resolution: "@webpack-cli/info@npm:2.0.2" + peerDependencies: + webpack: 5.x.x + webpack-cli: 5.x.x + checksum: 8f9a178afca5c82e113aed1efa552d64ee5ae4fdff63fe747c096a981ec74f18a5d07bd6e89bbe6715c3e57d96eea024a410e58977169489fe1df044c10dd94e + languageName: node + linkType: hard + +"@webpack-cli/serve@npm:^2.0.5": + version: 2.0.5 + resolution: "@webpack-cli/serve@npm:2.0.5" + peerDependencies: + webpack: 5.x.x + webpack-cli: 5.x.x + peerDependenciesMeta: + webpack-dev-server: + optional: true + checksum: 75f0e54681796d567a71ac3e2781d2901a8d8cf1cdfc82f261034dddac59a8343e8c3bc5e32b4bb9d6766759ba49fb29a5cd86ef1701d79c506fe886bb63ac75 + languageName: node + linkType: hard + +"@xtuc/ieee754@npm:^1.2.0": + version: 1.2.0 + resolution: "@xtuc/ieee754@npm:1.2.0" + checksum: ac56d4ca6e17790f1b1677f978c0c6808b1900a5b138885d3da21732f62e30e8f0d9120fcf8f6edfff5100ca902b46f8dd7c1e3f903728634523981e80e2885a + languageName: node + linkType: hard + +"@xtuc/long@npm:4.2.2": + version: 4.2.2 + resolution: "@xtuc/long@npm:4.2.2" + checksum: 8ed0d477ce3bc9c6fe2bf6a6a2cc316bb9c4127c5a7827bae947fa8ec34c7092395c5a283cc300c05b5fa01cbbfa1f938f410a7bf75db7c7846fea41949989ec + languageName: node + linkType: hard + +"@yarnpkg/lockfile@npm:^1.1.0": + version: 1.1.0 + resolution: "@yarnpkg/lockfile@npm:1.1.0" + checksum: 05b881b4866a3546861fee756e6d3812776ea47fa6eb7098f983d6d0eefa02e12b66c3fff931574120f196286a7ad4879ce02743c8bb2be36c6a576c7852083a + languageName: node + linkType: hard + +"@yarnpkg/parsers@npm:^3.0.0-rc.18": + version: 3.0.0-rc.32 + resolution: "@yarnpkg/parsers@npm:3.0.0-rc.32" + dependencies: + js-yaml: ^3.10.0 + tslib: ^2.4.0 + checksum: b02796d019bb73ef024426cb0055a14f148696b19c5addf2fe4c9a1fc056efd7cb055023b4f3f4aff07bf01a5c2f52d5def1f779cb9b02b7e7a6b6e940d7bd57 + languageName: node + linkType: hard + +"@zkochan/js-yaml@npm:0.0.6": + version: 0.0.6 + resolution: "@zkochan/js-yaml@npm:0.0.6" + dependencies: + argparse: ^2.0.1 + bin: + js-yaml: bin/js-yaml.js + checksum: 51b81597a1d1d79c778b8fae48317eaad78d75223d0b7477ad2b35f47cf63b19504da430bb7a03b326e668b282874242cc123e323e57293be038684cb5e755f8 + languageName: node + linkType: hard + +"JSONStream@npm:^1.0.4": + version: 1.3.5 + resolution: "JSONStream@npm:1.3.5" + dependencies: + jsonparse: ^1.2.0 + through: ">=2.2.7 <3" + bin: + JSONStream: ./bin.js + checksum: 2605fa124260c61bad38bb65eba30d2f72216a78e94d0ab19b11b4e0327d572b8d530c0c9cc3b0764f727ad26d39e00bf7ebad57781ca6368394d73169c59e46 + languageName: node + linkType: hard + +"abab@npm:^2.0.3, abab@npm:^2.0.6": + version: 2.0.6 + resolution: "abab@npm:2.0.6" + checksum: 6ffc1af4ff315066c62600123990d87551ceb0aafa01e6539da77b0f5987ac7019466780bf480f1787576d4385e3690c81ccc37cfda12819bf510b8ab47e5a3e + languageName: node + linkType: hard + +"abbrev@npm:1, abbrev@npm:^1.0.0": + version: 1.1.1 + resolution: "abbrev@npm:1.1.1" + checksum: a4a97ec07d7ea112c517036882b2ac22f3109b7b19077dc656316d07d308438aac28e4d9746dc4d84bf6b1e75b4a7b0a5f3cb30592419f128ca9a8cee3bcfa17 + languageName: node + linkType: hard + +"abort-controller@npm:^3.0.0": + version: 3.0.0 + resolution: "abort-controller@npm:3.0.0" + dependencies: + event-target-shim: ^5.0.0 + checksum: 170bdba9b47b7e65906a28c8ce4f38a7a369d78e2271706f020849c1bfe0ee2067d4261df8bbb66eb84f79208fd5b710df759d64191db58cfba7ce8ef9c54b75 + languageName: node + linkType: hard + +"acorn-globals@npm:^7.0.0": + version: 7.0.1 + resolution: "acorn-globals@npm:7.0.1" + dependencies: + acorn: ^8.1.0 + acorn-walk: ^8.0.2 + checksum: 2a2998a547af6d0db5f0cdb90acaa7c3cbca6709010e02121fb8b8617c0fbd8bab0b869579903fde358ac78454356a14fadcc1a672ecb97b04b1c2ccba955ce8 + languageName: node + linkType: hard + +"acorn-import-assertions@npm:^1.9.0": + version: 1.9.0 + resolution: "acorn-import-assertions@npm:1.9.0" + peerDependencies: + acorn: ^8 + checksum: 944fb2659d0845c467066bdcda2e20c05abe3aaf11972116df457ce2627628a81764d800dd55031ba19de513ee0d43bb771bc679cc0eda66dc8b4fade143bc0c + languageName: node + linkType: hard + +"acorn-jsx@npm:^5.3.2": + version: 5.3.2 + resolution: "acorn-jsx@npm:5.3.2" + peerDependencies: + acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 + checksum: c3d3b2a89c9a056b205b69530a37b972b404ee46ec8e5b341666f9513d3163e2a4f214a71f4dfc7370f5a9c07472d2fd1c11c91c3f03d093e37637d95da98950 + languageName: node + linkType: hard + +"acorn-walk@npm:^8.0.2": + version: 8.2.0 + resolution: "acorn-walk@npm:8.2.0" + checksum: 1715e76c01dd7b2d4ca472f9c58968516a4899378a63ad5b6c2d668bba8da21a71976c14ec5f5b75f887b6317c4ae0b897ab141c831d741dc76024d8745f1ad1 + languageName: node + linkType: hard + +"acorn@npm:^8.1.0, acorn@npm:^8.7.1, acorn@npm:^8.8.0, acorn@npm:^8.8.1, acorn@npm:^8.8.2": + version: 8.9.0 + resolution: "acorn@npm:8.9.0" + bin: + acorn: bin/acorn + checksum: 25dfb94952386ecfb847e61934de04a4e7c2dc21c2e700fc4e2ef27ce78cb717700c4c4f279cd630bb4774948633c3859fc16063ec8573bda4568e0a312e6744 + languageName: node + linkType: hard + +"add-stream@npm:^1.0.0": + version: 1.0.0 + resolution: "add-stream@npm:1.0.0" + checksum: 3e9e8b0b8f0170406d7c3a9a39bfbdf419ccccb0fd2a396338c0fda0a339af73bf738ad414fc520741de74517acf0dd92b4a36fd3298a47fd5371eee8f2c5a06 + languageName: node + linkType: hard + +"agent-base@npm:4, agent-base@npm:^4.3.0": + version: 4.3.0 + resolution: "agent-base@npm:4.3.0" + dependencies: + es6-promisify: ^5.0.0 + checksum: 0c10891060e579c67efafd6b62223666c4b4129b521eac3e9ad272a137545bcedb54ce352273b7ad21a0024060e4f1360ae9a465ac87e2af18883c937d39979f + languageName: node + linkType: hard + +"agent-base@npm:6, agent-base@npm:^6.0.2": + version: 6.0.2 + resolution: "agent-base@npm:6.0.2" + dependencies: + debug: 4 + checksum: f52b6872cc96fd5f622071b71ef200e01c7c4c454ee68bc9accca90c98cfb39f2810e3e9aa330435835eedc8c23f4f8a15267f67c6e245d2b33757575bdac49d + languageName: node + linkType: hard + +"agentkeepalive@npm:^4.1.3, agentkeepalive@npm:^4.2.1": + version: 4.2.1 + resolution: "agentkeepalive@npm:4.2.1" + dependencies: + debug: ^4.1.0 + depd: ^1.1.2 + humanize-ms: ^1.2.1 + checksum: 39cb49ed8cf217fd6da058a92828a0a84e0b74c35550f82ee0a10e1ee403c4b78ade7948be2279b188b7a7303f5d396ea2738b134731e464bf28de00a4f72a18 + languageName: node + linkType: hard + +"aggregate-error@npm:^3.0.0": + version: 3.1.0 + resolution: "aggregate-error@npm:3.1.0" + dependencies: + clean-stack: ^2.0.0 + indent-string: ^4.0.0 + checksum: 1101a33f21baa27a2fa8e04b698271e64616b886795fd43c31068c07533c7b3facfcaf4e9e0cab3624bd88f729a592f1c901a1a229c9e490eafce411a8644b79 + languageName: node + linkType: hard + +"ajv-formats@npm:^2.1.1": + version: 2.1.1 + resolution: "ajv-formats@npm:2.1.1" + dependencies: + ajv: ^8.0.0 + peerDependencies: + ajv: ^8.0.0 + peerDependenciesMeta: + ajv: + optional: true + checksum: 4a287d937f1ebaad4683249a4c40c0fa3beed30d9ddc0adba04859026a622da0d317851316ea64b3680dc60f5c3c708105ddd5d5db8fe595d9d0207fd19f90b7 + languageName: node + linkType: hard + +"ajv-keywords@npm:^3.5.2": + version: 3.5.2 + resolution: "ajv-keywords@npm:3.5.2" + peerDependencies: + ajv: ^6.9.1 + checksum: 7dc5e5931677a680589050f79dcbe1fefbb8fea38a955af03724229139175b433c63c68f7ae5f86cf8f65d55eb7c25f75a046723e2e58296707617ca690feae9 + languageName: node + linkType: hard + +"ajv-keywords@npm:^5.1.0": + version: 5.1.0 + resolution: "ajv-keywords@npm:5.1.0" + dependencies: + fast-deep-equal: ^3.1.3 + peerDependencies: + ajv: ^8.8.2 + checksum: c35193940b853119242c6757787f09ecf89a2c19bcd36d03ed1a615e710d19d450cb448bfda407b939aba54b002368c8bff30529cc50a0536a8e10bcce300421 + languageName: node + linkType: hard + +"ajv@npm:^6.10.0, ajv@npm:^6.12.2, ajv@npm:^6.12.4, ajv@npm:^6.12.5": + version: 6.12.6 + resolution: "ajv@npm: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 + checksum: 874972efe5c4202ab0a68379481fbd3d1b5d0a7bd6d3cc21d40d3536ebff3352a2a1fabb632d4fd2cc7fe4cbdcd5ed6782084c9bbf7f32a1536d18f9da5007d4 + languageName: node + linkType: hard + +"ajv@npm:^8.0.0, ajv@npm:^8.11.0, ajv@npm:^8.12.0, ajv@npm:^8.9.0": + version: 8.12.0 + resolution: "ajv@npm:8.12.0" + dependencies: + fast-deep-equal: ^3.1.1 + json-schema-traverse: ^1.0.0 + require-from-string: ^2.0.2 + uri-js: ^4.2.2 + checksum: 4dc13714e316e67537c8b31bc063f99a1d9d9a497eb4bbd55191ac0dcd5e4985bbb71570352ad6f1e76684fb6d790928f96ba3b2d4fd6e10024be9612fe3f001 + languageName: node + linkType: hard + +"ansi-colors@npm:^4.1.1": + version: 4.1.1 + resolution: "ansi-colors@npm:4.1.1" + checksum: 138d04a51076cb085da0a7e2d000c5c0bb09f6e772ed5c65c53cb118d37f6c5f1637506d7155fb5f330f0abcf6f12fa2e489ac3f8cdab9da393bf1bb4f9a32b0 + languageName: node + linkType: hard + +"ansi-escapes@npm:^4.2.1": + version: 4.3.2 + resolution: "ansi-escapes@npm:4.3.2" + dependencies: + type-fest: ^0.21.3 + checksum: 93111c42189c0a6bed9cdb4d7f2829548e943827ee8479c74d6e0b22ee127b2a21d3f8b5ca57723b8ef78ce011fbfc2784350eb2bde3ccfccf2f575fa8489815 + languageName: node + linkType: hard + +"ansi-regex@npm:^2.1.1": + version: 2.1.1 + resolution: "ansi-regex@npm:2.1.1" + checksum: 190abd03e4ff86794f338a31795d262c1dfe8c91f7e01d04f13f646f1dcb16c5800818f886047876f1272f065570ab86b24b99089f8b68a0e11ff19aed4ca8f1 + languageName: node + linkType: hard + +"ansi-regex@npm:^5.0.1": + version: 5.0.1 + resolution: "ansi-regex@npm:5.0.1" + checksum: 2aa4bb54caf2d622f1afdad09441695af2a83aa3fe8b8afa581d205e57ed4261c183c4d3877cee25794443fde5876417d859c108078ab788d6af7e4fe52eb66b + languageName: node + linkType: hard + +"ansi-regex@npm:^6.0.1": + version: 6.0.1 + resolution: "ansi-regex@npm:6.0.1" + checksum: 1ff8b7667cded1de4fa2c9ae283e979fc87036864317da86a2e546725f96406746411d0d85e87a2d12fa5abd715d90006de7fa4fa0477c92321ad3b4c7d4e169 + languageName: node + linkType: hard + +"ansi-styles@npm:^3.2.1": + version: 3.2.1 + resolution: "ansi-styles@npm:3.2.1" + dependencies: + color-convert: ^1.9.0 + checksum: d85ade01c10e5dd77b6c89f34ed7531da5830d2cb5882c645f330079975b716438cd7ebb81d0d6e6b4f9c577f19ae41ab55f07f19786b02f9dfd9e0377395665 + languageName: node + linkType: hard + +"ansi-styles@npm:^4.0.0, ansi-styles@npm:^4.1.0": + version: 4.3.0 + resolution: "ansi-styles@npm:4.3.0" + dependencies: + color-convert: ^2.0.1 + checksum: 513b44c3b2105dd14cc42a19271e80f386466c4be574bccf60b627432f9198571ebf4ab1e4c3ba17347658f4ee1711c163d574248c0c1cdc2d5917a0ad582ec4 + languageName: node + linkType: hard + +"ansi-styles@npm:^5.0.0": + version: 5.2.0 + resolution: "ansi-styles@npm:5.2.0" + checksum: d7f4e97ce0623aea6bc0d90dcd28881ee04cba06c570b97fd3391bd7a268eedfd9d5e2dd4fdcbdd82b8105df5faf6f24aaedc08eaf3da898e702db5948f63469 + languageName: node + linkType: hard + +"ansi-styles@npm:^6.1.0": + version: 6.2.1 + resolution: "ansi-styles@npm:6.2.1" + checksum: ef940f2f0ced1a6347398da88a91da7930c33ecac3c77b72c5905f8b8fe402c52e6fde304ff5347f616e27a742da3f1dc76de98f6866c69251ad0b07a66776d9 + languageName: node + linkType: hard + +"ansicolors@npm:~0.3.2": + version: 0.3.2 + resolution: "ansicolors@npm:0.3.2" + checksum: e84fae7ebc27ac96d9dbb57f35f078cd6dde1b7046b0f03f73dcefc9fbb1f2e82e3685d083466aded8faf038f9fa9ebb408d215282bcd7aaa301d5ac3c486815 + languageName: node + linkType: hard + +"any-promise@npm:^1.0.0": + version: 1.3.0 + resolution: "any-promise@npm:1.3.0" + checksum: 0ee8a9bdbe882c90464d75d1f55cf027f5458650c4bd1f0467e65aec38ccccda07ca5844969ee77ed46d04e7dded3eaceb027e8d32f385688523fe305fa7e1de + languageName: node + linkType: hard + +"anymatch@npm:^3.0.3": + version: 3.1.3 + resolution: "anymatch@npm:3.1.3" + dependencies: + normalize-path: ^3.0.0 + picomatch: ^2.0.4 + checksum: 3e044fd6d1d26545f235a9fe4d7a534e2029d8e59fa7fd9f2a6eb21230f6b5380ea1eaf55136e60cbf8e613544b3b766e7a6fa2102e2a3a117505466e3025dc2 + languageName: node + linkType: hard + +"aproba@npm:^1.0.3 || ^2.0.0, aproba@npm:^2.0.0": + version: 2.0.0 + resolution: "aproba@npm:2.0.0" + checksum: 5615cadcfb45289eea63f8afd064ab656006361020e1735112e346593856f87435e02d8dcc7ff0d11928bc7d425f27bc7c2a84f6c0b35ab0ff659c814c138a24 + languageName: node + linkType: hard + +"are-we-there-yet@npm:^2.0.0": + version: 2.0.0 + resolution: "are-we-there-yet@npm:2.0.0" + dependencies: + delegates: ^1.0.0 + readable-stream: ^3.6.0 + checksum: 6c80b4fd04ecee6ba6e737e0b72a4b41bdc64b7d279edfc998678567ff583c8df27e27523bc789f2c99be603ffa9eaa612803da1d886962d2086e7ff6fa90c7c + 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: ^1.0.0 + readable-stream: ^3.6.0 + checksum: 52590c24860fa7173bedeb69a4c05fb573473e860197f618b9a28432ee4379049336727ae3a1f9c4cb083114601c1140cee578376164d0e651217a9843f9fe83 + languageName: node + linkType: hard + +"argparse@npm:^1.0.7": + version: 1.0.10 + resolution: "argparse@npm:1.0.10" + dependencies: + sprintf-js: ~1.0.2 + checksum: 7ca6e45583a28de7258e39e13d81e925cfa25d7d4aacbf806a382d3c02fcb13403a07fb8aeef949f10a7cfe4a62da0e2e807b348a5980554cc28ee573ef95945 + languageName: node + linkType: hard + +"argparse@npm:^2.0.1": + version: 2.0.1 + resolution: "argparse@npm:2.0.1" + checksum: 83644b56493e89a254bae05702abf3a1101b4fa4d0ca31df1c9985275a5a5bd47b3c27b7fa0b71098d41114d8ca000e6ed90cad764b306f8a503665e4d517ced + languageName: node + linkType: hard + +"array-differ@npm:^3.0.0": + version: 3.0.0 + resolution: "array-differ@npm:3.0.0" + checksum: 117edd9df5c1530bd116c6e8eea891d4bd02850fd89b1b36e532b6540e47ca620a373b81feca1c62d1395d9ae601516ba538abe5e8172d41091da2c546b05fb7 + languageName: node + linkType: hard + +"array-ify@npm:^1.0.0": + version: 1.0.0 + resolution: "array-ify@npm:1.0.0" + checksum: c0502015b319c93dd4484f18036bcc4b654eb76a4aa1f04afbcef11ac918859bb1f5d71ba1f0f1141770db9eef1a4f40f1761753650873068010bbf7bcdae4a4 + languageName: node + linkType: hard + +"array-includes@npm:^3.1.3, array-includes@npm:^3.1.4, array-includes@npm:^3.1.6": + version: 3.1.6 + resolution: "array-includes@npm:3.1.6" + dependencies: + call-bind: ^1.0.2 + define-properties: ^1.1.4 + es-abstract: ^1.20.4 + get-intrinsic: ^1.1.3 + is-string: ^1.0.7 + checksum: f22f8cd8ba8a6448d91eebdc69f04e4e55085d09232b5216ee2d476dab3ef59984e8d1889e662c6a0ed939dcb1b57fd05b2c0209c3370942fc41b752c82a2ca5 + languageName: node + linkType: hard + +"array-iterate@npm:^1.0.0": + version: 1.1.4 + resolution: "array-iterate@npm:1.1.4" + checksum: 8adc65525dfa871577b7ab91b41efd61d29c4067a08ec927340d6975e45797b9f04254dda115e366fbef11fb49277ac1c166405389886c7a251e1eddca89bd08 + languageName: node + linkType: hard + +"array-union@npm:^2.1.0": + version: 2.1.0 + resolution: "array-union@npm:2.1.0" + checksum: 5bee12395cba82da674931df6d0fea23c4aa4660cb3b338ced9f828782a65caa232573e6bf3968f23e0c5eb301764a382cef2f128b170a9dc59de0e36c39f98d + languageName: node + linkType: hard + +"array.prototype.flat@npm:^1.2.5": + version: 1.2.5 + resolution: "array.prototype.flat@npm:1.2.5" + dependencies: + call-bind: ^1.0.2 + define-properties: ^1.1.3 + es-abstract: ^1.19.0 + checksum: 9cc6414b111abfc7717e39546e4887b1e5ec74df8f1618d83425deaa95752bf05d475d1d241253b4d88d4a01f8e1bc84845ad5b7cc2047f8db2f614512acd40e + languageName: node + linkType: hard + +"array.prototype.flatmap@npm:^1.3.1": + version: 1.3.1 + resolution: "array.prototype.flatmap@npm:1.3.1" + dependencies: + call-bind: ^1.0.2 + define-properties: ^1.1.4 + es-abstract: ^1.20.4 + es-shim-unscopables: ^1.0.0 + checksum: 8c1c43a4995f12cf12523436da28515184c753807b3f0bc2ca6c075f71c470b099e2090cc67dba8e5280958fea401c1d0c59e1db0143272aef6cd1103921a987 + languageName: node + linkType: hard + +"array.prototype.tosorted@npm:^1.1.1": + version: 1.1.1 + resolution: "array.prototype.tosorted@npm:1.1.1" + dependencies: + call-bind: ^1.0.2 + define-properties: ^1.1.4 + es-abstract: ^1.20.4 + es-shim-unscopables: ^1.0.0 + get-intrinsic: ^1.1.3 + checksum: 7923324a67e70a2fc0a6e40237405d92395e45ebd76f5cb89c2a5cf1e66b47aca6baacd0cd628ffd88830b90d47fff268071493d09c9ae123645613dac2c2ca3 + languageName: node + linkType: hard + +"arrify@npm:^1.0.1": + version: 1.0.1 + resolution: "arrify@npm:1.0.1" + checksum: 745075dd4a4624ff0225c331dacb99be501a515d39bcb7c84d24660314a6ec28e68131b137e6f7e16318170842ce97538cd298fc4cd6b2cc798e0b957f2747e7 + languageName: node + linkType: hard + +"arrify@npm:^2.0.0, arrify@npm:^2.0.1": + version: 2.0.1 + resolution: "arrify@npm:2.0.1" + checksum: 067c4c1afd182806a82e4c1cb8acee16ab8b5284fbca1ce29408e6e91281c36bb5b612f6ddfbd40a0f7a7e0c75bf2696eb94c027f6e328d6e9c52465c98e4209 + languageName: node + linkType: hard + +"asap@npm:^2.0.0": + version: 2.0.6 + resolution: "asap@npm:2.0.6" + checksum: b296c92c4b969e973260e47523207cd5769abd27c245a68c26dc7a0fe8053c55bb04360237cb51cab1df52be939da77150ace99ad331fb7fb13b3423ed73ff3d + languageName: node + linkType: hard + +"asn1@npm:~0.2.0": + version: 0.2.6 + resolution: "asn1@npm:0.2.6" + dependencies: + safer-buffer: ~2.1.0 + checksum: 39f2ae343b03c15ad4f238ba561e626602a3de8d94ae536c46a4a93e69578826305366dc09fbb9b56aec39b4982a463682f259c38e59f6fa380cd72cd61e493d + languageName: node + linkType: hard + +"async@npm:^3.2.3": + version: 3.2.4 + resolution: "async@npm:3.2.4" + checksum: 43d07459a4e1d09b84a20772414aa684ff4de085cbcaec6eea3c7a8f8150e8c62aa6cd4e699fe8ee93c3a5b324e777d34642531875a0817a35697522c1b02e89 + languageName: node + linkType: hard + +"asynckit@npm:^0.4.0": + version: 0.4.0 + resolution: "asynckit@npm:0.4.0" + checksum: 7b78c451df768adba04e2d02e63e2d0bf3b07adcd6e42b4cf665cb7ce899bedd344c69a1dcbce355b5f972d597b25aaa1c1742b52cffd9caccb22f348114f6be + languageName: node + linkType: hard + +"at-least-node@npm:^1.0.0": + version: 1.0.0 + resolution: "at-least-node@npm:1.0.0" + checksum: 463e2f8e43384f1afb54bc68485c436d7622acec08b6fad269b421cb1d29cebb5af751426793d0961ed243146fe4dc983402f6d5a51b720b277818dbf6f2e49e + languageName: node + linkType: hard + +"axios@npm:^1.0.0": + version: 1.2.1 + resolution: "axios@npm:1.2.1" + dependencies: + follow-redirects: ^1.15.0 + form-data: ^4.0.0 + proxy-from-env: ^1.1.0 + checksum: c4dc4e119064c9aed09a3de309bedb797a139a6fb372223aafe3e0c10a7d4a14e4d3e9c9d309467fadb9d2b490b891ee3df96ef5b55716bb971910466ff9f0c5 + languageName: node + linkType: hard + +"babel-jest@npm:^29.6.1": + version: 29.6.1 + resolution: "babel-jest@npm:29.6.1" + dependencies: + "@jest/transform": ^29.6.1 + "@types/babel__core": ^7.1.14 + babel-plugin-istanbul: ^6.1.1 + babel-preset-jest: ^29.5.0 + chalk: ^4.0.0 + graceful-fs: ^4.2.9 + slash: ^3.0.0 + peerDependencies: + "@babel/core": ^7.8.0 + checksum: bc46cfba468edde91f34a8292501d4448a39fab72d80d7d95f4349feb114fa21becb01def007d6166de7933ab9633bf5b5e1b72ba6ffeaa991f7abf014a2f61d + languageName: node + linkType: hard + +"babel-plugin-istanbul@npm:^6.1.1": + version: 6.1.1 + resolution: "babel-plugin-istanbul@npm:6.1.1" + dependencies: + "@babel/helper-plugin-utils": ^7.0.0 + "@istanbuljs/load-nyc-config": ^1.0.0 + "@istanbuljs/schema": ^0.1.2 + istanbul-lib-instrument: ^5.0.4 + test-exclude: ^6.0.0 + checksum: cb4fd95738219f232f0aece1116628cccff16db891713c4ccb501cddbbf9272951a5df81f2f2658dfdf4b3e7b236a9d5cbcf04d5d8c07dd5077297339598061a + languageName: node + linkType: hard + +"babel-plugin-jest-hoist@npm:^29.5.0": + version: 29.5.0 + resolution: "babel-plugin-jest-hoist@npm:29.5.0" + dependencies: + "@babel/template": ^7.3.3 + "@babel/types": ^7.3.3 + "@types/babel__core": ^7.1.14 + "@types/babel__traverse": ^7.0.6 + checksum: 099b5254073b6bc985b6d2d045ad26fb8ed30ff8ae6404c4fe8ee7cd0e98a820f69e3dfb871c7c65aae0f4b65af77046244c07bb92d49ef9005c90eedf681539 + languageName: node + linkType: hard + +"babel-plugin-polyfill-corejs2@npm:^0.4.3": + version: 0.4.3 + resolution: "babel-plugin-polyfill-corejs2@npm:0.4.3" + dependencies: + "@babel/compat-data": ^7.17.7 + "@babel/helper-define-polyfill-provider": ^0.4.0 + semver: ^6.1.1 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 09ba40b9f8ac66a733628b2f12722bb764bdcc4f9600b93d60f1994418a8f84bc4b1ed9ab07c9d288debbf6210413fdff0721a3a43bd89c7f77adf76b0310adc + languageName: node + linkType: hard + +"babel-plugin-polyfill-corejs3@npm:^0.8.1": + version: 0.8.1 + resolution: "babel-plugin-polyfill-corejs3@npm:0.8.1" + dependencies: + "@babel/helper-define-polyfill-provider": ^0.4.0 + core-js-compat: ^3.30.1 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: c23a581973c141a4687126cf964981180ef27e3eb0b34b911161db4f5caf9ba7ff60bee0ebe46d650ba09e03a6a3ac2cd6a6ae5f4f5363a148470e5cd8447df2 + languageName: node + linkType: hard + +"babel-plugin-polyfill-regenerator@npm:^0.5.0": + version: 0.5.0 + resolution: "babel-plugin-polyfill-regenerator@npm:0.5.0" + dependencies: + "@babel/helper-define-polyfill-provider": ^0.4.0 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: ef2bcffc7c9a5e4426fc2dbf89bf3a46999a8415c21cd741c3ab3cb4b5ab804aaa3d71ef733f0eda1bcc0b91d9d80f98d33983a66dab9b8bed166ec38f8f8ad1 + languageName: node + linkType: hard + +"babel-preset-current-node-syntax@npm:^1.0.0": + version: 1.0.1 + resolution: "babel-preset-current-node-syntax@npm:1.0.1" + dependencies: + "@babel/plugin-syntax-async-generators": ^7.8.4 + "@babel/plugin-syntax-bigint": ^7.8.3 + "@babel/plugin-syntax-class-properties": ^7.8.3 + "@babel/plugin-syntax-import-meta": ^7.8.3 + "@babel/plugin-syntax-json-strings": ^7.8.3 + "@babel/plugin-syntax-logical-assignment-operators": ^7.8.3 + "@babel/plugin-syntax-nullish-coalescing-operator": ^7.8.3 + "@babel/plugin-syntax-numeric-separator": ^7.8.3 + "@babel/plugin-syntax-object-rest-spread": ^7.8.3 + "@babel/plugin-syntax-optional-catch-binding": ^7.8.3 + "@babel/plugin-syntax-optional-chaining": ^7.8.3 + "@babel/plugin-syntax-top-level-await": ^7.8.3 + peerDependencies: + "@babel/core": ^7.0.0 + checksum: d118c2742498c5492c095bc8541f4076b253e705b5f1ad9a2e7d302d81a84866f0070346662355c8e25fc02caa28dc2da8d69bcd67794a0d60c4d6fab6913cc8 + languageName: node + linkType: hard + +"babel-preset-jest@npm:^29.5.0": + version: 29.5.0 + resolution: "babel-preset-jest@npm:29.5.0" + dependencies: + babel-plugin-jest-hoist: ^29.5.0 + babel-preset-current-node-syntax: ^1.0.0 + peerDependencies: + "@babel/core": ^7.0.0 + checksum: 5566ca2762766c9319b4973d018d2fa08c0fcf6415c72cc54f4c8e7199e851ea8f5e6c6730f03ed7ed44fc8beefa959dd15911f2647dee47c615ff4faeddb1ad + languageName: node + linkType: hard + +"bail@npm:^1.0.0": + version: 1.0.5 + resolution: "bail@npm:1.0.5" + checksum: 6c334940d7eaa4e656a12fb12407b6555649b6deb6df04270fa806e0da82684ebe4a4e47815b271c794b40f8d6fa286e0c248b14ddbabb324a917fab09b7301a + languageName: node + linkType: hard + +"balanced-match@npm:^1.0.0": + version: 1.0.2 + resolution: "balanced-match@npm:1.0.2" + checksum: 9706c088a283058a8a99e0bf91b0a2f75497f185980d9ffa8b304de1d9e58ebda7c72c07ebf01dadedaac5b2907b2c6f566f660d62bd336c3468e960403b9d65 + languageName: node + linkType: hard + +"base64-js@npm:^1.3.0, base64-js@npm:^1.3.1": + version: 1.5.1 + resolution: "base64-js@npm:1.5.1" + checksum: 669632eb3745404c2f822a18fc3a0122d2f9a7a13f7fb8b5823ee19d1d2ff9ee5b52c53367176ea4ad093c332fd5ab4bd0ebae5a8e27917a4105a4cfc86b1005 + languageName: node + linkType: hard + +"bash-language-server@npm:^4.9.2": + version: 4.9.2 + resolution: "bash-language-server@npm:4.9.2" + dependencies: + fast-glob: 3.2.12 + fuzzy-search: 3.2.1 + node-fetch: 2.6.11 + turndown: 7.1.2 + vscode-languageserver: 8.0.2 + vscode-languageserver-textdocument: 1.0.8 + web-tree-sitter: 0.20.8 + zod: 3.21.4 + bin: + bash-language-server: out/cli.js + checksum: 3da1cf26733bfaac72401be83d72ed28bd0014ca140183de3bf710eea8f1620d4baa4e1559d236a5475d559781ec899100137129e371386dff4e2494d7f06024 + languageName: node + linkType: hard + +"bcrypt-pbkdf@npm:^1.0.2": + version: 1.0.2 + resolution: "bcrypt-pbkdf@npm:1.0.2" + dependencies: + tweetnacl: ^0.14.3 + checksum: 4edfc9fe7d07019609ccf797a2af28351736e9d012c8402a07120c4453a3b789a15f2ee1530dc49eee8f7eb9379331a8dd4b3766042b9e502f74a68e7f662291 + languageName: node + linkType: hard + +"before-after-hook@npm:^2.2.0": + version: 2.2.2 + resolution: "before-after-hook@npm:2.2.2" + checksum: dc2e1ffe389e5afbef2a46790b1b5a50247ed57aba67649cfa9ec2552d248cc9278f222e72fb5a8ff59bbb39d78fbaa97e7234ead0c6b5e8418b67a8644ce207 + languageName: node + linkType: hard + +"big.js@npm:^5.2.2": + version: 5.2.2 + resolution: "big.js@npm:5.2.2" + checksum: b89b6e8419b097a8fb4ed2399a1931a68c612bce3cfd5ca8c214b2d017531191070f990598de2fc6f3f993d91c0f08aa82697717f6b3b8732c9731866d233c9e + languageName: node + linkType: hard + +"big.js@npm:^6.0.0": + version: 6.1.1 + resolution: "big.js@npm:6.1.1" + checksum: ba5db278e7d6700d7f92b7421e851bb65b6336d90b882869696c50574623c6be31f81500c3195fb1b391045163ffe62745e1c2bc30b35cb15e1b3e3ed135266b + languageName: node + linkType: hard + +"bignumber.js@npm:^9.0.0": + version: 9.0.2 + resolution: "bignumber.js@npm:9.0.2" + checksum: 8637b71d0a99104b20413c47578953970006fec6b4df796b9dcfd9835ea9c402ea0e727eba9a5ca9f9a393c1d88b6168c5bbe0887598b708d4f8b4870ad62e1f + languageName: node + linkType: hard + +"bin-links@npm:^3.0.0": + version: 3.0.3 + resolution: "bin-links@npm:3.0.3" + dependencies: + cmd-shim: ^5.0.0 + mkdirp-infer-owner: ^2.0.0 + npm-normalize-package-bin: ^2.0.0 + read-cmd-shim: ^3.0.0 + rimraf: ^3.0.0 + write-file-atomic: ^4.0.0 + checksum: ea2dc6f91a6ef8b3840ceb48530bbeb8d6d1c6f7985fe1409b16d7e7db39432f0cb5ce15cc2788bb86d989abad6e2c7fba3500996a210a682eec18fb26a66e72 + languageName: node + linkType: hard + +"bl@npm:^4.0.3, bl@npm:^4.1.0": + version: 4.1.0 + resolution: "bl@npm:4.1.0" + dependencies: + buffer: ^5.5.0 + inherits: ^2.0.4 + readable-stream: ^3.4.0 + checksum: 9e8521fa7e83aa9427c6f8ccdcba6e8167ef30cc9a22df26effcc5ab682ef91d2cbc23a239f945d099289e4bbcfae7a192e9c28c84c6202e710a0dfec3722662 + languageName: node + linkType: hard + +"brace-expansion@npm:^1.1.7": + version: 1.1.11 + resolution: "brace-expansion@npm:1.1.11" + dependencies: + balanced-match: ^1.0.0 + concat-map: 0.0.1 + checksum: faf34a7bb0c3fcf4b59c7808bc5d2a96a40988addf2e7e09dfbb67a2251800e0d14cd2bfc1aa79174f2f5095c54ff27f46fb1289fe2d77dac755b5eb3434cc07 + languageName: node + linkType: hard + +"brace-expansion@npm:^2.0.1": + version: 2.0.1 + resolution: "brace-expansion@npm:2.0.1" + dependencies: + balanced-match: ^1.0.0 + checksum: a61e7cd2e8a8505e9f0036b3b6108ba5e926b4b55089eeb5550cd04a471fe216c96d4fe7e4c7f995c728c554ae20ddfc4244cad10aef255e72b62930afd233d1 + languageName: node + linkType: hard + +"braces@npm:^3.0.2": + version: 3.0.2 + resolution: "braces@npm:3.0.2" + dependencies: + fill-range: ^7.0.1 + checksum: e2a8e769a863f3d4ee887b5fe21f63193a891c68b612ddb4b68d82d1b5f3ff9073af066c343e9867a393fe4c2555dcb33e89b937195feb9c1613d259edfcd459 + languageName: node + linkType: hard + +"browserslist@npm:^4.14.5, browserslist@npm:^4.21.3, browserslist@npm:^4.21.5": + version: 4.21.9 + resolution: "browserslist@npm:4.21.9" + dependencies: + caniuse-lite: ^1.0.30001503 + electron-to-chromium: ^1.4.431 + node-releases: ^2.0.12 + update-browserslist-db: ^1.0.11 + bin: + browserslist: cli.js + checksum: 80d3820584e211484ad1b1a5cfdeca1dd00442f47be87e117e1dda34b628c87e18b81ae7986fa5977b3e6a03154f6d13cd763baa6b8bf5dd9dd19f4926603698 + languageName: node + linkType: hard + +"bs-logger@npm:0.x": + version: 0.2.6 + resolution: "bs-logger@npm:0.2.6" + dependencies: + fast-json-stable-stringify: 2.x + checksum: d34bdaf68c64bd099ab97c3ea608c9ae7d3f5faa1178b3f3f345acd94e852e608b2d4f9103fb2e503f5e69780e98293df41691b84be909b41cf5045374d54606 + languageName: node + linkType: hard + +"bser@npm:2.1.1": + version: 2.1.1 + resolution: "bser@npm:2.1.1" + dependencies: + node-int64: ^0.4.0 + checksum: 9ba4dc58ce86300c862bffc3ae91f00b2a03b01ee07f3564beeeaf82aa243b8b03ba53f123b0b842c190d4399b94697970c8e7cf7b1ea44b61aa28c3526a4449 + languageName: node + linkType: hard + +"buffer-equal-constant-time@npm:1.0.1": + version: 1.0.1 + resolution: "buffer-equal-constant-time@npm:1.0.1" + checksum: 80bb945f5d782a56f374b292770901065bad21420e34936ecbe949e57724b4a13874f735850dd1cc61f078773c4fb5493a41391e7bda40d1fa388d6bd80daaab + 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-writer@npm:2.0.0": + version: 2.0.0 + resolution: "buffer-writer@npm:2.0.0" + checksum: 11736b48bb75106c52ca8ec9f025e7c1b3b25ce31875f469d7210eabd5c576c329e34f6b805d4a8d605ff3f0db1e16342328802c4c963e9c826b0e43a4e631c2 + languageName: node + linkType: hard + +"buffer@npm:^5.5.0": + version: 5.7.1 + resolution: "buffer@npm:5.7.1" + dependencies: + base64-js: ^1.3.1 + ieee754: ^1.1.13 + checksum: e2cf8429e1c4c7b8cbd30834ac09bd61da46ce35f5c22a78e6c2f04497d6d25541b16881e30a019c6fd3154150650ccee27a308eff3e26229d788bbdeb08ab84 + languageName: node + linkType: hard + +"builtins@npm:^1.0.3": + version: 1.0.3 + resolution: "builtins@npm:1.0.3" + checksum: 47ce94f7eee0e644969da1f1a28e5f29bd2e48b25b2bbb61164c345881086e29464ccb1fb88dbc155ea26e8b1f5fc8a923b26c8c1ed0935b67b644d410674513 + languageName: node + linkType: hard + +"builtins@npm:^5.0.0": + version: 5.0.1 + resolution: "builtins@npm:5.0.1" + dependencies: + semver: ^7.0.0 + checksum: 66d204657fe36522822a95b288943ad11b58f5eaede235b11d8c4edaa28ce4800087d44a2681524c340494aadb120a0068011acabe99d30e8f11a7d826d83515 + languageName: node + linkType: hard + +"byte-size@npm:7.0.0": + version: 7.0.0 + resolution: "byte-size@npm:7.0.0" + checksum: 6cdd45fb64ac3f80d5cbbc01df7974a4613b3e64bd792b6b8211c8669ca3d1f7efd9379ba24cebfc371ce3e890817dcdaf0bd7ed99571fe2de4b946e6c31a138 + languageName: node + linkType: hard + +"cacache@npm:^15.2.0": + version: 15.3.0 + resolution: "cacache@npm:15.3.0" + 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 + checksum: a07327c27a4152c04eb0a831c63c00390d90f94d51bb80624a66f4e14a6b6360bbf02a84421267bd4d00ca73ac9773287d8d7169e8d2eafe378d2ce140579db8 + languageName: node + linkType: hard + +"cacache@npm:^16.0.0, cacache@npm:^16.0.6, cacache@npm:^16.1.0": + version: 16.1.3 + resolution: "cacache@npm:16.1.3" + 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 + checksum: d91409e6e57d7d9a3a25e5dcc589c84e75b178ae8ea7de05cbf6b783f77a5fae938f6e8fda6f5257ed70000be27a681e1e44829251bfffe4c10216002f8f14e6 + languageName: node + linkType: hard + +"cacache@npm:^17.0.0": + version: 17.1.3 + resolution: "cacache@npm:17.1.3" + dependencies: + "@npmcli/fs": ^3.1.0 + fs-minipass: ^3.0.0 + glob: ^10.2.2 + lru-cache: ^7.7.1 + minipass: ^5.0.0 + minipass-collect: ^1.0.2 + minipass-flush: ^1.0.5 + minipass-pipeline: ^1.2.4 + p-map: ^4.0.0 + ssri: ^10.0.0 + tar: ^6.1.11 + unique-filename: ^3.0.0 + checksum: 385756781e1e21af089160d89d7462b7ed9883c978e848c7075b90b73cb823680e66092d61513050164588387d2ca87dd6d910e28d64bc13a9ac82cd8580c796 + languageName: node + linkType: hard + +"call-bind@npm:^1.0.0, call-bind@npm:^1.0.2": + version: 1.0.2 + resolution: "call-bind@npm:1.0.2" + dependencies: + function-bind: ^1.1.1 + get-intrinsic: ^1.0.2 + checksum: f8e31de9d19988a4b80f3e704788c4a2d6b6f3d17cfec4f57dc29ced450c53a49270dc66bf0fbd693329ee948dd33e6c90a329519aef17474a4d961e8d6426b0 + languageName: node + linkType: hard + +"call-me-maybe@npm:^1.0.1": + version: 1.0.1 + resolution: "call-me-maybe@npm:1.0.1" + checksum: d19e9d6ac2c6a83fb1215718b64c5e233f688ebebb603bdfe4af59cde952df1f2b648530fab555bf290ea910d69d7d9665ebc916e871e0e194f47c2e48e4886b + languageName: node + linkType: hard + +"caller-callsite@npm:^2.0.0": + version: 2.0.0 + resolution: "caller-callsite@npm:2.0.0" + dependencies: + callsites: ^2.0.0 + checksum: b685e9d126d9247b320cfdfeb3bc8da0c4be28d8fb98c471a96bc51aab3130099898a2fe3bf0308f0fe048d64c37d6d09f563958b9afce1a1e5e63d879c128a2 + languageName: node + linkType: hard + +"caller-path@npm:^2.0.0": + version: 2.0.0 + resolution: "caller-path@npm:2.0.0" + dependencies: + caller-callsite: ^2.0.0 + checksum: 3e12ccd0c71ec10a057aac69e3ec175b721ca858c640df021ef0d25999e22f7c1d864934b596b7d47038e9b56b7ec315add042abbd15caac882998b50102fb12 + languageName: node + linkType: hard + +"callsites@npm:^2.0.0": + version: 2.0.0 + resolution: "callsites@npm:2.0.0" + checksum: be2f67b247df913732b7dec1ec0bbfcdbaea263e5a95968b19ec7965affae9496b970e3024317e6d4baa8e28dc6ba0cec03f46fdddc2fdcc51396600e53c2623 + languageName: node + linkType: hard + +"callsites@npm:^3.0.0": + version: 3.1.0 + resolution: "callsites@npm:3.1.0" + checksum: 072d17b6abb459c2ba96598918b55868af677154bec7e73d222ef95a8fdb9bbf7dae96a8421085cdad8cd190d86653b5b6dc55a4484f2e5b2e27d5e0c3fc15b3 + languageName: node + linkType: hard + +"camelcase-keys@npm:^6.2.2": + version: 6.2.2 + resolution: "camelcase-keys@npm:6.2.2" + dependencies: + camelcase: ^5.3.1 + map-obj: ^4.0.0 + quick-lru: ^4.0.1 + checksum: 43c9af1adf840471e54c68ab3e5fe8a62719a6b7dbf4e2e86886b7b0ff96112c945736342b837bd2529ec9d1c7d1934e5653318478d98e0cf22c475c04658e2a + languageName: node + linkType: hard + +"camelcase@npm:^5.3.1": + version: 5.3.1 + resolution: "camelcase@npm:5.3.1" + checksum: e6effce26b9404e3c0f301498184f243811c30dfe6d0b9051863bd8e4034d09c8c2923794f280d6827e5aa055f6c434115ff97864a16a963366fb35fd673024b + languageName: node + linkType: hard + +"camelcase@npm:^6.2.0": + version: 6.3.0 + resolution: "camelcase@npm:6.3.0" + checksum: 8c96818a9076434998511251dcb2761a94817ea17dbdc37f47ac080bd088fc62c7369429a19e2178b993497132c8cbcf5cc1f44ba963e76782ba469c0474938d + languageName: node + linkType: hard + +"caniuse-lite@npm:^1.0.30001503": + version: 1.0.30001503 + resolution: "caniuse-lite@npm:1.0.30001503" + checksum: cd5f0af37655ff71ec4ab3c49124d75e0b8b68de625d07ea80e9a82329e616b5203d5dad6865192653be9da50081c06878f081ab069dac0be35adf29aa1599cd + languageName: node + linkType: hard + +"cardinal@npm:^2.1.1": + version: 2.1.1 + resolution: "cardinal@npm:2.1.1" + dependencies: + ansicolors: ~0.3.2 + redeyed: ~2.1.0 + bin: + cdl: ./bin/cdl.js + checksum: e8d4ae46439cf8fed481c0efd267711ee91e199aa7821a9143e784ed94a6495accd01a0b36d84d377e8ee2cc9928a6c9c123b03be761c60b805f2c026b8a99ad + languageName: node + linkType: hard + +"chalk@npm:4.1.0": + version: 4.1.0 + resolution: "chalk@npm:4.1.0" + dependencies: + ansi-styles: ^4.1.0 + supports-color: ^7.1.0 + checksum: 5561c7b4c063badee3e16d04bce50bd033e1be1bf4c6948639275683ffa7a1993c44639b43c22b1c505f0f813a24b1889037eb182546b48946f9fe7cdd0e7d13 + languageName: node + linkType: hard + +"chalk@npm:^2.0.0, chalk@npm:^2.0.1, chalk@npm:^2.1.0, chalk@npm:^2.3.0, chalk@npm:^2.4.1, chalk@npm:^2.4.2": + version: 2.4.2 + resolution: "chalk@npm:2.4.2" + dependencies: + ansi-styles: ^3.2.1 + escape-string-regexp: ^1.0.5 + supports-color: ^5.3.0 + checksum: ec3661d38fe77f681200f878edbd9448821924e0f93a9cefc0e26a33b145f1027a2084bf19967160d11e1f03bfe4eaffcabf5493b89098b2782c3fe0b03d80c2 + languageName: node + linkType: hard + +"chalk@npm:^4.0.0, chalk@npm:^4.0.2, chalk@npm:^4.1.0, chalk@npm:^4.1.1": + version: 4.1.2 + resolution: "chalk@npm:4.1.2" + dependencies: + ansi-styles: ^4.1.0 + supports-color: ^7.1.0 + checksum: fe75c9d5c76a7a98d45495b91b2172fa3b7a09e0cc9370e5c8feb1c567b85c4288e2b3fded7cfdd7359ac28d6b3844feb8b82b8686842e93d23c827c417e83fc + languageName: node + linkType: hard + +"char-regex@npm:^1.0.2": + version: 1.0.2 + resolution: "char-regex@npm:1.0.2" + checksum: b563e4b6039b15213114626621e7a3d12f31008bdce20f9c741d69987f62aeaace7ec30f6018890ad77b2e9b4d95324c9f5acfca58a9441e3b1dcdd1e2525d17 + languageName: node + linkType: hard + +"character-entities-legacy@npm:^1.0.0": + version: 1.1.4 + resolution: "character-entities-legacy@npm:1.1.4" + checksum: fe03a82c154414da3a0c8ab3188e4237ec68006cbcd681cf23c7cfb9502a0e76cd30ab69a2e50857ca10d984d57de3b307680fff5328ccd427f400e559c3a811 + languageName: node + linkType: hard + +"character-entities@npm:^1.0.0": + version: 1.2.4 + resolution: "character-entities@npm:1.2.4" + checksum: e1545716571ead57beac008433c1ff69517cd8ca5b336889321c5b8ff4a99c29b65589a701e9c086cda8a5e346a67295e2684f6c7ea96819fe85cbf49bf8686d + languageName: node + linkType: hard + +"character-reference-invalid@npm:^1.0.0": + version: 1.1.4 + resolution: "character-reference-invalid@npm:1.1.4" + checksum: 20274574c70e05e2f81135f3b93285536bc8ff70f37f0809b0d17791a832838f1e49938382899ed4cb444e5bbd4314ca1415231344ba29f4222ce2ccf24fea0b + languageName: node + linkType: hard + +"chardet@npm:^0.7.0": + version: 0.7.0 + resolution: "chardet@npm:0.7.0" + checksum: 6fd5da1f5d18ff5712c1e0aed41da200d7c51c28f11b36ee3c7b483f3696dabc08927fc6b227735eb8f0e1215c9a8abd8154637f3eff8cada5959df7f58b024d + languageName: node + linkType: hard + +"child_process@npm:~1.0.2": + version: 1.0.2 + resolution: "child_process@npm:1.0.2" + checksum: bd814d82bc8c6e85ed6fb157878978121cd03b5296c09f6135fa3d081fd9a6a617a6d509c50397711df713af403331241a9c0397a7fad30672051485e156c2a1 + languageName: node + linkType: hard + +"chownr@npm:^2.0.0": + version: 2.0.0 + resolution: "chownr@npm:2.0.0" + checksum: 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: cb8b1fc7e881aaef973bd0c4a43cd353c2ad8323fb471a041e64f7c2dd849cde4aad15f8b753331a32dda45c973f032c8a03b8177fc85d60eaa75e91e08bfb97 + languageName: node + linkType: hard + +"ci-info@npm:^2.0.0": + version: 2.0.0 + resolution: "ci-info@npm:2.0.0" + checksum: 3b374666a85ea3ca43fa49aa3a048d21c9b475c96eb13c133505d2324e7ae5efd6a454f41efe46a152269e9b6a00c9edbe63ec7fa1921957165aae16625acd67 + languageName: node + linkType: hard + +"ci-info@npm:^3.2.0": + version: 3.8.0 + resolution: "ci-info@npm:3.8.0" + checksum: d0a4d3160497cae54294974a7246202244fff031b0a6ea20dd57b10ec510aa17399c41a1b0982142c105f3255aff2173e5c0dd7302ee1b2f28ba3debda375098 + languageName: node + linkType: hard + +"cjs-module-lexer@npm:^1.0.0": + version: 1.2.3 + resolution: "cjs-module-lexer@npm:1.2.3" + checksum: 5ea3cb867a9bb609b6d476cd86590d105f3cfd6514db38ff71f63992ab40939c2feb68967faa15a6d2b1f90daa6416b79ea2de486e9e2485a6f8b66a21b4fb0a + languageName: node + linkType: hard + +"clean-stack@npm:^2.0.0": + version: 2.2.0 + resolution: "clean-stack@npm:2.2.0" + checksum: 2ac8cd2b2f5ec986a3c743935ec85b07bc174d5421a5efc8017e1f146a1cf5f781ae962618f416352103b32c9cd7e203276e8c28241bbe946160cab16149fb68 + languageName: node + linkType: hard + +"cli-color@npm:^1.4.0": + version: 1.4.0 + resolution: "cli-color@npm:1.4.0" + dependencies: + ansi-regex: ^2.1.1 + d: 1 + es5-ext: ^0.10.46 + es6-iterator: ^2.0.3 + memoizee: ^0.4.14 + timers-ext: ^0.1.5 + checksum: 5e840cf68c913f3c4e9eb889e45ea8c26260f6253407ee3a95e11ba317454638e7c41b9fd641a1305b9a6d84e996a86c8468c112695290262f6066138a6445f4 + languageName: node + linkType: hard + +"cli-cursor@npm:3.1.0, cli-cursor@npm:^3.1.0": + version: 3.1.0 + resolution: "cli-cursor@npm:3.1.0" + dependencies: + restore-cursor: ^3.1.0 + checksum: 2692784c6cd2fd85cfdbd11f53aea73a463a6d64a77c3e098b2b4697a20443f430c220629e1ca3b195ea5ac4a97a74c2ee411f3807abf6df2b66211fec0c0a29 + languageName: node + linkType: hard + +"cli-cursor@npm:^2.1.0": + version: 2.1.0 + resolution: "cli-cursor@npm:2.1.0" + dependencies: + restore-cursor: ^2.0.0 + checksum: d88e97bfdac01046a3ffe7d49f06757b3126559d7e44aa2122637eb179284dc6cd49fca2fac4f67c19faaf7e6dab716b6fe1dfcd309977407d8c7578ec2d044d + languageName: node + linkType: hard + +"cli-spinners@npm:2.6.1, cli-spinners@npm:^2.5.0": + version: 2.6.1 + resolution: "cli-spinners@npm:2.6.1" + checksum: 423409baaa7a58e5104b46ca1745fbfc5888bbd0b0c5a626e052ae1387060839c8efd512fb127e25769b3dc9562db1dc1b5add6e0b93b7ef64f477feb6416a45 + languageName: node + linkType: hard + +"cli-spinners@npm:^1.0.1": + version: 1.3.1 + resolution: "cli-spinners@npm:1.3.1" + checksum: 4f95fd69a2cc886a79edea7c60173a66d21f5732f1cbdc3dfb6c02422769699b358190827a3886a51503a7a4daed84ae295db5df68bba9702a50df7aca51da55 + languageName: node + linkType: hard + +"cli-width@npm:^3.0.0": + version: 3.0.0 + resolution: "cli-width@npm:3.0.0" + checksum: 4c94af3769367a70e11ed69aa6095f1c600c0ff510f3921ab4045af961820d57c0233acfa8b6396037391f31b4c397e1f614d234294f979ff61430a6c166c3f6 + languageName: node + linkType: hard + +"cliui@npm:^7.0.2": + version: 7.0.4 + resolution: "cliui@npm:7.0.4" + dependencies: + string-width: ^4.2.0 + strip-ansi: ^6.0.0 + wrap-ansi: ^7.0.0 + checksum: ce2e8f578a4813806788ac399b9e866297740eecd4ad1823c27fd344d78b22c5f8597d548adbcc46f0573e43e21e751f39446c5a5e804a12aace402b7a315d7f + languageName: node + linkType: hard + +"cliui@npm:^8.0.1": + version: 8.0.1 + resolution: "cliui@npm:8.0.1" + dependencies: + string-width: ^4.2.0 + strip-ansi: ^6.0.1 + wrap-ansi: ^7.0.0 + checksum: 79648b3b0045f2e285b76fb2e24e207c6db44323581e421c3acbd0e86454cba1b37aea976ab50195a49e7384b871e6dfb2247ad7dec53c02454ac6497394cb56 + languageName: node + linkType: hard + +"clone-deep@npm:4.0.1, clone-deep@npm:^4.0.1": + version: 4.0.1 + resolution: "clone-deep@npm:4.0.1" + dependencies: + is-plain-object: ^2.0.4 + kind-of: ^6.0.2 + shallow-clone: ^3.0.0 + checksum: 770f912fe4e6f21873c8e8fbb1e99134db3b93da32df271d00589ea4a29dbe83a9808a322c93f3bcaf8584b8b4fa6fc269fc8032efbaa6728e0c9886c74467d2 + languageName: node + linkType: hard + +"clone@npm:^1.0.2": + version: 1.0.4 + resolution: "clone@npm:1.0.4" + checksum: d06418b7335897209e77bdd430d04f882189582e67bd1f75a04565f3f07f5b3f119a9d670c943b6697d0afb100f03b866b3b8a1f91d4d02d72c4ecf2bb64b5dd + languageName: node + linkType: hard + +"cmd-shim@npm:5.0.0, cmd-shim@npm:^5.0.0": + version: 5.0.0 + resolution: "cmd-shim@npm:5.0.0" + dependencies: + mkdirp-infer-owner: ^2.0.0 + checksum: 83d2a46cdf4adbb38d3d3184364b2df0e4c001ac770f5ca94373825d7a48838b4cb8a59534ef48f02b0d556caa047728589ca65c640c17c0b417b3afb34acfbb + languageName: node + linkType: hard + +"co@npm:3.1.0": + version: 3.1.0 + resolution: "co@npm:3.1.0" + checksum: b7c685595103663317be1cbe3a00386b0b3643a6a859aaeb20ca2a7fa8b0d5c5f744de55d8b0b44bb07635c86bcd48d64684fcfccf52381ede3de55ed374dc80 + languageName: node + linkType: hard + +"co@npm:^4.6.0": + version: 4.6.0 + resolution: "co@npm:4.6.0" + checksum: 5210d9223010eb95b29df06a91116f2cf7c8e0748a9013ed853b53f362ea0e822f1e5bb054fb3cefc645239a4cf966af1f6133a3b43f40d591f3b68ed6cf0510 + languageName: node + linkType: hard + +"codemirror@npm:*": + version: 5.61.1 + resolution: "codemirror@npm:5.61.1" + checksum: 54b303ca945a2d4ef459239a7785cef34499a7ff3b8f9d997471f3d86292a757ab130d61f5d92ee33822f17ff30bba57149f821030aa166956ef68202a1ef8ee + languageName: node + linkType: hard + +"collapse-white-space@npm:^1.0.2": + version: 1.0.6 + resolution: "collapse-white-space@npm:1.0.6" + checksum: 9673fb797952c5c888341435596c69388b22cd5560c8cd3f40edb72734a9c820f56a7c9525166bcb7068b5d5805372e6fd0c4b9f2869782ad070cb5d3faf26e7 + languageName: node + linkType: hard + +"collect-v8-coverage@npm:^1.0.0": + version: 1.0.1 + resolution: "collect-v8-coverage@npm:1.0.1" + checksum: 4efe0a1fccd517b65478a2364b33dadd0a43fc92a56f59aaece9b6186fe5177b2de471253587de7c91516f07c7268c2f6770b6cbcffc0e0ece353b766ec87e55 + languageName: node + linkType: hard + +"color-convert@npm:^1.9.0": + version: 1.9.3 + resolution: "color-convert@npm:1.9.3" + dependencies: + color-name: 1.1.3 + checksum: fd7a64a17cde98fb923b1dd05c5f2e6f7aefda1b60d67e8d449f9328b4e53b228a428fd38bfeaeb2db2ff6b6503a776a996150b80cdf224062af08a5c8a3a203 + languageName: node + linkType: hard + +"color-convert@npm:^2.0.1": + version: 2.0.1 + resolution: "color-convert@npm:2.0.1" + dependencies: + color-name: ~1.1.4 + checksum: 79e6bdb9fd479a205c71d89574fccfb22bd9053bd98c6c4d870d65c132e5e904e6034978e55b43d69fcaa7433af2016ee203ce76eeba9cfa554b373e7f7db336 + languageName: node + linkType: hard + +"color-name@npm:1.1.3": + version: 1.1.3 + resolution: "color-name@npm:1.1.3" + checksum: 09c5d3e33d2105850153b14466501f2bfb30324a2f76568a408763a3b7433b0e50e5b4ab1947868e65cb101bb7cb75029553f2c333b6d4b8138a73fcc133d69d + languageName: node + linkType: hard + +"color-name@npm:~1.1.4": + version: 1.1.4 + resolution: "color-name@npm:1.1.4" + checksum: b0445859521eb4021cd0fb0cc1a75cecf67fceecae89b63f62b201cca8d345baf8b952c966862a9d9a2632987d4f6581f0ec8d957dfacece86f0a7919316f610 + languageName: node + linkType: hard + +"color-support@npm:^1.1.2, color-support@npm:^1.1.3": + version: 1.1.3 + resolution: "color-support@npm:1.1.3" + bin: + color-support: bin.js + checksum: 9b7356817670b9a13a26ca5af1c21615463b500783b739b7634a0c2047c16cef4b2865d7576875c31c3cddf9dd621fa19285e628f20198b233a5cfdda6d0793b + languageName: node + linkType: hard + +"colorette@npm:^2.0.14": + version: 2.0.19 + resolution: "colorette@npm:2.0.19" + checksum: 888cf5493f781e5fcf54ce4d49e9d7d698f96ea2b2ef67906834bb319a392c667f9ec69f4a10e268d2946d13a9503d2d19b3abaaaf174e3451bfe91fb9d82427 + languageName: node + linkType: hard + +"columnify@npm:1.6.0": + version: 1.6.0 + resolution: "columnify@npm:1.6.0" + dependencies: + strip-ansi: ^6.0.1 + wcwidth: ^1.0.0 + checksum: 0d590023616a27bcd2135c0f6ddd6fac94543263f9995538bbe391068976e30545e5534d369737ec7c3e9db4e53e70a277462de46aeb5a36e6997b4c7559c335 + languageName: node + linkType: hard + +"combined-stream@npm:^1.0.8": + version: 1.0.8 + resolution: "combined-stream@npm:1.0.8" + dependencies: + delayed-stream: ~1.0.0 + checksum: 49fa4aeb4916567e33ea81d088f6584749fc90c7abec76fd516bf1c5aa5c79f3584b5ba3de6b86d26ddd64bae5329c4c7479343250cfe71c75bb366eae53bb7c + languageName: node + linkType: hard + +"command-exists@npm:^1.2.6": + version: 1.2.9 + resolution: "command-exists@npm:1.2.9" + checksum: 729ae3d88a2058c93c58840f30341b7f82688a573019535d198b57a4d8cb0135ced0ad7f52b591e5b28a90feb2c675080ce916e56254a0f7c15cb2395277cac3 + languageName: node + linkType: hard + +"commander@npm:^10.0.1": + version: 10.0.1 + resolution: "commander@npm:10.0.1" + checksum: 436901d64a818295803c1996cd856621a74f30b9f9e28a588e726b2b1670665bccd7c1a77007ebf328729f0139838a88a19265858a0fa7a8728c4656796db948 + languageName: node + linkType: hard + +"commander@npm:^2.20.0": + version: 2.20.3 + resolution: "commander@npm:2.20.3" + checksum: ab8c07884e42c3a8dbc5dd9592c606176c7eb5c1ca5ff274bcf907039b2c41de3626f684ea75ccf4d361ba004bbaff1f577d5384c155f3871e456bdf27becf9e + languageName: node + linkType: hard + +"commander@npm:^7.2.0": + version: 7.2.0 + resolution: "commander@npm:7.2.0" + checksum: 53501cbeee61d5157546c0bef0fedb6cdfc763a882136284bed9a07225f09a14b82d2a84e7637edfd1a679fb35ed9502fd58ef1d091e6287f60d790147f68ddc + languageName: node + linkType: hard + +"commander@npm:^9.4.1": + version: 9.5.0 + resolution: "commander@npm:9.5.0" + checksum: c7a3e27aa59e913b54a1bafd366b88650bc41d6651f0cbe258d4ff09d43d6a7394232a4dadd0bf518b3e696fdf595db1028a0d82c785b88bd61f8a440cecfade + languageName: node + linkType: hard + +"commander@npm:~2.19.0": + version: 2.19.0 + resolution: "commander@npm:2.19.0" + checksum: d52ffb0b31528784005356f879591b5a4875d3e88806c115fb30a8de0994d2fa9ca3f72a3cb880cdaf1bfb9df185f928cfcbbc656fa831f9c6109a209569ef6d + languageName: node + linkType: hard + +"common-ancestor-path@npm:^1.0.1": + version: 1.0.1 + resolution: "common-ancestor-path@npm:1.0.1" + checksum: 1d2e4186067083d8cc413f00fc2908225f04ae4e19417ded67faa6494fb313c4fcd5b28a52326d1a62b466e2b3a4325e92c31133c5fee628cdf8856b3a57c3d7 + languageName: node + linkType: hard + +"compare-func@npm:^2.0.0": + version: 2.0.0 + resolution: "compare-func@npm:2.0.0" + dependencies: + array-ify: ^1.0.0 + dot-prop: ^5.1.0 + checksum: fb71d70632baa1e93283cf9d80f30ac97f003aabee026e0b4426c9716678079ef5fea7519b84d012cbed938c476493866a38a79760564a9e21ae9433e40e6f0d + languageName: node + linkType: hard + +"compute-gcd@npm:^1.2.1": + version: 1.2.1 + resolution: "compute-gcd@npm:1.2.1" + dependencies: + validate.io-array: ^1.0.3 + validate.io-function: ^1.0.2 + validate.io-integer-array: ^1.0.0 + checksum: 51cf33b75f7c8db5142fcb99a9d84a40260993fed8e02a7ab443834186c3ab99b3fd20b30ad9075a6a9d959d69df6da74dd3be8a59c78d9f2fe780ebda8242e1 + languageName: node + linkType: hard + +"compute-lcm@npm:^1.1.2": + version: 1.1.2 + resolution: "compute-lcm@npm:1.1.2" + dependencies: + compute-gcd: ^1.2.1 + validate.io-array: ^1.0.3 + validate.io-function: ^1.0.2 + validate.io-integer-array: ^1.0.0 + checksum: d499ab57dcb48e8d0fd233b99844a06d1cc56115602c920c586e998ebba60293731f5b6976e8a1e83ae6cbfe86716f62d9432e8d94913fed8bd8352f447dc917 + languageName: node + linkType: hard + +"concat-map@npm:0.0.1": + version: 0.0.1 + resolution: "concat-map@npm:0.0.1" + checksum: 902a9f5d8967a3e2faf138d5cb784b9979bad2e6db5357c5b21c568df4ebe62bcb15108af1b2253744844eb964fc023fbd9afbbbb6ddd0bcc204c6fb5b7bf3af + languageName: node + linkType: hard + +"concat-stream@npm:^2.0.0": + version: 2.0.0 + resolution: "concat-stream@npm:2.0.0" + dependencies: + buffer-from: ^1.0.0 + inherits: ^2.0.3 + readable-stream: ^3.0.2 + typedarray: ^0.0.6 + checksum: d7f75d48f0ecd356c1545d87e22f57b488172811b1181d96021c7c4b14ab8855f5313280263dca44bb06e5222f274d047da3e290a38841ef87b59719bde967c7 + languageName: node + linkType: hard + +"config-chain@npm:1.1.12": + version: 1.1.12 + resolution: "config-chain@npm:1.1.12" + dependencies: + ini: ^1.3.4 + proto-list: ~1.2.1 + checksum: a16332f87212b4015afcdfc95fe42b40b162e7f10b4f4370ab3239979b6e69a41b4e6fb34d7891aa028a557f2340da236f810df433b18dfa5c408b2eb8489bf7 + languageName: node + linkType: hard + +"console-control-strings@npm:^1.0.0, console-control-strings@npm:^1.1.0": + version: 1.1.0 + resolution: "console-control-strings@npm:1.1.0" + checksum: 8755d76787f94e6cf79ce4666f0c5519906d7f5b02d4b884cf41e11dcd759ed69c57da0670afd9236d229a46e0f9cf519db0cd829c6dca820bb5a5c3def584ed + languageName: node + linkType: hard + +"conventional-changelog-angular@npm:5.0.12": + version: 5.0.12 + resolution: "conventional-changelog-angular@npm:5.0.12" + dependencies: + compare-func: ^2.0.0 + q: ^1.5.1 + checksum: 552db8762d210a5172b1ad8cd95312e2e2a0483ba43f8d30b075a56ccf05231fdca1d4d5843028d43bec6bc7f903f480005efc5386587321a15a1fc4d2b73016 + languageName: node + linkType: hard + +"conventional-changelog-core@npm:4.2.4": + version: 4.2.4 + resolution: "conventional-changelog-core@npm:4.2.4" + dependencies: + add-stream: ^1.0.0 + conventional-changelog-writer: ^5.0.0 + conventional-commits-parser: ^3.2.0 + dateformat: ^3.0.0 + get-pkg-repo: ^4.0.0 + git-raw-commits: ^2.0.8 + git-remote-origin-url: ^2.0.0 + git-semver-tags: ^4.1.1 + lodash: ^4.17.15 + normalize-package-data: ^3.0.0 + q: ^1.5.1 + read-pkg: ^3.0.0 + read-pkg-up: ^3.0.0 + through2: ^4.0.0 + checksum: 56d5194040495ea316e53fd64cb3614462c318f0fe54b1bf25aba6fba9b3d51cb9fdf7ac5b766f17e5529a3f90e317257394e00b0a9a5ce42caf3a59f82afb3a + languageName: node + linkType: hard + +"conventional-changelog-preset-loader@npm:^2.3.4": + version: 2.3.4 + resolution: "conventional-changelog-preset-loader@npm:2.3.4" + checksum: 23a889b7fcf6fe7653e61f32a048877b2f954dcc1e0daa2848c5422eb908e6f24c78372f8d0d2130b5ed941c02e7010c599dccf44b8552602c6c8db9cb227453 + languageName: node + linkType: hard + +"conventional-changelog-writer@npm:^5.0.0": + version: 5.0.1 + resolution: "conventional-changelog-writer@npm:5.0.1" + dependencies: + conventional-commits-filter: ^2.0.7 + dateformat: ^3.0.0 + handlebars: ^4.7.7 + json-stringify-safe: ^5.0.1 + lodash: ^4.17.15 + meow: ^8.0.0 + semver: ^6.0.0 + split: ^1.0.0 + through2: ^4.0.0 + bin: + conventional-changelog-writer: cli.js + checksum: 5c0129db44577f14b1f8de225b62a392a9927ba7fe3422cb21ad71a771b8472bd03badb7c87cb47419913abc3f2ce3759b69f59550cdc6f7a7b0459015b3b44c + languageName: node + linkType: hard + +"conventional-commits-filter@npm:^2.0.7": + version: 2.0.7 + resolution: "conventional-commits-filter@npm:2.0.7" + dependencies: + lodash.ismatch: ^4.4.0 + modify-values: ^1.0.0 + checksum: feb567f680a6da1baaa1ef3cff393b3c56a5828f77ab9df5e70626475425d109a6fee0289b4979223c62bbd63bf9c98ef532baa6fcb1b66ee8b5f49077f5d46c + languageName: node + linkType: hard + +"conventional-commits-parser@npm:^3.2.0": + version: 3.2.4 + resolution: "conventional-commits-parser@npm:3.2.4" + dependencies: + JSONStream: ^1.0.4 + is-text-path: ^1.0.1 + lodash: ^4.17.15 + meow: ^8.0.0 + split2: ^3.0.0 + through2: ^4.0.0 + bin: + conventional-commits-parser: cli.js + checksum: 1627ff203bc9586d89e47a7fe63acecf339aba74903b9114e23d28094f79d4e2d6389bf146ae561461dcba8fc42e7bc228165d2b173f15756c43f1d32bc50bfd + languageName: node + linkType: hard + +"conventional-recommended-bump@npm:6.1.0": + version: 6.1.0 + resolution: "conventional-recommended-bump@npm:6.1.0" + dependencies: + concat-stream: ^2.0.0 + conventional-changelog-preset-loader: ^2.3.4 + conventional-commits-filter: ^2.0.7 + conventional-commits-parser: ^3.2.0 + git-raw-commits: ^2.0.8 + git-semver-tags: ^4.1.1 + meow: ^8.0.0 + q: ^1.5.1 + bin: + conventional-recommended-bump: cli.js + checksum: da1d7a5f3b9f7706bede685cdcb3db67997fdaa43c310fd5bf340955c84a4b85dbb9427031522ee06dad290b730a54be987b08629d79c73720dbad3a2531146b + languageName: node + linkType: hard + +"convert-source-map@npm:^1.6.0, convert-source-map@npm:^1.7.0": + version: 1.9.0 + resolution: "convert-source-map@npm:1.9.0" + checksum: 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: 63ae9933be5a2b8d4509daca5124e20c14d023c820258e484e32dc324d34c2754e71297c94a05784064ad27615037ef677e3f0c00469fb55f409d2bb21261035 + languageName: node + linkType: hard + +"core-js-compat@npm:^3.30.1, core-js-compat@npm:^3.30.2": + version: 3.31.0 + resolution: "core-js-compat@npm:3.31.0" + dependencies: + browserslist: ^4.21.5 + checksum: 5c76ac5e4ab39480391f93a5aef14a2cfa188cda7bd6a7b8532de1f8bc5d89099a5025b2640d2ef70a2928614792363dcbcf8bd254aa7b2e11b85aeed7ac460f + languageName: node + linkType: hard + +"core-util-is@npm:~1.0.0": + version: 1.0.2 + resolution: "core-util-is@npm:1.0.2" + checksum: 7a4c925b497a2c91421e25bf76d6d8190f0b2359a9200dbeed136e63b2931d6294d3b1893eda378883ed363cd950f44a12a401384c609839ea616befb7927dab + languageName: node + linkType: hard + +"cosmiconfig@npm:7.0.0": + version: 7.0.0 + resolution: "cosmiconfig@npm:7.0.0" + dependencies: + "@types/parse-json": ^4.0.0 + import-fresh: ^3.2.1 + parse-json: ^5.0.0 + path-type: ^4.0.0 + yaml: ^1.10.0 + checksum: 6801feaa0249e9b9fdde5b3d70dc33b4f9c69095bec94d67e3fe08b66eac24dc7e2099f053597cfbc94b743de269aa5d2cfa7da3fde765433423b06bd122941a + languageName: node + linkType: hard + +"cosmiconfig@npm:^5.2.1": + version: 5.2.1 + resolution: "cosmiconfig@npm:5.2.1" + dependencies: + import-fresh: ^2.0.0 + is-directory: ^0.3.1 + js-yaml: ^3.13.1 + parse-json: ^4.0.0 + checksum: 8b6f1d3c8a5ffdf663a952f17af0761adf210b7a5933d0fe8988f3ca3a1f0e1e5cbbb74d5b419c15933dd2fdcaec31dbc5cc85cb8259a822342b93b529eff89c + languageName: node + linkType: hard + +"crelt@npm:^1.0.5": + version: 1.0.6 + resolution: "crelt@npm:1.0.6" + checksum: dad842093371ad702afbc0531bfca2b0a8dd920b23a42f26e66dabbed9aad9acd5b9030496359545ef3937c3aced0fd4ac39f7a2d280a23ddf9eb7fdcb94a69f + languageName: node + linkType: hard + +"cross-spawn@npm:^5.0.1": + version: 5.1.0 + resolution: "cross-spawn@npm:5.1.0" + dependencies: + lru-cache: ^4.0.1 + shebang-command: ^1.2.0 + which: ^1.2.9 + checksum: 726939c9954fc70c20e538923feaaa33bebc253247d13021737c3c7f68cdc3e0a57f720c0fe75057c0387995349f3f12e20e9bfdbf12274db28019c7ea4ec166 + languageName: node + linkType: hard + +"cross-spawn@npm:^6.0.0, cross-spawn@npm:^6.0.5": + version: 6.0.5 + resolution: "cross-spawn@npm:6.0.5" + dependencies: + nice-try: ^1.0.4 + path-key: ^2.0.1 + semver: ^5.5.0 + shebang-command: ^1.2.0 + which: ^1.2.9 + checksum: f893bb0d96cd3d5751d04e67145bdddf25f99449531a72e82dcbbd42796bbc8268c1076c6b3ea51d4d455839902804b94bc45dfb37ecbb32ea8e54a6741c3ab9 + languageName: node + linkType: hard + +"cross-spawn@npm:^7.0.0, cross-spawn@npm:^7.0.2, cross-spawn@npm:^7.0.3": + version: 7.0.3 + resolution: "cross-spawn@npm:7.0.3" + dependencies: + path-key: ^3.1.0 + shebang-command: ^2.0.0 + which: ^2.0.1 + checksum: 671cc7c7288c3a8406f3c69a3ae2fc85555c04169e9d611def9a675635472614f1c0ed0ef80955d5b6d4e724f6ced67f0ad1bb006c2ea643488fcfef994d7f52 + languageName: node + linkType: hard + +"crypto-random-string@npm:^2.0.0": + version: 2.0.0 + resolution: "crypto-random-string@npm:2.0.0" + checksum: 0283879f55e7c16fdceacc181f87a0a65c53bc16ffe1d58b9d19a6277adcd71900d02bb2c4843dd55e78c51e30e89b0fec618a7f170ebcc95b33182c28f05fd6 + languageName: node + linkType: hard + +"css-loader@npm:^6.7.1": + version: 6.8.1 + resolution: "css-loader@npm:6.8.1" + dependencies: + icss-utils: ^5.1.0 + postcss: ^8.4.21 + postcss-modules-extract-imports: ^3.0.0 + postcss-modules-local-by-default: ^4.0.3 + postcss-modules-scope: ^3.0.0 + postcss-modules-values: ^4.0.0 + postcss-value-parser: ^4.2.0 + semver: ^7.3.8 + peerDependencies: + webpack: ^5.0.0 + checksum: 7c1784247bdbe76dc5c55fb1ac84f1d4177a74c47259942c9cfdb7a8e6baef11967a0bc85ac285f26bd26d5059decb848af8154a03fdb4f4894f41212f45eef3 + languageName: node + linkType: hard + +"cssesc@npm:^3.0.0": + version: 3.0.0 + resolution: "cssesc@npm:3.0.0" + bin: + cssesc: bin/cssesc + checksum: f8c4ababffbc5e2ddf2fa9957dda1ee4af6048e22aeda1869d0d00843223c1b13ad3f5d88b51caa46c994225eacb636b764eb807a8883e2fb6f99b4f4e8c48b2 + languageName: node + linkType: hard + +"cssom@npm:^0.5.0": + version: 0.5.0 + resolution: "cssom@npm:0.5.0" + checksum: 823471aa30091c59e0a305927c30e7768939b6af70405808f8d2ce1ca778cddcb24722717392438329d1691f9a87cb0183b64b8d779b56a961546d54854fde01 + languageName: node + linkType: hard + +"cssom@npm:~0.3.6": + version: 0.3.8 + resolution: "cssom@npm:0.3.8" + checksum: 24beb3087c76c0d52dd458be9ee1fbc80ac771478a9baef35dd258cdeb527c68eb43204dd439692bb2b1ae5272fa5f2946d10946edab0d04f1078f85e06bc7f6 + languageName: node + linkType: hard + +"cssstyle@npm:^2.3.0": + version: 2.3.0 + resolution: "cssstyle@npm:2.3.0" + dependencies: + cssom: ~0.3.6 + checksum: 5f05e6fd2e3df0b44695c2f08b9ef38b011862b274e320665176467c0725e44a53e341bc4959a41176e83b66064ab786262e7380fd1cabeae6efee0d255bb4e3 + languageName: node + linkType: hard + +"csstype@npm:3.0.10, csstype@npm:^3.0.2": + version: 3.0.10 + resolution: "csstype@npm:3.0.10" + checksum: 20a8fa324f2b33ddf94aa7507d1b6ab3daa6f3cc308888dc50126585d7952f2471de69b2dbe0635d1fdc31223fef8e070842691877e725caf456e2378685a631 + languageName: node + linkType: hard + +"d@npm:1, d@npm:^1.0.1": + version: 1.0.1 + resolution: "d@npm:1.0.1" + dependencies: + es5-ext: ^0.10.50 + type: ^1.0.1 + checksum: 49ca0639c7b822db670de93d4fbce44b4aa072cd848c76292c9978a8cd0fff1028763020ff4b0f147bd77bfe29b4c7f82e0f71ade76b2a06100543cdfd948d19 + languageName: node + linkType: hard + +"dargs@npm:^7.0.0": + version: 7.0.0 + resolution: "dargs@npm:7.0.0" + checksum: b8f1e3cba59c42e1f13a114ad4848c3fc1cf7470f633ee9e9f1043762429bc97d91ae31b826fb135eefde203a3fdb20deb0c0a0222ac29d937b8046085d668d1 + languageName: node + linkType: hard + +"data-urls@npm:^2.0.0": + version: 2.0.0 + resolution: "data-urls@npm:2.0.0" + dependencies: + abab: ^2.0.3 + whatwg-mimetype: ^2.3.0 + whatwg-url: ^8.0.0 + checksum: 97caf828aac25e25e04ba6869db0f99c75e6859bb5b424ada28d3e7841941ebf08ddff3c1b1bb4585986bd507a5d54c2a716853ea6cb98af877400e637393e71 + languageName: node + linkType: hard + +"data-urls@npm:^3.0.2": + version: 3.0.2 + resolution: "data-urls@npm:3.0.2" + dependencies: + abab: ^2.0.6 + whatwg-mimetype: ^3.0.0 + whatwg-url: ^11.0.0 + checksum: 033fc3dd0fba6d24bc9a024ddcf9923691dd24f90a3d26f6545d6a2f71ec6956f93462f2cdf2183cc46f10dc01ed3bcb36731a8208456eb1a08147e571fe2a76 + languageName: node + linkType: hard + +"date-format@npm:^4.0.5": + version: 4.0.5 + resolution: "date-format@npm:4.0.5" + checksum: 8ef7b34699ea218ff9e049e2650e0f7e4c0820d92b937dc4934ade93782bf7d9647819e45cb50c0c3dc8d67d4fb210a0a114353fcb7f1400506e91be9fdd189a + languageName: node + linkType: hard + +"dateformat@npm:^3.0.0": + version: 3.0.3 + resolution: "dateformat@npm:3.0.3" + checksum: ca4911148abb09887bd9bdcd632c399b06f3ecad709a18eb594d289a1031982f441e08e281db77ffebcb2cbcbfa1ac578a7cbfbf8743f41009aa5adc1846ed34 + languageName: node + linkType: hard + +"debug@npm:3.1.0": + version: 3.1.0 + resolution: "debug@npm:3.1.0" + dependencies: + ms: 2.0.0 + checksum: 0b52718ab957254a5b3ca07fc34543bc778f358620c206a08452251eb7fc193c3ea3505072acbf4350219c14e2d71ceb7bdaa0d3370aa630b50da790458d08b3 + languageName: node + linkType: hard + +"debug@npm:4, debug@npm:^4.1.0, debug@npm:^4.1.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: + ms: 2.1.2 + peerDependenciesMeta: + supports-color: + optional: true + checksum: 3dbad3f94ea64f34431a9cbf0bafb61853eda57bff2880036153438f50fb5a84f27683ba0d8e5426bf41a8c6ff03879488120cf5b3a761e77953169c0600a708 + languageName: node + linkType: hard + +"debug@npm:^2.6.9": + version: 2.6.9 + resolution: "debug@npm:2.6.9" + dependencies: + ms: 2.0.0 + checksum: d2f51589ca66df60bf36e1fa6e4386b318c3f1e06772280eea5b1ae9fd3d05e9c2b7fd8a7d862457d00853c75b00451aa2d7459b924629ee385287a650f58fe6 + languageName: node + linkType: hard + +"debug@npm:^3.1.0, debug@npm:^3.2.7": + version: 3.2.7 + resolution: "debug@npm:3.2.7" + dependencies: + ms: ^2.1.1 + checksum: b3d8c5940799914d30314b7c3304a43305fd0715581a919dacb8b3176d024a782062368405b47491516d2091d6462d4d11f2f4974a405048094f8bfebfa3071c + languageName: node + linkType: hard + +"debuglog@npm:^1.0.1": + version: 1.0.1 + resolution: "debuglog@npm:1.0.1" + checksum: 970679f2eb7a73867e04d45b52583e7ec6dee1f33c058e9147702e72a665a9647f9c3d6e7c2f66f6bf18510b23eb5ded1b617e48ac1db23603809c5ddbbb9763 + languageName: node + linkType: hard + +"decamelize-keys@npm:^1.1.0": + version: 1.1.0 + resolution: "decamelize-keys@npm:1.1.0" + dependencies: + decamelize: ^1.1.0 + map-obj: ^1.0.0 + checksum: 8bc5d32e035a072f5dffc1f1f3d26ca7ab1fb44a9cade34c97ab6cd1e62c81a87e718101e96de07d78cecda20a3fdb955df958e46671ccad01bb8dcf0de2e298 + languageName: node + linkType: hard + +"decamelize@npm:^1.1.0": + version: 1.2.0 + resolution: "decamelize@npm:1.2.0" + checksum: ad8c51a7e7e0720c70ec2eeb1163b66da03e7616d7b98c9ef43cce2416395e84c1e9548dd94f5f6ffecfee9f8b94251fc57121a8b021f2ff2469b2bae247b8aa + languageName: node + linkType: hard + +"decimal.js@npm:^10.4.2": + version: 10.4.3 + resolution: "decimal.js@npm:10.4.3" + checksum: 796404dcfa9d1dbfdc48870229d57f788b48c21c603c3f6554a1c17c10195fc1024de338b0cf9e1efe0c7c167eeb18f04548979bcc5fdfabebb7cc0ae3287bae + languageName: node + linkType: hard + +"dedent@npm:0.7.0, dedent@npm:^0.7.0": + version: 0.7.0 + resolution: "dedent@npm:0.7.0" + checksum: 87de191050d9a40dd70cad01159a0bcf05ecb59750951242070b6abf9569088684880d00ba92a955b4058804f16eeaf91d604f283929b4f614d181cd7ae633d2 + languageName: node + linkType: hard + +"deep-is@npm:^0.1.3, deep-is@npm:~0.1.3": + version: 0.1.4 + resolution: "deep-is@npm:0.1.4" + checksum: edb65dd0d7d1b9c40b2f50219aef30e116cedd6fc79290e740972c132c09106d2e80aa0bc8826673dd5a00222d4179c84b36a790eef63a4c4bca75a37ef90804 + languageName: node + linkType: hard + +"deepmerge@npm:^4.2.2": + version: 4.3.0 + resolution: "deepmerge@npm:4.3.0" + checksum: c7980eb5c5be040b371f1df0d566473875cfabed9f672ccc177b81ba8eee5686ce2478de2f1d0076391621cbe729e5eacda397179a59ef0f68901849647db126 + languageName: node + linkType: hard + +"defaults@npm:^1.0.3": + version: 1.0.3 + resolution: "defaults@npm:1.0.3" + dependencies: + clone: ^1.0.2 + checksum: 96e2112da6553d376afd5265ea7cbdb2a3b45535965d71ab8bb1da10c8126d168fdd5268799625324b368356d21ba2a7b3d4ec50961f11a47b7feb9de3d4413e + languageName: node + linkType: hard + +"define-lazy-prop@npm:^2.0.0": + version: 2.0.0 + resolution: "define-lazy-prop@npm:2.0.0" + checksum: 0115fdb065e0490918ba271d7339c42453d209d4cb619dfe635870d906731eff3e1ade8028bb461ea27ce8264ec5e22c6980612d332895977e89c1bbc80fcee2 + languageName: node + linkType: hard + +"define-properties@npm:^1.1.3, define-properties@npm:^1.1.4": + version: 1.2.0 + resolution: "define-properties@npm:1.2.0" + dependencies: + has-property-descriptors: ^1.0.0 + object-keys: ^1.1.1 + checksum: e60aee6a19b102df4e2b1f301816804e81ab48bb91f00d0d935f269bf4b3f79c88b39e4f89eaa132890d23267335fd1140dfcd8d5ccd61031a0a2c41a54e33a6 + languageName: node + linkType: hard + +"del@npm:^6.0.0": + version: 6.0.0 + resolution: "del@npm:6.0.0" + dependencies: + globby: ^11.0.1 + graceful-fs: ^4.2.4 + is-glob: ^4.0.1 + is-path-cwd: ^2.2.0 + is-path-inside: ^3.0.2 + p-map: ^4.0.0 + rimraf: ^3.0.2 + slash: ^3.0.0 + checksum: 5742891627e91aaf62385714025233f4664da28bc55b6ab825649dcdea4691fed3cf329a2b1913fd2d2612e693e99e08a03c84cac7f36ef54bacac9390520192 + languageName: node + linkType: hard + +"delayed-stream@npm:~1.0.0": + version: 1.0.0 + resolution: "delayed-stream@npm:1.0.0" + checksum: 46fe6e83e2cb1d85ba50bd52803c68be9bd953282fa7096f51fc29edd5d67ff84ff753c51966061e5ba7cb5e47ef6d36a91924eddb7f3f3483b1c560f77a0020 + 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 + +"denque@npm:^2.0.1": + version: 2.0.1 + resolution: "denque@npm:2.0.1" + checksum: ec398d1e3c6c8d4f5213dcf9ad74d7faa3b461e29a0019c9742b49a97ac5e16aa7134db45fa9d841e318e7722dd1ba670a474fde9a5b0d870b3a5fc6fe914c30 + languageName: node + linkType: hard + +"depd@npm:^1.1.2": + version: 1.1.2 + resolution: "depd@npm:1.1.2" + checksum: 6b406620d269619852885ce15965272b829df6f409724415e0002c8632ab6a8c0a08ec1f0bd2add05dc7bd7507606f7e2cc034fa24224ab829580040b835ecd9 + languageName: node + linkType: hard + +"deprecation@npm:^2.0.0, deprecation@npm:^2.3.1": + version: 2.3.1 + resolution: "deprecation@npm:2.3.1" + checksum: f56a05e182c2c195071385455956b0c4106fe14e36245b00c689ceef8e8ab639235176a96977ba7c74afb173317fac2e0ec6ec7a1c6d1e6eaa401c586c714132 + languageName: node + linkType: hard + +"detect-indent@npm:^5.0.0": + version: 5.0.0 + resolution: "detect-indent@npm:5.0.0" + checksum: 61763211daa498e00eec073aba95d544ae5baed19286a0a655697fa4fffc9f4539c8376e2c7df8fa11d6f8eaa16c1e6a689f403ac41ee78a060278cdadefe2ff + languageName: node + linkType: hard + +"detect-libc@npm:^2.0.0": + version: 2.0.1 + resolution: "detect-libc@npm:2.0.1" + checksum: ccb05fcabbb555beb544d48080179c18523a343face9ee4e1a86605a8715b4169f94d663c21a03c310ac824592f2ba9a5270218819bb411ad7be578a527593d7 + languageName: node + linkType: hard + +"detect-newline@npm:^3.0.0": + version: 3.1.0 + resolution: "detect-newline@npm:3.1.0" + checksum: ae6cd429c41ad01b164c59ea36f264a2c479598e61cba7c99da24175a7ab80ddf066420f2bec9a1c57a6bead411b4655ff15ad7d281c000a89791f48cbe939e7 + languageName: node + linkType: hard + +"dezalgo@npm:^1.0.0": + version: 1.0.4 + resolution: "dezalgo@npm:1.0.4" + dependencies: + asap: ^2.0.0 + wrappy: 1 + checksum: 895389c6aead740d2ab5da4d3466d20fa30f738010a4d3f4dcccc9fc645ca31c9d10b7e1804ae489b1eb02c7986f9f1f34ba132d409b043082a86d9a4e745624 + languageName: node + linkType: hard + +"dictionary-en-gb@npm:^2.0.0": + version: 2.2.2 + resolution: "dictionary-en-gb@npm:2.2.2" + checksum: 71281eb41a840848273fa0fa97976216b692470a76c2440e9e550161fae7c1fea8127b9da0df6573627ebdfd17c22bece32be64ffad4bc1981841a92cc4e333f + languageName: node + linkType: hard + +"dictionary-en@npm:^3.0.0": + version: 3.1.0 + resolution: "dictionary-en@npm:3.1.0" + checksum: 4b974014be7979c1ff30a43716d4f46388671c0ded2cb2107220ed60b1dbcee6c3a9175751aa236347e3ddef5a23612dcc46661d37ff285f5a7abf76dfa40d92 + languageName: node + linkType: hard + +"diff-match-patch@npm:^1.0.0": + version: 1.0.5 + resolution: "diff-match-patch@npm:1.0.5" + checksum: 841522d01b09cccbc4e4402cf61514a81b906349a7d97b67222390f2d35cf5df277cb23959eeed212d5e46afb5629cebab41b87918672c5a05c11c73688630e3 + languageName: node + linkType: hard + +"diff-sequences@npm:^29.4.3": + version: 29.4.3 + resolution: "diff-sequences@npm:29.4.3" + checksum: 28b265e04fdddcf7f9f814effe102cc95a9dec0564a579b5aed140edb24fc345c611ca52d76d725a3cab55d3888b915b5e8a4702e0f6058968a90fa5f41fcde7 + languageName: node + linkType: hard + +"dir-glob@npm:^3.0.1": + version: 3.0.1 + resolution: "dir-glob@npm:3.0.1" + dependencies: + path-type: ^4.0.0 + checksum: fa05e18324510d7283f55862f3161c6759a3f2f8dbce491a2fc14c8324c498286c54282c1f0e933cb930da8419b30679389499b919122952a4f8592362ef4615 + languageName: node + linkType: hard + +"dockerfile-ast@npm:0.4.1": + version: 0.4.1 + resolution: "dockerfile-ast@npm:0.4.1" + dependencies: + vscode-languageserver-textdocument: ^1.0.1 + vscode-languageserver-types: ^3.17.0-next.3 + checksum: 6fc2f1fdbd01e233950b02a9945b13d3ad468cc821c4dcb9d77a59977b4d5d782c48e67eff64e1ec972bdab30c2b8596faea32f291e60505c4a3fe0a20df4e23 + languageName: node + linkType: hard + +"dockerfile-language-server-nodejs@npm:^0.7.1": + version: 0.7.3 + resolution: "dockerfile-language-server-nodejs@npm:0.7.3" + dependencies: + dockerfile-language-service: 0.7.4 + dockerfile-utils: 0.9.3 + vscode-languageserver: ^8.0.0-next.2 + bin: + docker-langserver: bin/docker-langserver + checksum: 12cd58c2989d02b6398d5146afea98d4804ea705d6f96bcbdf232cdf5f9a5e3b24faa72c7c261419743e0f8bc9f4e7babaa689c2e7f002d9e54b2d6c90b13a27 + languageName: node + linkType: hard + +"dockerfile-language-service@npm:0.7.4": + version: 0.7.4 + resolution: "dockerfile-language-service@npm:0.7.4" + dependencies: + dockerfile-ast: 0.4.1 + dockerfile-utils: 0.9.3 + vscode-languageserver-types: 3.17.0-next.3 + checksum: 88cc7386c254cd11dbe4142686e07565a96fad9a07beea3909d8c97544144489a7f7e2aa733b3e4a8f3a58cb25a0a72f5b9dc1d3a13bc2ab74b0db3a92c67ff6 + languageName: node + linkType: hard + +"dockerfile-utils@npm:0.9.3": + version: 0.9.3 + resolution: "dockerfile-utils@npm:0.9.3" + dependencies: + dockerfile-ast: 0.4.1 + vscode-languageserver-textdocument: ^1.0.1 + vscode-languageserver-types: ^3.17.0-next.3 + bin: + dockerfile-utils: bin/dockerfile-utils + checksum: e5f4f66c02d44e8469c224c70681397f0d93418f3a504e0e54b22fa87917f6cef3e26f3c5cb752d7a33548c8c8972a83d0a8a3c4ea4163e071fe83754ba5635c + languageName: node + linkType: hard + +"doctrine@npm:^2.1.0": + version: 2.1.0 + resolution: "doctrine@npm:2.1.0" + dependencies: + esutils: ^2.0.2 + checksum: a45e277f7feaed309fe658ace1ff286c6e2002ac515af0aaf37145b8baa96e49899638c7cd47dccf84c3d32abfc113246625b3ac8f552d1046072adee13b0dc8 + languageName: node + linkType: hard + +"doctrine@npm:^3.0.0": + version: 3.0.0 + resolution: "doctrine@npm:3.0.0" + dependencies: + esutils: ^2.0.2 + checksum: fd7673ca77fe26cd5cba38d816bc72d641f500f1f9b25b83e8ce28827fe2da7ad583a8da26ab6af85f834138cf8dae9f69b0cd6ab925f52ddab1754db44d99ce + languageName: node + linkType: hard + +"dom-serializer@npm:^1.0.1": + version: 1.4.1 + resolution: "dom-serializer@npm:1.4.1" + dependencies: + domelementtype: ^2.0.1 + domhandler: ^4.2.0 + entities: ^2.0.0 + checksum: fbb0b01f87a8a2d18e6e5a388ad0f7ec4a5c05c06d219377da1abc7bb0f674d804f4a8a94e3f71ff15f6cb7dcfc75704a54b261db672b9b3ab03da6b758b0b22 + languageName: node + linkType: hard + +"domelementtype@npm:^2.0.1, domelementtype@npm:^2.2.0": + version: 2.3.0 + resolution: "domelementtype@npm:2.3.0" + checksum: ee837a318ff702622f383409d1f5b25dd1024b692ef64d3096ff702e26339f8e345820f29a68bcdcea8cfee3531776b3382651232fbeae95612d6f0a75efb4f6 + languageName: node + linkType: hard + +"domexception@npm:^4.0.0": + version: 4.0.0 + resolution: "domexception@npm:4.0.0" + dependencies: + webidl-conversions: ^7.0.0 + checksum: ddbc1268edf33a8ba02ccc596735ede80375ee0cf124b30d2f05df5b464ba78ef4f49889b6391df4a04954e63d42d5631c7fcf8b1c4f12bc531252977a5f13d5 + languageName: node + linkType: hard + +"domhandler@npm:^4.0.0, domhandler@npm:^4.2.0": + version: 4.3.1 + resolution: "domhandler@npm:4.3.1" + dependencies: + domelementtype: ^2.2.0 + checksum: 4c665ceed016e1911bf7d1dadc09dc888090b64dee7851cccd2fcf5442747ec39c647bb1cb8c8919f8bbdd0f0c625a6bafeeed4b2d656bbecdbae893f43ffaaa + languageName: node + linkType: hard + +"domino@npm:^2.1.6": + version: 2.1.6 + resolution: "domino@npm:2.1.6" + checksum: 9b1b6d2661efd8bf942b70d5e11ac0de6a63f17e49b7eb227d9a612fa7b7c12b7775520d64f498988a8ee334ea9c59a463c84ea510b0af17dd3e13fdce120410 + languageName: node + linkType: hard + +"domutils@npm:^2.5.2": + version: 2.8.0 + resolution: "domutils@npm:2.8.0" + dependencies: + dom-serializer: ^1.0.1 + domelementtype: ^2.2.0 + domhandler: ^4.2.0 + checksum: abf7434315283e9aadc2a24bac0e00eab07ae4313b40cc239f89d84d7315ebdfd2fb1b5bf750a96bc1b4403d7237c7b2ebf60459be394d625ead4ca89b934391 + languageName: node + linkType: hard + +"dot-prop@npm:6.0.1": + version: 6.0.1 + resolution: "dot-prop@npm:6.0.1" + dependencies: + is-obj: ^2.0.0 + checksum: 0f47600a4b93e1dc37261da4e6909652c008832a5d3684b5bf9a9a0d3f4c67ea949a86dceed9b72f5733ed8e8e6383cc5958df3bbd0799ee317fd181f2ece700 + languageName: node + linkType: hard + +"dot-prop@npm:^5.1.0": + version: 5.3.0 + resolution: "dot-prop@npm:5.3.0" + dependencies: + is-obj: ^2.0.0 + checksum: d5775790093c234ef4bfd5fbe40884ff7e6c87573e5339432870616331189f7f5d86575c5b5af2dcf0f61172990f4f734d07844b1f23482fff09e3c4bead05ea + languageName: node + linkType: hard + +"dotenv@npm:~10.0.0": + version: 10.0.0 + resolution: "dotenv@npm:10.0.0" + checksum: f412c5fe8c24fbe313d302d2500e247ba8a1946492db405a4de4d30dd0eb186a88a43f13c958c5a7de303938949c4231c56994f97d05c4bc1f22478d631b4005 + languageName: node + linkType: hard + +"duplexer@npm:^0.1.1": + version: 0.1.2 + resolution: "duplexer@npm:0.1.2" + checksum: 62ba61a830c56801db28ff6305c7d289b6dc9f859054e8c982abd8ee0b0a14d2e9a8e7d086ffee12e868d43e2bbe8a964be55ddbd8c8957714c87373c7a4f9b0 + languageName: node + linkType: hard + +"duplexify@npm:^4.0.0, duplexify@npm:^4.1.1": + version: 4.1.2 + resolution: "duplexify@npm:4.1.2" + dependencies: + end-of-stream: ^1.4.1 + inherits: ^2.0.3 + readable-stream: ^3.1.1 + stream-shift: ^1.0.0 + checksum: 964376c61c0e92f6ed0694b3ba97c84f199413dc40ab8dfdaef80b7a7f4982fcabf796214e28ed614a5bc1ec45488a29b81e7d46fa3f5ddf65bcb118c20145ad + languageName: node + linkType: hard + +"duplicate-package-checker-webpack-plugin@npm:^3.0.0": + version: 3.0.0 + resolution: "duplicate-package-checker-webpack-plugin@npm:3.0.0" + dependencies: + chalk: ^2.3.0 + find-root: ^1.0.0 + lodash: ^4.17.4 + semver: ^5.4.1 + checksum: d77be45cb72d79a429c64d8f8f7603fea681d182fb795459a3d4afa608faad9a923378a7e80c6855f465263e1983140b6fc3682bd0213228b8cd7906ab4b934d + languageName: node + linkType: hard + +"eastasianwidth@npm:^0.2.0": + version: 0.2.0 + resolution: "eastasianwidth@npm:0.2.0" + checksum: 7d00d7cd8e49b9afa762a813faac332dee781932d6f2c848dc348939c4253f1d4564341b7af1d041853bc3f32c2ef141b58e0a4d9862c17a7f08f68df1e0f1ed + languageName: node + linkType: hard + +"ecdsa-sig-formatter@npm:1.0.11, ecdsa-sig-formatter@npm:^1.0.11": + version: 1.0.11 + resolution: "ecdsa-sig-formatter@npm:1.0.11" + dependencies: + safe-buffer: ^5.0.1 + checksum: 207f9ab1c2669b8e65540bce29506134613dd5f122cccf1e6a560f4d63f2732d427d938f8481df175505aad94583bcb32c688737bb39a6df0625f903d6d93c03 + languageName: node + linkType: hard + +"ejs@npm:^3.1.7": + version: 3.1.8 + resolution: "ejs@npm:3.1.8" + dependencies: + jake: ^10.8.5 + bin: + ejs: bin/cli.js + checksum: 1d40d198ad52e315ccf37e577bdec06e24eefdc4e3c27aafa47751a03a0c7f0ec4310254c9277a5f14763c3cd4bbacce27497332b2d87c74232b9b1defef8efc + languageName: node + linkType: hard + +"electron-to-chromium@npm:^1.4.431": + version: 1.4.433 + resolution: "electron-to-chromium@npm:1.4.433" + checksum: 106e3bc2fb4ee5eddd4b141363900d5cd731c7579aa6bebd02509c52d6b598a1684aba1b75791e838dfa54dec0a40ddd17ea01199041ea46310aafb206395e43 + languageName: node + linkType: hard + +"emittery@npm:^0.13.1": + version: 0.13.1 + resolution: "emittery@npm:0.13.1" + checksum: 2b089ab6306f38feaabf4f6f02792f9ec85fc054fda79f44f6790e61bbf6bc4e1616afb9b232e0c5ec5289a8a452f79bfa6d905a6fd64e94b49981f0934001c6 + languageName: node + linkType: hard + +"emoji-regex@npm:^8.0.0": + version: 8.0.0 + resolution: "emoji-regex@npm:8.0.0" + checksum: d4c5c39d5a9868b5fa152f00cada8a936868fd3367f33f71be515ecee4c803132d11b31a6222b2571b1e5f7e13890156a94880345594d0ce7e3c9895f560f192 + languageName: node + linkType: hard + +"emoji-regex@npm:^9.2.2": + version: 9.2.2 + resolution: "emoji-regex@npm:9.2.2" + checksum: 8487182da74aabd810ac6d6f1994111dfc0e331b01271ae01ec1eb0ad7b5ecc2bbbbd2f053c05cb55a1ac30449527d819bbfbf0e3de1023db308cbcb47f86601 + languageName: node + linkType: hard + +"emojis-list@npm:^3.0.0": + version: 3.0.0 + resolution: "emojis-list@npm:3.0.0" + checksum: ddaaa02542e1e9436c03970eeed445f4ed29a5337dfba0fe0c38dfdd2af5da2429c2a0821304e8a8d1cadf27fdd5b22ff793571fa803ae16852a6975c65e8e70 + languageName: node + linkType: hard + +"encoding@npm:^0.1.12, encoding@npm:^0.1.13": + version: 0.1.13 + resolution: "encoding@npm:0.1.13" + dependencies: + iconv-lite: ^0.6.2 + checksum: bb98632f8ffa823996e508ce6a58ffcf5856330fde839ae42c9e1f436cc3b5cc651d4aeae72222916545428e54fd0f6aa8862fd8d25bdbcc4589f1e3f3715e7f + languageName: node + linkType: hard + +"end-of-stream@npm:^1.1.0, end-of-stream@npm:^1.4.1": + version: 1.4.4 + resolution: "end-of-stream@npm:1.4.4" + dependencies: + once: ^1.4.0 + checksum: 530a5a5a1e517e962854a31693dbb5c0b2fc40b46dad2a56a2deec656ca040631124f4795823acc68238147805f8b021abbe221f4afed5ef3c8e8efc2024908b + languageName: node + linkType: hard + +"enhanced-resolve@npm:^5.15.0": + version: 5.15.0 + resolution: "enhanced-resolve@npm:5.15.0" + dependencies: + graceful-fs: ^4.2.4 + tapable: ^2.2.0 + checksum: fbd8cdc9263be71cc737aa8a7d6c57b43d6aa38f6cc75dde6fcd3598a130cc465f979d2f4d01bb3bf475acb43817749c79f8eef9be048683602ca91ab52e4f11 + languageName: node + linkType: hard + +"enquirer@npm:~2.3.6": + version: 2.3.6 + resolution: "enquirer@npm:2.3.6" + dependencies: + ansi-colors: ^4.1.1 + checksum: 1c0911e14a6f8d26721c91e01db06092a5f7675159f0261d69c403396a385afd13dd76825e7678f66daffa930cfaa8d45f506fb35f818a2788463d022af1b884 + languageName: node + linkType: hard + +"ent@npm:^2.2.0": + version: 2.2.0 + resolution: "ent@npm:2.2.0" + checksum: f588b5707d6fef36011ea10d530645912a69530a1eb0831f8708c498ac028363a7009f45cfadd28ceb4dafd9ac17ec15213f88d09ce239cd033cfe1328dd7d7d + languageName: node + linkType: hard + +"entities@npm:^2.0.0": + version: 2.2.0 + resolution: "entities@npm:2.2.0" + checksum: 19010dacaf0912c895ea262b4f6128574f9ccf8d4b3b65c7e8334ad0079b3706376360e28d8843ff50a78aabcb8f08f0a32dbfacdc77e47ed77ca08b713669b3 + languageName: node + linkType: hard + +"entities@npm:^4.4.0": + version: 4.5.0 + resolution: "entities@npm:4.5.0" + checksum: 853f8ebd5b425d350bffa97dd6958143179a5938352ccae092c62d1267c4e392a039be1bae7d51b6e4ffad25f51f9617531fedf5237f15df302ccfb452cbf2d7 + languageName: node + linkType: hard + +"env-paths@npm:^2.2.0": + version: 2.2.1 + resolution: "env-paths@npm:2.2.1" + checksum: 65b5df55a8bab92229ab2b40dad3b387fad24613263d103a97f91c9fe43ceb21965cd3392b1ccb5d77088021e525c4e0481adb309625d0cb94ade1d1fb8dc17e + languageName: node + linkType: hard + +"envinfo@npm:^7.7.3, envinfo@npm:^7.7.4": + version: 7.8.1 + resolution: "envinfo@npm:7.8.1" + bin: + envinfo: dist/cli.js + checksum: de736c98d6311c78523628ff127af138451b162e57af5293c1b984ca821d0aeb9c849537d2fde0434011bed33f6bca5310ca2aab8a51a3f28fc719e89045d648 + languageName: node + linkType: hard + +"err-code@npm:^2.0.2": + version: 2.0.3 + resolution: "err-code@npm:2.0.3" + checksum: 8b7b1be20d2de12d2255c0bc2ca638b7af5171142693299416e6a9339bd7d88fc8d7707d913d78e0993176005405a236b066b45666b27b797252c771156ace54 + languageName: node + linkType: hard + +"error-ex@npm:^1.3.1": + version: 1.3.2 + resolution: "error-ex@npm:1.3.2" + dependencies: + is-arrayish: ^0.2.1 + checksum: c1c2b8b65f9c91b0f9d75f0debaa7ec5b35c266c2cac5de412c1a6de86d4cbae04ae44e510378cb14d032d0645a36925d0186f8bb7367bcc629db256b743a001 + languageName: node + linkType: hard + +"es-abstract@npm:^1.18.0-next.1, es-abstract@npm:^1.19.0, es-abstract@npm:^1.20.4": + version: 1.20.5 + resolution: "es-abstract@npm:1.20.5" + dependencies: + call-bind: ^1.0.2 + es-to-primitive: ^1.2.1 + function-bind: ^1.1.1 + function.prototype.name: ^1.1.5 + get-intrinsic: ^1.1.3 + get-symbol-description: ^1.0.0 + gopd: ^1.0.1 + has: ^1.0.3 + has-property-descriptors: ^1.0.0 + has-symbols: ^1.0.3 + internal-slot: ^1.0.3 + is-callable: ^1.2.7 + is-negative-zero: ^2.0.2 + is-regex: ^1.1.4 + is-shared-array-buffer: ^1.0.2 + is-string: ^1.0.7 + is-weakref: ^1.0.2 + object-inspect: ^1.12.2 + object-keys: ^1.1.1 + object.assign: ^4.1.4 + regexp.prototype.flags: ^1.4.3 + safe-regex-test: ^1.0.0 + string.prototype.trimend: ^1.0.6 + string.prototype.trimstart: ^1.0.6 + unbox-primitive: ^1.0.2 + checksum: 00564779ddaf7fb977ab5aa2b8ea2cbd4fa2335ad5368f788bd0bb094c86bc1790335dd9c3e30374bb0af2fa54c724fb4e0c73659dcfe8e427355a56f2b65946 + languageName: node + linkType: hard + +"es-module-lexer@npm:^1.2.1": + version: 1.3.0 + resolution: "es-module-lexer@npm:1.3.0" + checksum: 48fd9f504a9d2a894126f75c8b7ccc6273a289983e9b67255f165bfd9ae765d50100218251e94e702ca567826905ea2f7b3b4a0c4d74d3ce99cce3a2a606a238 + languageName: node + linkType: hard + +"es-shim-unscopables@npm:^1.0.0": + version: 1.0.0 + resolution: "es-shim-unscopables@npm:1.0.0" + dependencies: + has: ^1.0.3 + checksum: 83e95cadbb6ee44d3644dfad60dcad7929edbc42c85e66c3e99aefd68a3a5c5665f2686885cddb47dfeabfd77bd5ea5a7060f2092a955a729bbd8834f0d86fa1 + languageName: node + linkType: hard + +"es-to-primitive@npm:^1.2.1": + version: 1.2.1 + resolution: "es-to-primitive@npm:1.2.1" + dependencies: + is-callable: ^1.1.4 + is-date-object: ^1.0.1 + is-symbol: ^1.0.2 + checksum: 4ead6671a2c1402619bdd77f3503991232ca15e17e46222b0a41a5d81aebc8740a77822f5b3c965008e631153e9ef0580540007744521e72de8e33599fca2eed + languageName: node + linkType: hard + +"es5-ext@npm:^0.10.35, es5-ext@npm:^0.10.45, es5-ext@npm:^0.10.46, es5-ext@npm:^0.10.50, es5-ext@npm:~0.10.14, es5-ext@npm:~0.10.2, es5-ext@npm:~0.10.46": + version: 0.10.62 + resolution: "es5-ext@npm:0.10.62" + dependencies: + es6-iterator: ^2.0.3 + es6-symbol: ^3.1.3 + next-tick: ^1.1.0 + checksum: 25f42f6068cfc6e393cf670bc5bba249132c5f5ec2dd0ed6e200e6274aca2fed8e9aec8a31c76031744c78ca283c57f0b41c7e737804c6328c7b8d3fbcba7983 + languageName: node + linkType: hard + +"es6-iterator@npm:^2.0.3": + version: 2.0.3 + resolution: "es6-iterator@npm:2.0.3" + dependencies: + d: 1 + es5-ext: ^0.10.35 + es6-symbol: ^3.1.1 + checksum: 6e48b1c2d962c21dee604b3d9f0bc3889f11ed5a8b33689155a2065d20e3107e2a69cc63a71bd125aeee3a589182f8bbcb5c8a05b6a8f38fa4205671b6d09697 + languageName: node + linkType: hard + +"es6-promise@npm:^4.0.3": + version: 4.2.8 + resolution: "es6-promise@npm:4.2.8" + checksum: 95614a88873611cb9165a85d36afa7268af5c03a378b35ca7bda9508e1d4f1f6f19a788d4bc755b3fd37c8ebba40782018e02034564ff24c9d6fa37e959ad57d + languageName: node + linkType: hard + +"es6-promisify@npm:^5.0.0": + version: 5.0.0 + resolution: "es6-promisify@npm:5.0.0" + dependencies: + es6-promise: ^4.0.3 + checksum: fbed9d791598831413be84a5374eca8c24800ec71a16c1c528c43a98e2dadfb99331483d83ae6094ddb9b87e6f799a15d1553cebf756047e0865c753bc346b92 + languageName: node + linkType: hard + +"es6-symbol@npm:^3.1.1, es6-symbol@npm:^3.1.3": + version: 3.1.3 + resolution: "es6-symbol@npm:3.1.3" + dependencies: + d: ^1.0.1 + ext: ^1.1.2 + checksum: cd49722c2a70f011eb02143ef1c8c70658d2660dead6641e160b94619f408b9cf66425515787ffe338affdf0285ad54f4eae30ea5bd510e33f8659ec53bcaa70 + languageName: node + linkType: hard + +"es6-weak-map@npm:^2.0.2": + version: 2.0.3 + resolution: "es6-weak-map@npm:2.0.3" + dependencies: + d: 1 + es5-ext: ^0.10.46 + es6-iterator: ^2.0.3 + es6-symbol: ^3.1.1 + checksum: 19ca15f46d50948ce78c2da5f21fb5b1ef45addd4fe17b5df952ff1f2a3d6ce4781249bc73b90995257264be2a98b2ec749bb2aba0c14b5776a1154178f9c927 + languageName: node + linkType: hard + +"escalade@npm:^3.1.1": + version: 3.1.1 + resolution: "escalade@npm:3.1.1" + checksum: a3e2a99f07acb74b3ad4989c48ca0c3140f69f923e56d0cba0526240ee470b91010f9d39001f2a4a313841d237ede70a729e92125191ba5d21e74b106800b133 + 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 + languageName: node + linkType: hard + +"escape-string-regexp@npm:^2.0.0": + version: 2.0.0 + resolution: "escape-string-regexp@npm:2.0.0" + checksum: 9f8a2d5743677c16e85c810e3024d54f0c8dea6424fad3c79ef6666e81dd0846f7437f5e729dfcdac8981bc9e5294c39b4580814d114076b8d36318f46ae4395 + languageName: node + linkType: hard + +"escape-string-regexp@npm:^4.0.0": + version: 4.0.0 + resolution: "escape-string-regexp@npm:4.0.0" + checksum: 98b48897d93060f2322108bf29db0feba7dd774be96cd069458d1453347b25ce8682ecc39859d4bca2203cc0ab19c237bcc71755eff49a0f8d90beadeeba5cc5 + languageName: node + linkType: hard + +"escodegen@npm:^2.0.0": + version: 2.0.0 + resolution: "escodegen@npm:2.0.0" + dependencies: + esprima: ^4.0.1 + estraverse: ^5.2.0 + esutils: ^2.0.2 + optionator: ^0.8.1 + source-map: ~0.6.1 + dependenciesMeta: + source-map: + optional: true + bin: + escodegen: bin/escodegen.js + esgenerate: bin/esgenerate.js + checksum: 5aa6b2966fafe0545e4e77936300cc94ad57cfe4dc4ebff9950492eaba83eef634503f12d7e3cbd644ecc1bab388ad0e92b06fd32222c9281a75d1cf02ec6cef + languageName: node + linkType: hard + +"eslint-config-prettier@npm:^8.5.0": + version: 8.5.0 + resolution: "eslint-config-prettier@npm:8.5.0" + peerDependencies: + eslint: ">=7.0.0" + bin: + eslint-config-prettier: bin/cli.js + checksum: 0d0f5c32e7a0ad91249467ce71ca92394ccd343178277d318baf32063b79ea90216f4c81d1065d60f96366fdc60f151d4d68ae7811a58bd37228b84c2083f893 + languageName: node + linkType: hard + +"eslint-import-resolver-node@npm:^0.3.6": + version: 0.3.6 + resolution: "eslint-import-resolver-node@npm:0.3.6" + dependencies: + debug: ^3.2.7 + resolve: ^1.20.0 + checksum: 6266733af1e112970e855a5bcc2d2058fb5ae16ad2a6d400705a86b29552b36131ffc5581b744c23d550de844206fb55e9193691619ee4dbf225c4bde526b1c8 + languageName: node + linkType: hard + +"eslint-module-utils@npm:^2.7.3": + version: 2.7.4 + resolution: "eslint-module-utils@npm:2.7.4" + dependencies: + debug: ^3.2.7 + peerDependenciesMeta: + eslint: + optional: true + checksum: 5da13645daff145a5c922896b258f8bba560722c3767254e458d894ff5fbb505d6dfd945bffa932a5b0ae06714da2379bd41011c4c20d2d59cc83e23895360f7 + languageName: node + linkType: hard + +"eslint-plugin-import@npm:^2.26.0": + version: 2.26.0 + resolution: "eslint-plugin-import@npm:2.26.0" + dependencies: + array-includes: ^3.1.4 + array.prototype.flat: ^1.2.5 + debug: ^2.6.9 + doctrine: ^2.1.0 + eslint-import-resolver-node: ^0.3.6 + eslint-module-utils: ^2.7.3 + has: ^1.0.3 + is-core-module: ^2.8.1 + is-glob: ^4.0.3 + minimatch: ^3.1.2 + object.values: ^1.1.5 + resolve: ^1.22.0 + tsconfig-paths: ^3.14.1 + peerDependencies: + eslint: ^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 + checksum: 0bf77ad80339554481eafa2b1967449e1f816b94c7a6f9614ce33fb4083c4e6c050f10d241dd50b4975d47922880a34de1e42ea9d8e6fd663ebb768baa67e655 + languageName: node + linkType: hard + +"eslint-plugin-jest@npm:^27.1.6": + version: 27.1.6 + resolution: "eslint-plugin-jest@npm:27.1.6" + dependencies: + "@typescript-eslint/utils": ^5.10.0 + peerDependencies: + "@typescript-eslint/eslint-plugin": ^5.0.0 + eslint: ^7.0.0 || ^8.0.0 + peerDependenciesMeta: + "@typescript-eslint/eslint-plugin": + optional: true + jest: + optional: true + checksum: 5b1640b5d575f0d5e27da8ef8cb3110a29f94ebd50ae51edc5ea34c1054f5dcf305416865b2919ac424bc02c4569848bbe7fd2c86e7e1aff23e77f1ff9ef7dfd + languageName: node + linkType: hard + +"eslint-plugin-prettier@npm:^4.2.1": + version: 4.2.1 + resolution: "eslint-plugin-prettier@npm:4.2.1" + dependencies: + prettier-linter-helpers: ^1.0.0 + peerDependencies: + eslint: ">=7.28.0" + prettier: ">=2.0.0" + peerDependenciesMeta: + eslint-config-prettier: + optional: true + checksum: b9e839d2334ad8ec7a5589c5cb0f219bded260839a857d7a486997f9870e95106aa59b8756ff3f37202085ebab658de382b0267cae44c3a7f0eb0bcc03a4f6d6 + languageName: node + linkType: hard + +"eslint-plugin-react@npm:^7.31.11": + version: 7.31.11 + resolution: "eslint-plugin-react@npm:7.31.11" + dependencies: + array-includes: ^3.1.6 + array.prototype.flatmap: ^1.3.1 + array.prototype.tosorted: ^1.1.1 + doctrine: ^2.1.0 + estraverse: ^5.3.0 + jsx-ast-utils: ^2.4.1 || ^3.0.0 + minimatch: ^3.1.2 + object.entries: ^1.1.6 + object.fromentries: ^2.0.6 + object.hasown: ^1.1.2 + object.values: ^1.1.6 + prop-types: ^15.8.1 + resolve: ^2.0.0-next.3 + semver: ^6.3.0 + string.prototype.matchall: ^4.0.8 + peerDependencies: + eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 + checksum: a3d612f6647bef33cf2a67c81a6b37b42c075300ed079cffecf5fb475c0d6ab855c1de340d1cbf361a0126429fb906dda597527235d2d12c4404453dbc712fc6 + languageName: node + linkType: hard + +"eslint-scope@npm:5.1.1, eslint-scope@npm:^5.1.1": + version: 5.1.1 + resolution: "eslint-scope@npm:5.1.1" + dependencies: + esrecurse: ^4.3.0 + estraverse: ^4.1.1 + checksum: 47e4b6a3f0cc29c7feedee6c67b225a2da7e155802c6ea13bbef4ac6b9e10c66cd2dcb987867ef176292bf4e64eccc680a49e35e9e9c669f4a02bac17e86abdb + languageName: node + linkType: hard + +"eslint-scope@npm:^7.1.1": + version: 7.1.1 + resolution: "eslint-scope@npm:7.1.1" + dependencies: + esrecurse: ^4.3.0 + estraverse: ^5.2.0 + checksum: 9f6e974ab2db641ca8ab13508c405b7b859e72afe9f254e8131ff154d2f40c99ad4545ce326fd9fde3212ff29707102562a4834f1c48617b35d98c71a97fbf3e + languageName: node + linkType: hard + +"eslint-utils@npm:^3.0.0": + version: 3.0.0 + resolution: "eslint-utils@npm:3.0.0" + dependencies: + eslint-visitor-keys: ^2.0.0 + peerDependencies: + eslint: ">=5" + checksum: 0668fe02f5adab2e5a367eee5089f4c39033af20499df88fe4e6aba2015c20720404d8c3d6349b6f716b08fdf91b9da4e5d5481f265049278099c4c836ccb619 + languageName: node + linkType: hard + +"eslint-visitor-keys@npm:^2.0.0": + version: 2.1.0 + resolution: "eslint-visitor-keys@npm:2.1.0" + checksum: e3081d7dd2611a35f0388bbdc2f5da60b3a3c5b8b6e928daffff7391146b434d691577aa95064c8b7faad0b8a680266bcda0a42439c18c717b80e6718d7e267d + languageName: node + linkType: hard + +"eslint-visitor-keys@npm:^3.3.0": + version: 3.3.0 + resolution: "eslint-visitor-keys@npm:3.3.0" + checksum: d59e68a7c5a6d0146526b0eec16ce87fbf97fe46b8281e0d41384224375c4e52f5ffb9e16d48f4ea50785cde93f766b0c898e31ab89978d88b0e1720fbfb7808 + languageName: node + linkType: hard + +"eslint@npm:^8.29.0": + version: 8.29.0 + resolution: "eslint@npm:8.29.0" + dependencies: + "@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 + debug: ^4.3.2 + 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 + 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 + 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 + levn: ^0.4.1 + lodash.merge: ^4.6.2 + 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 + bin: + eslint: bin/eslint.js + checksum: e05204b05907b82d910983995cb946e0ba62ca514eb2b6791c43f623333b143564a2eee0139909d31c10935c21877d815b1f76dd674a59cb91c471064325c4ab + languageName: node + linkType: hard + +"espree@npm:^9.4.0": + version: 9.4.1 + resolution: "espree@npm:9.4.1" + dependencies: + acorn: ^8.8.0 + acorn-jsx: ^5.3.2 + eslint-visitor-keys: ^3.3.0 + checksum: 4d266b0cf81c7dfe69e542c7df0f246e78d29f5b04dda36e514eb4c7af117ee6cfbd3280e560571ed82ff6c9c3f0003c05b82583fc7a94006db7497c4fe4270e + languageName: node + linkType: hard + +"esprima@npm:^4.0.0, esprima@npm:^4.0.1, esprima@npm:~4.0.0": + version: 4.0.1 + resolution: "esprima@npm:4.0.1" + bin: + esparse: ./bin/esparse.js + esvalidate: ./bin/esvalidate.js + checksum: b45bc805a613dbea2835278c306b91aff6173c8d034223fa81498c77dcbce3b2931bf6006db816f62eacd9fd4ea975dfd85a5b7f3c6402cfd050d4ca3c13a628 + languageName: node + linkType: hard + +"esquery@npm:^1.4.0": + version: 1.4.0 + resolution: "esquery@npm:1.4.0" + dependencies: + estraverse: ^5.1.0 + checksum: a0807e17abd7fbe5fbd4fab673038d6d8a50675cdae6b04fbaa520c34581be0c5fa24582990e8acd8854f671dd291c78bb2efb9e0ed5b62f33bac4f9cf820210 + languageName: node + linkType: hard + +"esrecurse@npm:^4.3.0": + version: 4.3.0 + resolution: "esrecurse@npm:4.3.0" + dependencies: + estraverse: ^5.2.0 + checksum: ebc17b1a33c51cef46fdc28b958994b1dc43cd2e86237515cbc3b4e5d2be6a811b2315d0a1a4d9d340b6d2308b15322f5c8291059521cc5f4802f65e7ec32837 + languageName: node + linkType: hard + +"estraverse@npm:^4.1.1": + version: 4.3.0 + resolution: "estraverse@npm:4.3.0" + checksum: a6299491f9940bb246124a8d44b7b7a413a8336f5436f9837aaa9330209bd9ee8af7e91a654a3545aee9c54b3308e78ee360cef1d777d37cfef77d2fa33b5827 + languageName: node + linkType: hard + +"estraverse@npm:^5.1.0, estraverse@npm:^5.2.0, estraverse@npm:^5.3.0": + version: 5.3.0 + resolution: "estraverse@npm:5.3.0" + checksum: 072780882dc8416ad144f8fe199628d2b3e7bbc9989d9ed43795d2c90309a2047e6bc5979d7e2322a341163d22cfad9e21f4110597fe487519697389497e4e2b + languageName: node + linkType: hard + +"esutils@npm:^2.0.2": + version: 2.0.3 + resolution: "esutils@npm:2.0.3" + checksum: 22b5b08f74737379a840b8ed2036a5fb35826c709ab000683b092d9054e5c2a82c27818f12604bfc2a9a76b90b6834ef081edbc1c7ae30d1627012e067c6ec87 + languageName: node + linkType: hard + +"event-emitter@npm:^0.3.5": + version: 0.3.5 + resolution: "event-emitter@npm:0.3.5" + dependencies: + d: 1 + es5-ext: ~0.10.14 + checksum: 27c1399557d9cd7e0aa0b366c37c38a4c17293e3a10258e8b692a847dd5ba9fb90429c3a5a1eeff96f31f6fa03ccbd31d8ad15e00540b22b22f01557be706030 + languageName: node + linkType: hard + +"event-target-shim@npm:^5.0.0": + version: 5.0.1 + resolution: "event-target-shim@npm:5.0.1" + checksum: 1ffe3bb22a6d51bdeb6bf6f7cf97d2ff4a74b017ad12284cc9e6a279e727dc30a5de6bb613e5596ff4dc3e517841339ad09a7eec44266eccb1aa201a30448166 + languageName: node + linkType: hard + +"eventemitter3@npm:^4.0.4": + version: 4.0.7 + resolution: "eventemitter3@npm:4.0.7" + checksum: 1875311c42fcfe9c707b2712c32664a245629b42bb0a5a84439762dd0fd637fc54d078155ea83c2af9e0323c9ac13687e03cfba79b03af9f40c89b4960099374 + languageName: node + linkType: hard + +"events@npm:^3.2.0": + version: 3.3.0 + resolution: "events@npm:3.3.0" + checksum: f6f487ad2198aa41d878fa31452f1a3c00958f46e9019286ff4787c84aac329332ab45c9cdc8c445928fc6d7ded294b9e005a7fce9426488518017831b272780 + languageName: node + linkType: hard + +"execa@npm:5.0.0, execa@npm:^5.0.0": + version: 5.0.0 + resolution: "execa@npm:5.0.0" + dependencies: + 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 + checksum: a044367ebdcc68ca019810cb134510fc77bbc55c799122258ee0e00e289c132941ab48c2a331a036699c42bc8d479d451ae67c105fce5ce5cc813e7dd92d642b + languageName: node + linkType: hard + +"execa@npm:^0.9.0": + version: 0.9.0 + resolution: "execa@npm:0.9.0" + dependencies: + cross-spawn: ^5.0.1 + get-stream: ^3.0.0 + is-stream: ^1.1.0 + npm-run-path: ^2.0.0 + p-finally: ^1.0.0 + signal-exit: ^3.0.0 + strip-eof: ^1.0.0 + checksum: 38e9e2fc9407fb117ff1a434adea03cdd84f83e369801f77d7afdd433f5a80db2fde74c73068f1ca491c74bc50b4c4e908ae23b3105cc7604b9b846db482d346 + languageName: node + linkType: hard + +"execa@npm:^1.0.0": + version: 1.0.0 + resolution: "execa@npm:1.0.0" + dependencies: + cross-spawn: ^6.0.0 + get-stream: ^4.0.0 + is-stream: ^1.1.0 + npm-run-path: ^2.0.0 + p-finally: ^1.0.0 + signal-exit: ^3.0.0 + strip-eof: ^1.0.0 + checksum: ddf1342c1c7d02dd93b41364cd847640f6163350d9439071abf70bf4ceb1b9b2b2e37f54babb1d8dc1df8e0d8def32d0e81e74a2e62c3e1d70c303eb4c306bc4 + languageName: node + linkType: hard + +"exit@npm:^0.1.2": + version: 0.1.2 + resolution: "exit@npm:0.1.2" + checksum: abc407f07a875c3961e4781dfcb743b58d6c93de9ab263f4f8c9d23bb6da5f9b7764fc773f86b43dd88030444d5ab8abcb611cb680fba8ca075362b77114bba3 + languageName: node + linkType: hard + +"expect@npm:^29.0.0, expect@npm:^29.6.1": + version: 29.6.1 + resolution: "expect@npm:29.6.1" + dependencies: + "@jest/expect-utils": ^29.6.1 + "@types/node": "*" + jest-get-type: ^29.4.3 + jest-matcher-utils: ^29.6.1 + jest-message-util: ^29.6.1 + jest-util: ^29.6.1 + checksum: 4e712e52c90f6c54e748fd2876be33c43ada6a59088ddf6a1acb08b18b3b97b3a672124684abe32599986d2f2a438d5afad148837ee06ea386d2a4bf0348de78 + languageName: node + linkType: hard + +"exponential-backoff@npm:^3.1.1": + version: 3.1.1 + resolution: "exponential-backoff@npm:3.1.1" + checksum: 3d21519a4f8207c99f7457287291316306255a328770d320b401114ec8481986e4e467e854cb9914dd965e0a1ca810a23ccb559c642c88f4c7f55c55778a9b48 + languageName: node + linkType: hard + +"ext@npm:^1.1.2": + version: 1.6.0 + resolution: "ext@npm:1.6.0" + dependencies: + type: ^2.5.0 + checksum: ca3ef4619e838f441a92238a98b77ac873da2175ace746c64303ffe2c3208e79a3acf3bf7004e40b720f3c2a83bf0143e6dd4a7cdfae6e73f54a3bfc7a14b5c2 + languageName: node + linkType: hard + +"extend@npm:^3.0.0, extend@npm:^3.0.2": + version: 3.0.2 + resolution: "extend@npm:3.0.2" + checksum: a50a8309ca65ea5d426382ff09f33586527882cf532931cb08ca786ea3146c0553310bda688710ff61d7668eba9f96b923fe1420cdf56a2c3eaf30fcab87b515 + languageName: node + linkType: hard + +"external-editor@npm:^3.0.3": + version: 3.1.0 + resolution: "external-editor@npm:3.1.0" + dependencies: + chardet: ^0.7.0 + iconv-lite: ^0.4.24 + tmp: ^0.0.33 + checksum: 1c2a616a73f1b3435ce04030261bed0e22d4737e14b090bb48e58865da92529c9f2b05b893de650738d55e692d071819b45e1669259b2b354bc3154d27a698c7 + 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 + languageName: node + linkType: hard + +"fast-diff@npm:^1.1.2": + version: 1.2.0 + resolution: "fast-diff@npm:1.2.0" + checksum: 1b5306eaa9e826564d9e5ffcd6ebd881eb5f770b3f977fcbf38f05c824e42172b53c79920e8429c54eb742ce15a0caf268b0fdd5b38f6de52234c4a8368131ae + languageName: node + linkType: hard + +"fast-glob@npm:3.2.12, fast-glob@npm:^3.2.9": + version: 3.2.12 + resolution: "fast-glob@npm:3.2.12" + 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 + checksum: 0b1990f6ce831c7e28c4d505edcdaad8e27e88ab9fa65eedadb730438cfc7cde4910d6c975d6b7b8dc8a73da4773702ebcfcd6e3518e73938bb1383badfe01c2 + languageName: node + linkType: hard + +"fast-glob@npm:3.2.7": + version: 3.2.7 + resolution: "fast-glob@npm: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 + checksum: 2f4708ff112d2b451888129fdd9a0938db88b105b0ddfd043c064e3c4d3e20eed8d7c7615f7565fee660db34ddcf08a2db1bf0ab3c00b87608e4719694642d78 + languageName: node + linkType: hard + +"fast-json-stable-stringify@npm:2.x, fast-json-stable-stringify@npm:^2.0.0, fast-json-stable-stringify@npm:^2.1.0": + version: 2.1.0 + resolution: "fast-json-stable-stringify@npm:2.1.0" + checksum: b191531e36c607977e5b1c47811158733c34ccb3bfde92c44798929e9b4154884378536d26ad90dfecd32e1ffc09c545d23535ad91b3161a27ddbb8ebe0cbecb + languageName: node + linkType: hard + +"fast-levenshtein@npm:^2.0.6, fast-levenshtein@npm:~2.0.6": + version: 2.0.6 + resolution: "fast-levenshtein@npm:2.0.6" + checksum: 92cfec0a8dfafd9c7a15fba8f2cc29cd0b62b85f056d99ce448bbcd9f708e18ab2764bda4dd5158364f4145a7c72788538994f0d1787b956ef0d1062b0f7c24c + languageName: node + linkType: hard + +"fast-text-encoding@npm:^1.0.0": + version: 1.0.3 + resolution: "fast-text-encoding@npm:1.0.3" + checksum: 3e51365896f06d0dcab128092d095a0037d274deec419fecbd2388bc236d7b387610e0c72f920c6126e00c885ab096fbfaa3645712f5b98f721bef6b064916a8 + languageName: node + linkType: hard + +"fastest-levenshtein@npm:^1.0.12": + version: 1.0.16 + resolution: "fastest-levenshtein@npm:1.0.16" + checksum: a78d44285c9e2ae2c25f3ef0f8a73f332c1247b7ea7fb4a191e6bb51aa6ee1ef0dfb3ed113616dcdc7023e18e35a8db41f61c8d88988e877cf510df8edafbc71 + languageName: node + linkType: hard + +"fastq@npm:^1.6.0": + version: 1.15.0 + resolution: "fastq@npm:1.15.0" + dependencies: + reusify: ^1.0.4 + checksum: 0170e6bfcd5d57a70412440b8ef600da6de3b2a6c5966aeaf0a852d542daff506a0ee92d6de7679d1de82e644bce69d7a574a6c93f0b03964b5337eed75ada1a + languageName: node + linkType: hard + +"fb-watchman@npm:^2.0.0": + version: 2.0.2 + resolution: "fb-watchman@npm:2.0.2" + dependencies: + bser: 2.1.1 + checksum: b15a124cef28916fe07b400eb87cbc73ca082c142abf7ca8e8de6af43eca79ca7bd13eb4d4d48240b3bd3136eaac40d16e42d6edf87a8e5d1dd8070626860c78 + languageName: node + linkType: hard + +"figures@npm:3.2.0, figures@npm:^3.0.0": + version: 3.2.0 + resolution: "figures@npm:3.2.0" + dependencies: + escape-string-regexp: ^1.0.5 + checksum: 85a6ad29e9aca80b49b817e7c89ecc4716ff14e3779d9835af554db91bac41c0f289c418923519392a1e582b4d10482ad282021330cd045bb7b80c84152f2a2b + languageName: node + linkType: hard + +"file-entry-cache@npm:^6.0.1": + version: 6.0.1 + resolution: "file-entry-cache@npm:6.0.1" + dependencies: + flat-cache: ^3.0.4 + checksum: f49701feaa6314c8127c3c2f6173cfefff17612f5ed2daaafc6da13b5c91fd43e3b2a58fd0d63f9f94478a501b167615931e7200e31485e320f74a33885a9c74 + languageName: node + linkType: hard + +"filelist@npm:^1.0.1": + version: 1.0.4 + resolution: "filelist@npm:1.0.4" + dependencies: + minimatch: ^5.0.1 + checksum: a303573b0821e17f2d5e9783688ab6fbfce5d52aaac842790ae85e704a6f5e4e3538660a63183d6453834dedf1e0f19a9dadcebfa3e926c72397694ea11f5160 + languageName: node + linkType: hard + +"fill-range@npm:^7.0.1": + version: 7.0.1 + resolution: "fill-range@npm:7.0.1" + dependencies: + to-regex-range: ^5.0.1 + checksum: cc283f4e65b504259e64fd969bcf4def4eb08d85565e906b7d36516e87819db52029a76b6363d0f02d0d532f0033c9603b9e2d943d56ee3b0d4f7ad3328ff917 + languageName: node + linkType: hard + +"find-root@npm:^1.0.0": + version: 1.1.0 + resolution: "find-root@npm:1.1.0" + checksum: b2a59fe4b6c932eef36c45a048ae8f93c85640212ebe8363164814990ee20f154197505965f3f4f102efc33bfb1cbc26fd17c4a2fc739ebc51b886b137cbefaf + languageName: node + linkType: hard + +"find-up@npm:^2.0.0, find-up@npm:^2.1.0": + version: 2.1.0 + resolution: "find-up@npm:2.1.0" + dependencies: + locate-path: ^2.0.0 + checksum: 43284fe4da09f89011f08e3c32cd38401e786b19226ea440b75386c1b12a4cb738c94969808d53a84f564ede22f732c8409e3cfc3f7fb5b5c32378ad0bbf28bd + languageName: node + linkType: hard + +"find-up@npm:^4.0.0, find-up@npm:^4.1.0": + version: 4.1.0 + resolution: "find-up@npm:4.1.0" + dependencies: + locate-path: ^5.0.0 + path-exists: ^4.0.0 + checksum: 4c172680e8f8c1f78839486e14a43ef82e9decd0e74145f40707cc42e7420506d5ec92d9a11c22bd2c48fb0c384ea05dd30e10dd152fefeec6f2f75282a8b844 + languageName: node + linkType: hard + +"find-up@npm:^5.0.0": + version: 5.0.0 + resolution: "find-up@npm:5.0.0" + dependencies: + locate-path: ^6.0.0 + path-exists: ^4.0.0 + checksum: 07955e357348f34660bde7920783204ff5a26ac2cafcaa28bace494027158a97b9f56faaf2d89a6106211a8174db650dd9f503f9c0d526b1202d5554a00b9095 + languageName: node + linkType: hard + +"flat-cache@npm:^3.0.4": + version: 3.0.4 + resolution: "flat-cache@npm:3.0.4" + dependencies: + flatted: ^3.1.0 + rimraf: ^3.0.2 + checksum: 4fdd10ecbcbf7d520f9040dd1340eb5dfe951e6f0ecf2252edeec03ee68d989ec8b9a20f4434270e71bcfd57800dc09b3344fca3966b2eb8f613072c7d9a2365 + languageName: node + linkType: hard + +"flat@npm:^5.0.2": + version: 5.0.2 + resolution: "flat@npm:5.0.2" + bin: + flat: cli.js + checksum: 12a1536ac746db74881316a181499a78ef953632ddd28050b7a3a43c62ef5462e3357c8c29d76072bb635f147f7a9a1f0c02efef6b4be28f8db62ceb3d5c7f5d + languageName: node + linkType: hard + +"flatted@npm:^3.1.0, flatted@npm:^3.2.5": + version: 3.2.5 + resolution: "flatted@npm:3.2.5" + checksum: 3c436e9695ccca29620b4be5671dd72e5dd0a7500e0856611b7ca9bd8169f177f408c3b9abfa78dfe1493ee2d873e2c119080a8a9bee4e1a186a9e60ca6c89f1 + languageName: node + linkType: hard + +"follow-redirects@npm:^1.15.0": + version: 1.15.2 + resolution: "follow-redirects@npm:1.15.2" + peerDependenciesMeta: + debug: + optional: true + checksum: faa66059b66358ba65c234c2f2a37fcec029dc22775f35d9ad6abac56003268baf41e55f9ee645957b32c7d9f62baf1f0b906e68267276f54ec4b4c597c2b190 + languageName: node + linkType: hard + +"foreground-child@npm:^3.1.0": + version: 3.1.1 + resolution: "foreground-child@npm:3.1.1" + dependencies: + cross-spawn: ^7.0.0 + signal-exit: ^4.0.1 + checksum: 139d270bc82dc9e6f8bc045fe2aae4001dc2472157044fdfad376d0a3457f77857fa883c1c8b21b491c6caade9a926a4bed3d3d2e8d3c9202b151a4cbbd0bcd5 + languageName: node + linkType: hard + +"form-data@npm:^4.0.0": + version: 4.0.0 + resolution: "form-data@npm:4.0.0" + dependencies: + asynckit: ^0.4.0 + combined-stream: ^1.0.8 + mime-types: ^2.1.12 + checksum: 01135bf8675f9d5c61ff18e2e2932f719ca4de964e3be90ef4c36aacfc7b9cb2fceb5eca0b7e0190e3383fe51c5b37f4cb80b62ca06a99aaabfcfd6ac7c9328c + languageName: node + linkType: hard + +"format-util@npm:^1.0.3": + version: 1.0.5 + resolution: "format-util@npm:1.0.5" + checksum: 0c8622e54ad899ca184ff0b4999e9ff9567965051bade140911209d60554c2ea4d43075763c1cf574d2f740966afe46469c9284357919505cdddf1a0b65ff85c + languageName: node + linkType: hard + +"free-style@npm:3.1.0": + version: 3.1.0 + resolution: "free-style@npm:3.1.0" + checksum: 949258ae315deda48cac93ecd5f9a80f36e8a027e19ce2103598dc8d5ab60e963bbad5444b2a4990ddb746798dd188896f430285cf484afbf2141f7d75a191d8 + languageName: node + linkType: hard + +"fs-constants@npm:^1.0.0": + version: 1.0.0 + resolution: "fs-constants@npm:1.0.0" + checksum: 18f5b718371816155849475ac36c7d0b24d39a11d91348cfcb308b4494824413e03572c403c86d3a260e049465518c4f0d5bd00f0371cdfcad6d4f30a85b350d + languageName: node + linkType: hard + +"fs-extra@npm:9.1.0, fs-extra@npm:^9.1.0": + version: 9.1.0 + resolution: "fs-extra@npm:9.1.0" + dependencies: + at-least-node: ^1.0.0 + graceful-fs: ^4.2.0 + jsonfile: ^6.0.1 + universalify: ^2.0.0 + checksum: ba71ba32e0faa74ab931b7a0031d1523c66a73e225de7426e275e238e312d07313d2da2d33e34a52aa406c8763ade5712eb3ec9ba4d9edce652bcacdc29e6b20 + languageName: node + linkType: hard + +"fs-extra@npm:^10.0.0, fs-extra@npm:^10.0.1, fs-extra@npm:^10.1.0": + version: 10.1.0 + resolution: "fs-extra@npm:10.1.0" + dependencies: + graceful-fs: ^4.2.0 + jsonfile: ^6.0.1 + universalify: ^2.0.0 + checksum: dc94ab37096f813cc3ca12f0f1b5ad6744dfed9ed21e953d72530d103cea193c2f81584a39e9dee1bea36de5ee66805678c0dddc048e8af1427ac19c00fffc50 + languageName: node + linkType: hard + +"fs-extra@npm:^11.1.0": + version: 11.1.1 + resolution: "fs-extra@npm:11.1.1" + dependencies: + graceful-fs: ^4.2.0 + jsonfile: ^6.0.1 + universalify: ^2.0.0 + checksum: fb883c68245b2d777fbc1f2082c9efb084eaa2bbf9fddaa366130d196c03608eebef7fb490541276429ee1ca99f317e2d73e96f5ca0999eefedf5a624ae1edfd + languageName: node + linkType: hard + +"fs-minipass@npm:^2.0.0, fs-minipass@npm:^2.1.0": + version: 2.1.0 + resolution: "fs-minipass@npm:2.1.0" + dependencies: + minipass: ^3.0.0 + checksum: 1b8d128dae2ac6cc94230cc5ead341ba3e0efaef82dab46a33d171c044caaa6ca001364178d42069b2809c35a1c3c35079a32107c770e9ffab3901b59af8c8b1 + languageName: node + linkType: hard + +"fs-minipass@npm:^3.0.0": + version: 3.0.2 + resolution: "fs-minipass@npm:3.0.2" + dependencies: + minipass: ^5.0.0 + checksum: e9cc0e1f2d01c6f6f62f567aee59530aba65c6c7b2ae88c5027bc34c711ebcfcfaefd0caf254afa6adfe7d1fba16bc2537508a6235196bac7276747d078aef0a + languageName: node + linkType: hard + +"fs.realpath@npm:^1.0.0": + version: 1.0.0 + resolution: "fs.realpath@npm:1.0.0" + checksum: 99ddea01a7e75aa276c250a04eedeffe5662bce66c65c07164ad6264f9de18fb21be9433ead460e54cff20e31721c811f4fb5d70591799df5f85dce6d6746fd0 + languageName: node + linkType: hard + +"fsevents@npm:^2.3.2": + version: 2.3.2 + resolution: "fsevents@npm:2.3.2" + dependencies: + node-gyp: latest + checksum: 97ade64e75091afee5265e6956cb72ba34db7819b4c3e94c431d4be2b19b8bb7a2d4116da417950c3425f17c8fe693d25e20212cac583ac1521ad066b77ae31f + conditions: os=darwin + languageName: node + linkType: hard + +"fsevents@patch:fsevents@^2.3.2#~builtin": + version: 2.3.2 + resolution: "fsevents@patch:fsevents@npm%3A2.3.2#~builtin::version=2.3.2&hash=df0bf1" + dependencies: + node-gyp: latest + conditions: os=darwin + languageName: node + linkType: hard + +"function-bind@npm:^1.1.1": + version: 1.1.1 + resolution: "function-bind@npm:1.1.1" + checksum: b32fbaebb3f8ec4969f033073b43f5c8befbb58f1a79e12f1d7490358150359ebd92f49e72ff0144f65f2c48ea2a605bff2d07965f548f6474fd8efd95bf361a + languageName: node + linkType: hard + +"function.prototype.name@npm:^1.1.5": + version: 1.1.5 + resolution: "function.prototype.name@npm:1.1.5" + dependencies: + call-bind: ^1.0.2 + define-properties: ^1.1.3 + es-abstract: ^1.19.0 + functions-have-names: ^1.2.2 + checksum: acd21d733a9b649c2c442f067567743214af5fa248dbeee69d8278ce7df3329ea5abac572be9f7470b4ec1cd4d8f1040e3c5caccf98ebf2bf861a0deab735c27 + languageName: node + linkType: hard + +"functions-have-names@npm:^1.2.2": + version: 1.2.3 + resolution: "functions-have-names@npm:1.2.3" + checksum: c3f1f5ba20f4e962efb71344ce0a40722163e85bee2101ce25f88214e78182d2d2476aa85ef37950c579eb6cf6ee811c17b3101bb84004bb75655f3e33f3fdb5 + languageName: node + linkType: hard + +"fuzzy-search@npm:3.2.1": + version: 3.2.1 + resolution: "fuzzy-search@npm:3.2.1" + checksum: 65d50909e69216f830a6e88eade08df00662e2c081edb02063404cc922cc7319ef8958eff781aa4e3e64543a394a912cd8c80abb4c6b158c119e811364e7cfb9 + languageName: node + linkType: hard + +"gauge@npm:^3.0.0": + version: 3.0.2 + resolution: "gauge@npm:3.0.2" + dependencies: + aproba: ^1.0.3 || ^2.0.0 + color-support: ^1.1.2 + console-control-strings: ^1.0.0 + has-unicode: ^2.0.1 + object-assign: ^4.1.1 + signal-exit: ^3.0.0 + string-width: ^4.2.3 + strip-ansi: ^6.0.1 + wide-align: ^1.1.2 + checksum: 81296c00c7410cdd48f997800155fbead4f32e4f82109be0719c63edc8560e6579946cc8abd04205297640691ec26d21b578837fd13a4e96288ab4b40b1dc3e9 + languageName: node + linkType: hard + +"gauge@npm:^4.0.3": + version: 4.0.4 + resolution: "gauge@npm:4.0.4" + dependencies: + aproba: ^1.0.3 || ^2.0.0 + color-support: ^1.1.3 + console-control-strings: ^1.1.0 + has-unicode: ^2.0.1 + signal-exit: ^3.0.7 + string-width: ^4.2.3 + strip-ansi: ^6.0.1 + wide-align: ^1.1.5 + checksum: 788b6bfe52f1dd8e263cda800c26ac0ca2ff6de0b6eee2fe0d9e3abf15e149b651bd27bf5226be10e6e3edb5c4e5d5985a5a1a98137e7a892f75eff76467ad2d + languageName: node + linkType: hard + +"gaxios@npm:^4.0.0": + version: 4.3.2 + resolution: "gaxios@npm:4.3.2" + dependencies: + abort-controller: ^3.0.0 + extend: ^3.0.2 + https-proxy-agent: ^5.0.0 + is-stream: ^2.0.0 + node-fetch: ^2.6.1 + checksum: 1305fc6a4b9f888a7424ed160084d1f253a54bec04b4986ecb7929d8aa52382e737fc65feb03f0b0b47c524575286d765806d829868ec49fd383a1be8a973870 + languageName: node + linkType: hard + +"gcp-metadata@npm:^4.2.0": + version: 4.3.1 + resolution: "gcp-metadata@npm:4.3.1" + dependencies: + gaxios: ^4.0.0 + json-bigint: ^1.0.0 + checksum: b0b1b85ea2efee1d640a1d4ead0937fdcceffd43ab4cacfdd66fd086fcfe5c3d09ad850ee14f43f2dc73244b2617b166adfa09a2a85e0652a8c56bed194f01fe + languageName: node + linkType: hard + +"generate-function@npm:^2.3.1": + version: 2.3.1 + resolution: "generate-function@npm:2.3.1" + dependencies: + is-property: ^1.0.2 + checksum: 652f083de206ead2bae4caf9c7eeb465e8d98c0b8ed2a29c6afc538cef0785b5c6eea10548f1e13cc586d3afd796c13c830c2cb3dc612ec2457b2aadda5f57c9 + 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: a7437e58c6be12aa6c90f7730eac7fa9833dc78872b4ad2963d2031b00a3367a93f98aec75f9aaac7220848e4026d67a8655e870b24f20a543d103c0d65952ec + languageName: node + linkType: hard + +"get-caller-file@npm:^2.0.5": + version: 2.0.5 + resolution: "get-caller-file@npm:2.0.5" + checksum: b9769a836d2a98c3ee734a88ba712e62703f1df31b94b784762c433c27a386dd6029ff55c2a920c392e33657d80191edbf18c61487e198844844516f843496b9 + languageName: node + linkType: hard + +"get-intrinsic@npm:^1.0.2, get-intrinsic@npm:^1.1.0, get-intrinsic@npm:^1.1.1, get-intrinsic@npm:^1.1.3": + version: 1.2.0 + resolution: "get-intrinsic@npm:1.2.0" + dependencies: + function-bind: ^1.1.1 + has: ^1.0.3 + has-symbols: ^1.0.3 + checksum: 78fc0487b783f5c58cf2dccafc3ae656ee8d2d8062a8831ce4a95e7057af4587a1d4882246c033aca0a7b4965276f4802b45cc300338d1b77a73d3e3e3f4877d + 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 + languageName: node + linkType: hard + +"get-pkg-repo@npm:^4.0.0": + version: 4.2.1 + resolution: "get-pkg-repo@npm:4.2.1" + dependencies: + "@hutson/parse-repository-url": ^3.0.0 + hosted-git-info: ^4.0.0 + through2: ^2.0.0 + yargs: ^16.2.0 + bin: + get-pkg-repo: src/cli.js + checksum: 5abf169137665e45b09a857b33ad2fdcf2f4a09f0ecbd0ebdd789a7ce78c39186a21f58621127eb724d2d4a3a7ee8e6bd4ac7715efda01ad5200665afc218e0d + languageName: node + linkType: hard + +"get-port@npm:5.1.1": + version: 5.1.1 + resolution: "get-port@npm:5.1.1" + checksum: 0162663ffe5c09e748cd79d97b74cd70e5a5c84b760a475ce5767b357fb2a57cb821cee412d646aa8a156ed39b78aab88974eddaa9e5ee926173c036c0713787 + languageName: node + linkType: hard + +"get-stdin@npm:^7.0.0": + version: 7.0.0 + resolution: "get-stdin@npm:7.0.0" + checksum: a24ab2cf8ee35bf5d3460c0d8145f2624715d864485789b7101a7cf1b6c1ce0a57319e25304872074121fa60e7104f1af3583a7014e9974c84c61d0702beae24 + languageName: node + linkType: hard + +"get-stream@npm:6.0.0, get-stream@npm:^6.0.0": + version: 6.0.0 + resolution: "get-stream@npm:6.0.0" + checksum: 587e6a93127f9991b494a566f4971cf7a2645dfa78034818143480a80587027bdd8826cdcf80d0eff4a4a19de0d231d157280f24789fc9cc31492e1dcc1290cf + languageName: node + linkType: hard + +"get-stream@npm:^3.0.0": + version: 3.0.0 + resolution: "get-stream@npm:3.0.0" + checksum: 36142f46005ed74ce3a45c55545ec4e7da8e243554179e345a786baf144e5c4a35fb7bdc49fadfa9f18bd08000589b6fe364abdadfc4e1eb0e1b9914a6bb9c56 + languageName: node + linkType: hard + +"get-stream@npm:^4.0.0": + version: 4.1.0 + resolution: "get-stream@npm:4.1.0" + dependencies: + pump: ^3.0.0 + checksum: 443e1914170c15bd52ff8ea6eff6dfc6d712b031303e36302d2778e3de2506af9ee964d6124010f7818736dcfde05c04ba7ca6cc26883106e084357a17ae7d73 + languageName: node + linkType: hard + +"get-symbol-description@npm:^1.0.0": + version: 1.0.0 + resolution: "get-symbol-description@npm:1.0.0" + dependencies: + call-bind: ^1.0.2 + get-intrinsic: ^1.1.1 + checksum: 9ceff8fe968f9270a37a1f73bf3f1f7bda69ca80f4f80850670e0e7b9444ff99323f7ac52f96567f8b5f5fbe7ac717a0d81d3407c7313e82810c6199446a5247 + languageName: node + linkType: hard + +"git-raw-commits@npm:^2.0.8": + version: 2.0.11 + resolution: "git-raw-commits@npm:2.0.11" + dependencies: + dargs: ^7.0.0 + lodash: ^4.17.15 + meow: ^8.0.0 + split2: ^3.0.0 + through2: ^4.0.0 + bin: + git-raw-commits: cli.js + checksum: c178af43633684106179793b6e3473e1d2bb50bb41d04e2e285ea4eef342ca4090fee6bc8a737552fde879d22346c90de5c49f18c719a0f38d4c934f258a0f79 + languageName: node + linkType: hard + +"git-remote-origin-url@npm:^2.0.0": + version: 2.0.0 + resolution: "git-remote-origin-url@npm:2.0.0" + dependencies: + gitconfiglocal: ^1.0.0 + pify: ^2.3.0 + checksum: 85263a09c044b5f4fe2acc45cbb3c5331ab2bd4484bb53dfe7f3dd593a4bf90a9786a2e00b9884524331f50b3da18e8c924f01c2944087fc7f342282c4437b73 + languageName: node + linkType: hard + +"git-semver-tags@npm:^4.1.1": + version: 4.1.1 + resolution: "git-semver-tags@npm:4.1.1" + dependencies: + meow: ^8.0.0 + semver: ^6.0.0 + bin: + git-semver-tags: cli.js + checksum: e16d02a515c0f88289a28b5bf59bf42c0dc053765922d3b617ae4b50546bd4f74a25bf3ad53b91cb6c1159319a2e92533b160c573b856c2629125c8b26b3b0e3 + languageName: node + linkType: hard + +"git-up@npm:^7.0.0": + version: 7.0.0 + resolution: "git-up@npm:7.0.0" + dependencies: + is-ssh: ^1.4.0 + parse-url: ^8.1.0 + checksum: 2faadbab51e94d2ffb220e426e950087cc02c15d664e673bd5d1f734cfa8196fed8b19493f7bf28fe216d087d10e22a7fd9b63687e0ba7d24f0ddcfb0a266d6e + languageName: node + linkType: hard + +"git-url-parse@npm:13.1.0": + version: 13.1.0 + resolution: "git-url-parse@npm:13.1.0" + dependencies: + git-up: ^7.0.0 + checksum: 212a9b0343e9199998b6a532efe2014476a7a1283af393663ca49ac28d4768929aad16d3322e2685236065ee394dbc93e7aa63a48956531e984c56d8b5edb54d + languageName: node + linkType: hard + +"gitconfiglocal@npm:^1.0.0": + version: 1.0.0 + resolution: "gitconfiglocal@npm:1.0.0" + dependencies: + ini: ^1.3.2 + checksum: e6d2764c15bbab6d1d1000d1181bb907f6b3796bb04f63614dba571b18369e0ecb1beaf27ce8da5b24307ef607e3a5f262a67cb9575510b9446aac697d421beb + languageName: node + linkType: hard + +"glob-parent@npm:5.1.2, glob-parent@npm:^5.1.2": + version: 5.1.2 + resolution: "glob-parent@npm:5.1.2" + dependencies: + is-glob: ^4.0.1 + checksum: f4f2bfe2425296e8a47e36864e4f42be38a996db40420fe434565e4480e3322f18eb37589617a98640c5dc8fdec1a387007ee18dbb1f3f5553409c34d17f425e + languageName: node + linkType: hard + +"glob-parent@npm:^6.0.2": + version: 6.0.2 + resolution: "glob-parent@npm:6.0.2" + dependencies: + is-glob: ^4.0.3 + checksum: 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: e795f4e8f06d2a15e86f76e4d92751cf8bbfcf0157cea5c2f0f35678a8195a750b34096b1256e436f0cebc1883b5ff0888c47348443e69546a5a87f9e1eb1167 + languageName: node + linkType: hard + +"glob@npm:7.1.4": + version: 7.1.4 + resolution: "glob@npm:7.1.4" + 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 + checksum: f52480fc82b1e66e52990f0f2e7306447d12294c83fbbee0395e761ad1178172012a7cc0673dbf4810baac400fc09bf34484c08b5778c216403fd823db281716 + languageName: node + linkType: hard + +"glob@npm:^10.2.2": + version: 10.2.7 + resolution: "glob@npm:10.2.7" + dependencies: + foreground-child: ^3.1.0 + jackspeak: ^2.0.3 + minimatch: ^9.0.1 + minipass: ^5.0.0 || ^6.0.2 + path-scurry: ^1.7.0 + bin: + glob: dist/cjs/src/bin.js + checksum: 555205a74607d6f8d9874ba888924b305b5ea1abfaa2e9ccb11ac713d040aac7edbf7d8702a2f4a1cd81b2d7666412170ce7ef061d33cddde189dae8c1a1a054 + languageName: node + linkType: hard + +"glob@npm:^7.1.2, glob@npm:^7.1.3, glob@npm:^7.1.4, glob@npm:~7.1.6": + version: 7.1.7 + resolution: "glob@npm:7.1.7" + 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 + checksum: b61f48973bbdcf5159997b0874a2165db572b368b931135832599875919c237fc05c12984e38fe828e69aa8a921eb0e8a4997266211c517c9cfaae8a93988bb8 + languageName: node + linkType: hard + +"glob@npm:^8.0.1": + version: 8.0.3 + resolution: "glob@npm:8.0.3" + dependencies: + fs.realpath: ^1.0.0 + inflight: ^1.0.4 + inherits: 2 + minimatch: ^5.0.1 + once: ^1.3.0 + checksum: 50bcdea19d8e79d8de5f460b1939ffc2b3299eac28deb502093fdca22a78efebc03e66bf54f0abc3d3d07d8134d19a32850288b7440d77e072aa55f9d33b18c5 + languageName: node + linkType: hard + +"globals@npm:^11.1.0": + version: 11.12.0 + resolution: "globals@npm:11.12.0" + checksum: 67051a45eca3db904aee189dfc7cd53c20c7d881679c93f6146ddd4c9f4ab2268e68a919df740d39c71f4445d2b38ee360fc234428baea1dbdfe68bbcb46979e + languageName: node + linkType: hard + +"globals@npm:^13.15.0": + version: 13.18.0 + resolution: "globals@npm:13.18.0" + dependencies: + type-fest: ^0.20.2 + checksum: 9fdaa74cfd5d4ac91319662f512c29b11d1d2deb9c8a20d3998097671deba83d195f20730b2345887de3ddab958a6fa68952feed9ae836ee4594a82ace62fdb4 + languageName: node + linkType: hard + +"globby@npm:11.1.0, globby@npm:^11.0.1, globby@npm:^11.1.0": + version: 11.1.0 + resolution: "globby@npm:11.1.0" + 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 + checksum: b4be8885e0cfa018fc783792942d53926c35c50b3aefd3fdcfb9d22c627639dc26bd2327a40a0b74b074100ce95bb7187bfeae2f236856aa3de183af7a02aea6 + languageName: node + linkType: hard + +"google-auth-library@npm:^7.14.0": + version: 7.14.0 + resolution: "google-auth-library@npm:7.14.0" + dependencies: + arrify: ^2.0.0 + base64-js: ^1.3.0 + ecdsa-sig-formatter: ^1.0.11 + fast-text-encoding: ^1.0.0 + gaxios: ^4.0.0 + gcp-metadata: ^4.2.0 + gtoken: ^5.0.4 + jws: ^4.0.0 + lru-cache: ^6.0.0 + checksum: 0fe254bc985c7b3be5ae6708afae9cd8a92cb468d956458e8fb6ec76ce8900ee90dbf1c8aa51790039c388682db6a6b510b6bef48ae6e1cea6f5d893b163381c + languageName: node + linkType: hard + +"google-p12-pem@npm:^3.1.3": + version: 3.1.3 + resolution: "google-p12-pem@npm:3.1.3" + dependencies: + node-forge: ^1.0.0 + bin: + gp12-pem: build/src/bin/gp12-pem.js + checksum: 8628f2bf9b4c9b3bfc7220906c15af2b306e2ef30c7c398327a9cff9d4a12285f104545f00c46b716dd23966615f446d7e5efde44d590f9483d345be78ea115e + languageName: node + linkType: hard + +"gopd@npm:^1.0.1": + version: 1.0.1 + resolution: "gopd@npm:1.0.1" + dependencies: + get-intrinsic: ^1.1.3 + checksum: a5ccfb8806e0917a94e0b3de2af2ea4979c1da920bc381667c260e00e7cafdbe844e2cb9c5bcfef4e5412e8bf73bab837285bc35c7ba73aaaf0134d4583393a6 + languageName: node + linkType: hard + +"graceful-fs@npm:4.2.10, graceful-fs@npm:^4.1.11, 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.10 + resolution: "graceful-fs@npm:4.2.10" + checksum: 3f109d70ae123951905d85032ebeae3c2a5a7a997430df00ea30df0e3a6c60cf6689b109654d6fdacd28810a053348c4d14642da1d075049e6be1ba5216218da + languageName: node + linkType: hard + +"grapheme-splitter@npm:^1.0.4": + version: 1.0.4 + resolution: "grapheme-splitter@npm:1.0.4" + checksum: 0c22ec54dee1b05cd480f78cf14f732cb5b108edc073572c4ec205df4cd63f30f8db8025afc5debc8835a8ddeacf648a1c7992fe3dcd6ad38f9a476d84906620 + languageName: node + linkType: hard + +"gtoken@npm:^5.0.4": + version: 5.3.2 + resolution: "gtoken@npm:5.3.2" + dependencies: + gaxios: ^4.0.0 + google-p12-pem: ^3.1.3 + jws: ^4.0.0 + checksum: 1fd640e98afcb3d5c77026fd4ff0671dce724acad11169e5b63701a853e1f5a03f4c76fe6eb95500db80f8444753ce212701d396186ef006088d08be4174f2d7 + languageName: node + linkType: hard + +"handlebars@npm:^4.7.7": + version: 4.7.7 + resolution: "handlebars@npm:4.7.7" + dependencies: + minimist: ^1.2.5 + neo-async: ^2.6.0 + source-map: ^0.6.1 + uglify-js: ^3.1.4 + wordwrap: ^1.0.0 + dependenciesMeta: + uglify-js: + optional: true + bin: + handlebars: bin/handlebars + checksum: 1e79a43f5e18d15742977cb987923eab3e2a8f44f2d9d340982bcb69e1735ed049226e534d7c1074eaddaf37e4fb4f471a8adb71cddd5bc8cf3f894241df5cee + languageName: node + linkType: hard + +"hard-rejection@npm:^2.1.0": + version: 2.1.0 + resolution: "hard-rejection@npm:2.1.0" + checksum: 7baaf80a0c7fff4ca79687b4060113f1529589852152fa935e6787a2bc96211e784ad4588fb3048136ff8ffc9dfcf3ae385314a5b24db32de20bea0d1597f9dc + languageName: node + linkType: hard + +"harmony-reflect@npm:^1.4.6": + version: 1.6.2 + resolution: "harmony-reflect@npm:1.6.2" + checksum: 2e5bae414cd2bfae5476147f9935dc69ee9b9a413206994dcb94c5b3208d4555da3d4313aff6fd14bd9991c1e3ef69cdda5c8fac1eb1d7afc064925839339b8c + languageName: node + linkType: hard + +"has-bigints@npm:^1.0.1, has-bigints@npm:^1.0.2": + version: 1.0.2 + resolution: "has-bigints@npm:1.0.2" + checksum: 390e31e7be7e5c6fe68b81babb73dfc35d413604d7ee5f56da101417027a4b4ce6a27e46eff97ad040c835b5d228676eae99a9b5c3bc0e23c8e81a49241ff45b + languageName: node + linkType: hard + +"has-flag@npm:^3.0.0": + version: 3.0.0 + resolution: "has-flag@npm:3.0.0" + checksum: 4a15638b454bf086c8148979aae044dd6e39d63904cd452d970374fa6a87623423da485dfb814e7be882e05c096a7ccf1ebd48e7e7501d0208d8384ff4dea73b + languageName: node + linkType: hard + +"has-flag@npm:^4.0.0": + version: 4.0.0 + resolution: "has-flag@npm:4.0.0" + checksum: 261a1357037ead75e338156b1f9452c016a37dcd3283a972a30d9e4a87441ba372c8b81f818cd0fbcd9c0354b4ae7e18b9e1afa1971164aef6d18c2b6095a8ad + languageName: node + linkType: hard + +"has-property-descriptors@npm:^1.0.0": + version: 1.0.0 + resolution: "has-property-descriptors@npm:1.0.0" + dependencies: + get-intrinsic: ^1.1.1 + checksum: a6d3f0a266d0294d972e354782e872e2fe1b6495b321e6ef678c9b7a06a40408a6891817350c62e752adced73a94ac903c54734fee05bf65b1905ee1368194bb + languageName: node + linkType: hard + +"has-symbols@npm:^1.0.2, has-symbols@npm:^1.0.3": + version: 1.0.3 + resolution: "has-symbols@npm:1.0.3" + checksum: a054c40c631c0d5741a8285010a0777ea0c068f99ed43e5d6eb12972da223f8af553a455132fdb0801bdcfa0e0f443c0c03a68d8555aa529b3144b446c3f2410 + languageName: node + linkType: hard + +"has-tostringtag@npm:^1.0.0": + version: 1.0.0 + resolution: "has-tostringtag@npm:1.0.0" + dependencies: + has-symbols: ^1.0.2 + checksum: cc12eb28cb6ae22369ebaad3a8ab0799ed61270991be88f208d508076a1e99abe4198c965935ce85ea90b60c94ddda73693b0920b58e7ead048b4a391b502c1c + languageName: node + linkType: hard + +"has-unicode@npm:2.0.1, has-unicode@npm:^2.0.1": + version: 2.0.1 + resolution: "has-unicode@npm:2.0.1" + checksum: 1eab07a7436512db0be40a710b29b5dc21fa04880b7f63c9980b706683127e3c1b57cb80ea96d47991bdae2dfe479604f6a1ba410106ee1046a41d1bd0814400 + languageName: node + linkType: hard + +"has@npm:^1.0.3": + version: 1.0.3 + resolution: "has@npm:1.0.3" + dependencies: + function-bind: ^1.1.1 + checksum: b9ad53d53be4af90ce5d1c38331e712522417d017d5ef1ebd0507e07c2fbad8686fffb8e12ddecd4c39ca9b9b47431afbb975b8abf7f3c3b82c98e9aad052792 + languageName: node + linkType: hard + +"hosted-git-info@npm:^2.1.4": + version: 2.8.9 + resolution: "hosted-git-info@npm:2.8.9" + checksum: c955394bdab888a1e9bb10eb33029e0f7ce5a2ac7b3f158099dc8c486c99e73809dca609f5694b223920ca2174db33d32b12f9a2a47141dc59607c29da5a62dd + languageName: node + linkType: hard + +"hosted-git-info@npm:^3.0.6": + version: 3.0.8 + resolution: "hosted-git-info@npm:3.0.8" + dependencies: + lru-cache: ^6.0.0 + checksum: 5af7a69581acb84206a7b8e009f4680c36396814e92c8a83973dfb3b87e44e44d1f7b8eaf3e4a953686482770ecb78406a4ce4666bfdfe447762434127871d8d + languageName: node + linkType: hard + +"hosted-git-info@npm:^4.0.0, hosted-git-info@npm:^4.0.1": + version: 4.0.2 + resolution: "hosted-git-info@npm:4.0.2" + dependencies: + lru-cache: ^6.0.0 + checksum: d1b2d7720398ce96a788bd38d198fbddce089a2381f63cfb01743e6c7e5aed656e5547fe74090fb9fe53b2cb785b0e8c9ebdddadff48ed26bb471dd23cd25458 + languageName: node + linkType: hard + +"hosted-git-info@npm:^5.0.0": + version: 5.1.0 + resolution: "hosted-git-info@npm:5.1.0" + dependencies: + lru-cache: ^7.5.1 + checksum: 22abbc6a7418344c883e2df6e791e94b38192b2a61256b19c955999d878b8d5365ea51683fd1f0cc8f217e9bd121db88d5aaa7cf0407c4b7ff287b79aabacbd3 + languageName: node + linkType: hard + +"html-encoding-sniffer@npm:^3.0.0": + version: 3.0.0 + resolution: "html-encoding-sniffer@npm:3.0.0" + dependencies: + whatwg-encoding: ^2.0.0 + checksum: 8d806aa00487e279e5ccb573366a951a9f68f65c90298eac9c3a2b440a7ffe46615aff2995a2f61c6746c639234e6179a97e18ca5ccbbf93d3725ef2099a4502 + languageName: node + linkType: hard + +"html-escaper@npm:^2.0.0": + version: 2.0.2 + resolution: "html-escaper@npm:2.0.2" + checksum: d2df2da3ad40ca9ee3a39c5cc6475ef67c8f83c234475f24d8e9ce0dc80a2c82df8e1d6fa78ddd1e9022a586ea1bd247a615e80a5cd9273d90111ddda7d9e974 + languageName: node + linkType: hard + +"htmlparser2@npm:^6.0.0": + version: 6.1.0 + resolution: "htmlparser2@npm:6.1.0" + dependencies: + domelementtype: ^2.0.1 + domhandler: ^4.0.0 + domutils: ^2.5.2 + entities: ^2.0.0 + checksum: 81a7b3d9c3bb9acb568a02fc9b1b81ffbfa55eae7f1c41ae0bf840006d1dbf54cb3aa245b2553e2c94db674840a9f0fdad7027c9a9d01a062065314039058c4e + 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: 83ac0bc60b17a3a36f9953e7be55e5c8f41acc61b22583060e8dedc9dd5e3607c823a88d0926f9150e571f90946835c7fe150732801010845c72cd8bbff1a236 + languageName: node + linkType: hard + +"http-proxy-agent@npm:^2.1.0": + version: 2.1.0 + resolution: "http-proxy-agent@npm:2.1.0" + dependencies: + agent-base: 4 + debug: 3.1.0 + checksum: 9b3ab4c794b123fcb424e09d9c743c1e3b4ee8f278634a959c118731e3543fa5c7dfe588a428df6c352479b5f8a6dbdf7b122290f8bb2268f349759ab078fc31 + languageName: node + linkType: hard + +"http-proxy-agent@npm:^4.0.1": + version: 4.0.1 + resolution: "http-proxy-agent@npm:4.0.1" + dependencies: + "@tootallnate/once": 1 + agent-base: 6 + debug: 4 + checksum: c6a5da5a1929416b6bbdf77b1aca13888013fe7eb9d59fc292e25d18e041bb154a8dfada58e223fc7b76b9b2d155a87e92e608235201f77d34aa258707963a82 + 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": 2 + agent-base: 6 + debug: 4 + checksum: e2ee1ff1656a131953839b2a19cd1f3a52d97c25ba87bd2559af6ae87114abf60971e498021f9b73f9fd78aea8876d1fb0d4656aac8a03c6caa9fc175f22b786 + languageName: node + linkType: hard + +"https-proxy-agent@npm:^2.2.3": + version: 2.2.4 + resolution: "https-proxy-agent@npm:2.2.4" + dependencies: + agent-base: ^4.3.0 + debug: ^3.1.0 + checksum: 5fa8eab256b117a8badb5747bedf8b3a9de1fbabdccb26ff3132385426fdc3ad3c8b092ce52a1b74c70229b971df623f4f5a0c17f78e6a8fe5d10fc65d6ed8b8 + languageName: node + linkType: hard + +"https-proxy-agent@npm:^5.0.0, https-proxy-agent@npm:^5.0.1": + version: 5.0.1 + resolution: "https-proxy-agent@npm:5.0.1" + dependencies: + agent-base: 6 + debug: 4 + checksum: 571fccdf38184f05943e12d37d6ce38197becdd69e58d03f43637f7fa1269cf303a7d228aa27e5b27bbd3af8f09fd938e1c91dcfefff2df7ba77c20ed8dfc765 + languageName: node + linkType: hard + +"human-signals@npm:^2.1.0": + version: 2.1.0 + resolution: "human-signals@npm:2.1.0" + checksum: b87fd89fce72391625271454e70f67fe405277415b48bcc0117ca73d31fa23a4241787afdc8d67f5a116cf37258c052f59ea82daffa72364d61351423848e3b8 + languageName: node + linkType: hard + +"humanize-ms@npm:^1.2.1": + version: 1.2.1 + resolution: "humanize-ms@npm:1.2.1" + dependencies: + ms: ^2.0.0 + checksum: 9c7a74a2827f9294c009266c82031030eae811ca87b0da3dceb8d6071b9bde22c9f3daef0469c3c533cc67a97d8a167cd9fc0389350e5f415f61a79b171ded16 + languageName: node + linkType: hard + +"husky@npm:^3.0.9": + version: 3.1.0 + resolution: "husky@npm:3.1.0" + dependencies: + chalk: ^2.4.2 + ci-info: ^2.0.0 + cosmiconfig: ^5.2.1 + execa: ^1.0.0 + get-stdin: ^7.0.0 + opencollective-postinstall: ^2.0.2 + pkg-dir: ^4.2.0 + please-upgrade-node: ^3.2.0 + read-pkg: ^5.2.0 + run-node: ^1.0.0 + slash: ^3.0.0 + bin: + husky-run: ./run.js + husky-upgrade: ./lib/upgrader/bin.js + checksum: 15a8eeb5ca8286f4e1f64cbc55ffb2295c407ba9da84a88128471a886e6fb6cf7a2b5ea0db5f0715e185d7251fc09700baf3bc95f63cb80accc5d253d69c141f + languageName: node + linkType: hard + +"iconv-lite@npm:0.6.3, iconv-lite@npm:^0.6.2, iconv-lite@npm:^0.6.3": + version: 0.6.3 + resolution: "iconv-lite@npm:0.6.3" + dependencies: + safer-buffer: ">= 2.1.2 < 3.0.0" + checksum: 3f60d47a5c8fc3313317edfd29a00a692cc87a19cac0159e2ce711d0ebc9019064108323b5e493625e25594f11c6236647d8e256fbe7a58f4a3b33b89e6d30bf + languageName: node + linkType: hard + +"iconv-lite@npm:^0.4.24": + version: 0.4.24 + resolution: "iconv-lite@npm:0.4.24" + dependencies: + safer-buffer: ">= 2.1.2 < 3" + checksum: bd9f120f5a5b306f0bc0b9ae1edeb1577161503f5f8252a20f1a9e56ef8775c9959fd01c55f2d3a39d9a8abaf3e30c1abeb1895f367dcbbe0a8fd1c9ca01c4f6 + languageName: node + linkType: hard + +"icss-utils@npm:^5.0.0, icss-utils@npm:^5.1.0": + version: 5.1.0 + resolution: "icss-utils@npm:5.1.0" + peerDependencies: + postcss: ^8.1.0 + checksum: 5c324d283552b1269cfc13a503aaaa172a280f914e5b81544f3803bc6f06a3b585fb79f66f7c771a2c052db7982c18bf92d001e3b47282e3abbbb4c4cc488d68 + languageName: node + linkType: hard + +"identity-obj-proxy@npm:^3.0.0": + version: 3.0.0 + resolution: "identity-obj-proxy@npm:3.0.0" + dependencies: + harmony-reflect: ^1.4.6 + checksum: 97559f8ea2aeaa1a880d279d8c49550dce01148321e00a2102cda5ddf9ce622fa1d7f3efc7bed63458af78889de888fdaebaf31c816312298bb3fdd0ef8aaf2c + languageName: node + linkType: hard + +"ieee754@npm:^1.1.13": + version: 1.2.1 + resolution: "ieee754@npm:1.2.1" + checksum: 5144c0c9815e54ada181d80a0b810221a253562422e7c6c3a60b1901154184f49326ec239d618c416c1c5945a2e197107aee8d986a3dd836b53dffefd99b5e7e + languageName: node + linkType: hard + +"ignore-walk@npm:^5.0.1": + version: 5.0.1 + resolution: "ignore-walk@npm:5.0.1" + dependencies: + minimatch: ^5.0.1 + checksum: 1a4ef35174653a1aa6faab3d9f8781269166536aee36a04946f6e2b319b2475c1903a75ed42f04219274128242f49d0a10e20c4354ee60d9548e97031451150b + languageName: node + linkType: hard + +"ignore@npm:^3.3.7": + version: 3.3.10 + resolution: "ignore@npm:3.3.10" + checksum: 23e8cc776e367b56615ab21b78decf973a35dfca5522b39d9b47643d8168473b0d1f18dd1321a1bab466a12ea11a2411903f3b21644f4d5461ee0711ec8678bd + languageName: node + linkType: hard + +"ignore@npm:^5.0.4, ignore@npm:^5.2.0": + version: 5.2.1 + resolution: "ignore@npm:5.2.1" + checksum: 7251d00cba49fe88c4f3565fadeb4aa726ba38294a9a79ffed542edc47bafd989d4b2ccf65700c5b1b26a1e91dfc7218fb23017937c79216025d5caeec0ee9d5 + languageName: node + linkType: hard + +"import-fresh@npm:^2.0.0": + version: 2.0.0 + resolution: "import-fresh@npm:2.0.0" + dependencies: + caller-path: ^2.0.0 + resolve-from: ^3.0.0 + checksum: 610255f9753cc6775df00be08e9f43691aa39f7703e3636c45afe22346b8b545e600ccfe100c554607546fc8e861fa149a0d1da078c8adedeea30fff326eef79 + languageName: node + linkType: hard + +"import-fresh@npm:^3.0.0, import-fresh@npm:^3.2.1": + version: 3.3.0 + resolution: "import-fresh@npm:3.3.0" + dependencies: + parent-module: ^1.0.0 + resolve-from: ^4.0.0 + checksum: 2cacfad06e652b1edc50be650f7ec3be08c5e5a6f6d12d035c440a42a8cc028e60a5b99ca08a77ab4d6b1346da7d971915828f33cdab730d3d42f08242d09baa + languageName: node + linkType: hard + +"import-local@npm:^3.0.2": + version: 3.1.0 + resolution: "import-local@npm:3.1.0" + dependencies: + pkg-dir: ^4.2.0 + resolve-cwd: ^3.0.0 + bin: + import-local-fixture: fixtures/cli.js + checksum: bfcdb63b5e3c0e245e347f3107564035b128a414c4da1172a20dc67db2504e05ede4ac2eee1252359f78b0bfd7b19ef180aec427c2fce6493ae782d73a04cddd + languageName: node + linkType: hard + +"imurmurhash@npm:^0.1.4": + version: 0.1.4 + resolution: "imurmurhash@npm:0.1.4" + checksum: 7cae75c8cd9a50f57dadd77482359f659eaebac0319dd9368bcd1714f55e65badd6929ca58569da2b6494ef13fdd5598cd700b1eba23f8b79c5f19d195a3ecf7 + languageName: node + linkType: hard + +"indent-string@npm:^4.0.0": + version: 4.0.0 + resolution: "indent-string@npm:4.0.0" + checksum: 824cfb9929d031dabf059bebfe08cf3137365e112019086ed3dcff6a0a7b698cb80cf67ccccde0e25b9e2d7527aa6cc1fed1ac490c752162496caba3e6699612 + 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" + dependencies: + once: ^1.3.0 + wrappy: 1 + checksum: f4f76aa072ce19fae87ce1ef7d221e709afb59d445e05d47fba710e85470923a75de35bfae47da6de1b18afc3ce83d70facf44cfb0aff89f0a3f45c0a0244dfd + languageName: node + linkType: hard + +"inherits@npm:2, inherits@npm:^2.0.0, inherits@npm:^2.0.3, inherits@npm:^2.0.4, inherits@npm:~2.0.3": + version: 2.0.4 + resolution: "inherits@npm:2.0.4" + checksum: 4a48a733847879d6cf6691860a6b1e3f0f4754176e4d71494c41f3475553768b10f84b5ce1d40fbd0e34e6bfbb864ee35858ad4dd2cf31e02fc4a154b724d7f1 + languageName: node + linkType: hard + +"ini@npm:^1.3.2, ini@npm:^1.3.4": + version: 1.3.8 + resolution: "ini@npm:1.3.8" + checksum: dfd98b0ca3a4fc1e323e38a6c8eb8936e31a97a918d3b377649ea15bdb15d481207a0dda1021efbd86b464cae29a0d33c1d7dcaf6c5672bee17fa849bc50a1b3 + languageName: node + linkType: hard + +"init-package-json@npm:3.0.2, init-package-json@npm:^3.0.2": + version: 3.0.2 + resolution: "init-package-json@npm:3.0.2" + dependencies: + npm-package-arg: ^9.0.1 + promzard: ^0.3.0 + read: ^1.0.7 + read-package-json: ^5.0.0 + semver: ^7.3.5 + validate-npm-package-license: ^3.0.4 + validate-npm-package-name: ^4.0.0 + checksum: e027f60e4a1564809eee790d5a842341c784888fd7c7ace5f9a34ea76224c0adb6f3ab3bf205cf1c9c877a6e1a76c68b00847a984139f60813125d7b42a23a13 + languageName: node + linkType: hard + +"inquirer@npm:^8.2.4": + version: 8.2.4 + resolution: "inquirer@npm:8.2.4" + dependencies: + ansi-escapes: ^4.2.1 + chalk: ^4.1.1 + cli-cursor: ^3.1.0 + cli-width: ^3.0.0 + external-editor: ^3.0.3 + figures: ^3.0.0 + lodash: ^4.17.21 + mute-stream: 0.0.8 + ora: ^5.4.1 + run-async: ^2.4.0 + rxjs: ^7.5.5 + string-width: ^4.1.0 + strip-ansi: ^6.0.0 + through: ^2.3.6 + wrap-ansi: ^7.0.0 + checksum: dfcb6529d3af443dfea2241cb471508091b51f5121a088fdb8728b23ec9b349ef0a5e13a0ef2c8e19457b0bed22f7cbbcd561f7a4529d084c562a58c605e2655 + languageName: node + linkType: hard + +"internal-slot@npm:^1.0.3": + version: 1.0.3 + resolution: "internal-slot@npm:1.0.3" + dependencies: + get-intrinsic: ^1.1.0 + has: ^1.0.3 + side-channel: ^1.0.4 + checksum: 1944f92e981e47aebc98a88ff0db579fd90543d937806104d0b96557b10c1f170c51fb777b97740a8b6ddeec585fca8c39ae99fd08a8e058dfc8ab70937238bf + languageName: node + linkType: hard + +"interpret@npm:^3.1.1": + version: 3.1.1 + resolution: "interpret@npm:3.1.1" + checksum: 35cebcf48c7351130437596d9ab8c8fe131ce4038da4561e6d665f25640e0034702a031cf7e3a5cea60ac7ac548bf17465e0571ede126f3d3a6933152171ac82 + languageName: node + linkType: hard + +"ip@npm:^2.0.0": + version: 2.0.0 + resolution: "ip@npm:2.0.0" + checksum: cfcfac6b873b701996d71ec82a7dd27ba92450afdb421e356f44044ed688df04567344c36cbacea7d01b1c39a4c732dc012570ebe9bebfb06f27314bca625349 + languageName: node + linkType: hard + +"irregular-plurals@npm:^2.0.0": + version: 2.0.0 + resolution: "irregular-plurals@npm:2.0.0" + checksum: e733996e28f903f3d688ead18b1c09fe1cb27c56859596f339631a645b461137d0841b64a566b01359b5acc2e5f38aab11a7555646ea889dc25e03ed96fa9b04 + languageName: node + linkType: hard + +"is-alphabetical@npm:^1.0.0": + version: 1.0.4 + resolution: "is-alphabetical@npm:1.0.4" + checksum: 6508cce44fd348f06705d377b260974f4ce68c74000e7da4045f0d919e568226dc3ce9685c5a2af272195384df6930f748ce9213fc9f399b5d31b362c66312cb + languageName: node + linkType: hard + +"is-alphanumerical@npm:^1.0.0": + version: 1.0.4 + resolution: "is-alphanumerical@npm:1.0.4" + dependencies: + is-alphabetical: ^1.0.0 + is-decimal: ^1.0.0 + checksum: e2e491acc16fcf5b363f7c726f666a9538dba0a043665740feb45bba1652457a73441e7c5179c6768a638ed396db3437e9905f403644ec7c468fb41f4813d03f + languageName: node + linkType: hard + +"is-arrayish@npm:^0.2.1": + version: 0.2.1 + resolution: "is-arrayish@npm:0.2.1" + checksum: eef4417e3c10e60e2c810b6084942b3ead455af16c4509959a27e490e7aee87cfb3f38e01bbde92220b528a0ee1a18d52b787e1458ee86174d8c7f0e58cd488f + languageName: node + linkType: hard + +"is-bigint@npm:^1.0.1": + version: 1.0.4 + resolution: "is-bigint@npm:1.0.4" + dependencies: + has-bigints: ^1.0.1 + checksum: c56edfe09b1154f8668e53ebe8252b6f185ee852a50f9b41e8d921cb2bed425652049fbe438723f6cb48a63ca1aa051e948e7e401e093477c99c84eba244f666 + languageName: node + linkType: hard + +"is-boolean-object@npm:^1.1.0": + version: 1.1.2 + resolution: "is-boolean-object@npm:1.1.2" + dependencies: + call-bind: ^1.0.2 + has-tostringtag: ^1.0.0 + checksum: c03b23dbaacadc18940defb12c1c0e3aaece7553ef58b162a0f6bba0c2a7e1551b59f365b91e00d2dbac0522392d576ef322628cb1d036a0fe51eb466db67222 + languageName: node + linkType: hard + +"is-buffer@npm:^2.0.0": + version: 2.0.5 + resolution: "is-buffer@npm:2.0.5" + checksum: 764c9ad8b523a9f5a32af29bdf772b08eb48c04d2ad0a7240916ac2688c983bf5f8504bf25b35e66240edeb9d9085461f9b5dae1f3d2861c6b06a65fe983de42 + languageName: node + linkType: hard + +"is-callable@npm:^1.1.4, is-callable@npm:^1.2.7": + version: 1.2.7 + resolution: "is-callable@npm:1.2.7" + checksum: 61fd57d03b0d984e2ed3720fb1c7a897827ea174bd44402878e059542ea8c4aeedee0ea0985998aa5cc2736b2fa6e271c08587addb5b3959ac52cf665173d1ac + languageName: node + linkType: hard + +"is-ci@npm:2.0.0": + version: 2.0.0 + resolution: "is-ci@npm:2.0.0" + dependencies: + ci-info: ^2.0.0 + bin: + is-ci: bin.js + checksum: 77b869057510f3efa439bbb36e9be429d53b3f51abd4776eeea79ab3b221337fe1753d1e50058a9e2c650d38246108beffb15ccfd443929d77748d8c0cc90144 + languageName: node + linkType: hard + +"is-core-module@npm:^2.2.0, is-core-module@npm:^2.5.0, is-core-module@npm:^2.8.1, is-core-module@npm:^2.9.0": + version: 2.11.0 + resolution: "is-core-module@npm:2.11.0" + dependencies: + has: ^1.0.3 + checksum: f96fd490c6b48eb4f6d10ba815c6ef13f410b0ba6f7eb8577af51697de523e5f2cd9de1c441b51d27251bf0e4aebc936545e33a5d26d5d51f28d25698d4a8bab + languageName: node + linkType: hard + +"is-date-object@npm:^1.0.1": + version: 1.0.5 + resolution: "is-date-object@npm:1.0.5" + dependencies: + has-tostringtag: ^1.0.0 + checksum: baa9077cdf15eb7b58c79398604ca57379b2fc4cf9aa7a9b9e295278648f628c9b201400c01c5e0f7afae56507d741185730307cbe7cad3b9f90a77e5ee342fc + languageName: node + linkType: hard + +"is-decimal@npm:^1.0.0": + version: 1.0.4 + resolution: "is-decimal@npm:1.0.4" + checksum: ed483a387517856dc395c68403a10201fddcc1b63dc56513fbe2fe86ab38766120090ecdbfed89223d84ca8b1cd28b0641b93cb6597b6e8f4c097a7c24e3fb96 + languageName: node + linkType: hard + +"is-directory@npm:^0.3.1": + version: 0.3.1 + resolution: "is-directory@npm:0.3.1" + checksum: dce9a9d3981e38f2ded2a80848734824c50ee8680cd09aa477bef617949715cfc987197a2ca0176c58a9fb192a1a0d69b535c397140d241996a609d5906ae524 + languageName: node + linkType: hard + +"is-docker@npm:^2.0.0, is-docker@npm:^2.1.1": + version: 2.2.1 + resolution: "is-docker@npm:2.2.1" + bin: + is-docker: cli.js + checksum: 3fef7ddbf0be25958e8991ad941901bf5922ab2753c46980b60b05c1bf9c9c2402d35e6dc32e4380b980ef5e1970a5d9d5e5aa2e02d77727c3b6b5e918474c56 + languageName: node + linkType: hard + +"is-extglob@npm:^2.1.1": + version: 2.1.1 + resolution: "is-extglob@npm:2.1.1" + checksum: 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 + languageName: node + linkType: hard + +"is-generator-fn@npm:^2.0.0": + version: 2.1.0 + resolution: "is-generator-fn@npm:2.1.0" + checksum: a6ad5492cf9d1746f73b6744e0c43c0020510b59d56ddcb78a91cbc173f09b5e6beff53d75c9c5a29feb618bfef2bf458e025ecf3a57ad2268e2fb2569f56215 + languageName: node + linkType: hard + +"is-glob@npm:^4.0.0, is-glob@npm:^4.0.1, is-glob@npm:^4.0.3": + version: 4.0.3 + resolution: "is-glob@npm:4.0.3" + dependencies: + is-extglob: ^2.1.1 + checksum: d381c1319fcb69d341cc6e6c7cd588e17cd94722d9a32dbd60660b993c4fb7d0f19438674e68dfec686d09b7c73139c9166b47597f846af387450224a8101ab4 + languageName: node + linkType: hard + +"is-hexadecimal@npm:^1.0.0": + version: 1.0.4 + resolution: "is-hexadecimal@npm:1.0.4" + checksum: a452e047587b6069332d83130f54d30da4faf2f2ebaa2ce6d073c27b5703d030d58ed9e0b729c8e4e5b52c6f1dab26781bb77b7bc6c7805f14f320e328ff8cd5 + languageName: node + linkType: hard + +"is-interactive@npm:^1.0.0": + version: 1.0.0 + resolution: "is-interactive@npm:1.0.0" + checksum: 824808776e2d468b2916cdd6c16acacebce060d844c35ca6d82267da692e92c3a16fdba624c50b54a63f38bdc4016055b6f443ce57d7147240de4f8cdabaf6f9 + languageName: node + linkType: hard + +"is-lambda@npm:^1.0.1": + version: 1.0.1 + resolution: "is-lambda@npm:1.0.1" + checksum: 93a32f01940220532e5948538699ad610d5924ac86093fcee83022252b363eb0cc99ba53ab084a04e4fb62bf7b5731f55496257a4c38adf87af9c4d352c71c35 + languageName: node + linkType: hard + +"is-negative-zero@npm:^2.0.2": + version: 2.0.2 + resolution: "is-negative-zero@npm:2.0.2" + checksum: f3232194c47a549da60c3d509c9a09be442507616b69454716692e37ae9f37c4dea264fb208ad0c9f3efd15a796a46b79df07c7e53c6227c32170608b809149a + languageName: node + linkType: hard + +"is-number-object@npm:^1.0.4": + version: 1.0.6 + resolution: "is-number-object@npm:1.0.6" + dependencies: + has-tostringtag: ^1.0.0 + checksum: c697704e8fc2027fc41cb81d29805de4e8b6dc9c3efee93741dbf126a8ecc8443fef85adbc581415ae7e55d325e51d0a942324ae35c829131748cce39cba55f3 + languageName: node + linkType: hard + +"is-number@npm:^7.0.0": + version: 7.0.0 + resolution: "is-number@npm:7.0.0" + checksum: 456ac6f8e0f3111ed34668a624e45315201dff921e5ac181f8ec24923b99e9f32ca1a194912dc79d539c97d33dba17dc635202ff0b2cf98326f608323276d27a + languageName: node + linkType: hard + +"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-cwd@npm:^2.2.0": + version: 2.2.0 + resolution: "is-path-cwd@npm:2.2.0" + checksum: 46a840921bb8cc0dc7b5b423a14220e7db338072a4495743a8230533ce78812dc152548c86f4b828411fe98c5451959f07cf841c6a19f611e46600bd699e8048 + 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 + languageName: node + linkType: hard + +"is-plain-obj@npm:^1.0.0, is-plain-obj@npm:^1.1.0": + version: 1.1.0 + resolution: "is-plain-obj@npm:1.1.0" + checksum: 0ee04807797aad50859652a7467481816cbb57e5cc97d813a7dcd8915da8195dc68c436010bf39d195226cde6a2d352f4b815f16f26b7bf486a5754290629931 + languageName: node + linkType: hard + +"is-plain-object@npm:^2.0.4": + version: 2.0.4 + resolution: "is-plain-object@npm:2.0.4" + dependencies: + isobject: ^3.0.1 + checksum: 2a401140cfd86cabe25214956ae2cfee6fbd8186809555cd0e84574f88de7b17abacb2e477a6a658fa54c6083ecbda1e6ae404c7720244cd198903848fca70ca + languageName: node + linkType: hard + +"is-plain-object@npm:^5.0.0": + version: 5.0.0 + resolution: "is-plain-object@npm:5.0.0" + checksum: e32d27061eef62c0847d303125440a38660517e586f2f3db7c9d179ae5b6674ab0f469d519b2e25c147a1a3bc87156d0d5f4d8821e0ce4a9ee7fe1fcf11ce45c + languageName: node + linkType: hard + +"is-potential-custom-element-name@npm:^1.0.1": + version: 1.0.1 + resolution: "is-potential-custom-element-name@npm:1.0.1" + checksum: ced7bbbb6433a5b684af581872afe0e1767e2d1146b2207ca0068a648fb5cab9d898495d1ac0583524faaf24ca98176a7d9876363097c2d14fee6dd324f3a1ab + languageName: node + linkType: hard + +"is-promise@npm:^2.1": + version: 2.2.2 + resolution: "is-promise@npm:2.2.2" + checksum: 18bf7d1c59953e0ad82a1ed963fb3dc0d135c8f299a14f89a17af312fc918373136e56028e8831700e1933519630cc2fd4179a777030330fde20d34e96f40c78 + languageName: node + linkType: hard + +"is-property@npm:^1.0.2": + version: 1.0.2 + resolution: "is-property@npm:1.0.2" + checksum: 33b661a3690bcc88f7e47bb0a21b9e3187e76a317541ea7ec5e8096d954f441b77a46d8930c785f7fbf4ef8dfd624c25495221e026e50f74c9048fe501773be5 + languageName: node + linkType: hard + +"is-regex@npm:^1.1.4": + version: 1.1.4 + resolution: "is-regex@npm:1.1.4" + dependencies: + call-bind: ^1.0.2 + has-tostringtag: ^1.0.0 + checksum: 362399b33535bc8f386d96c45c9feb04cf7f8b41c182f54174c1a45c9abbbe5e31290bbad09a458583ff6bf3b2048672cdb1881b13289569a7c548370856a652 + languageName: node + linkType: hard + +"is-shared-array-buffer@npm:^1.0.2": + version: 1.0.2 + resolution: "is-shared-array-buffer@npm:1.0.2" + dependencies: + call-bind: ^1.0.2 + checksum: 9508929cf14fdc1afc9d61d723c6e8d34f5e117f0bffda4d97e7a5d88c3a8681f633a74f8e3ad1fe92d5113f9b921dc5ca44356492079612f9a247efbce7032a + languageName: node + linkType: hard + +"is-ssh@npm:^1.4.0": + version: 1.4.0 + resolution: "is-ssh@npm:1.4.0" + dependencies: + protocols: ^2.0.1 + checksum: 75eaa17b538bee24b661fbeb0f140226ac77e904a6039f787bea418431e2162f1f9c4c4ccad3bd169e036cd701cc631406e8c505d9fa7e20164e74b47f86f40f + languageName: node + linkType: hard + +"is-stream@npm:2.0.0, is-stream@npm:^2.0.0": + version: 2.0.0 + resolution: "is-stream@npm:2.0.0" + checksum: 4dc47738e26bc4f1b3be9070b6b9e39631144f204fc6f87db56961220add87c10a999ba26cf81699f9ef9610426f69cb08a4713feff8deb7d8cadac907826935 + languageName: node + linkType: hard + +"is-stream@npm:^1.1.0": + version: 1.1.0 + resolution: "is-stream@npm:1.1.0" + checksum: 063c6bec9d5647aa6d42108d4c59723d2bd4ae42135a2d4db6eadbd49b7ea05b750fd69d279e5c7c45cf9da753ad2c00d8978be354d65aa9f6bb434969c6a2ae + languageName: node + linkType: hard + +"is-string@npm:^1.0.5, is-string@npm:^1.0.7": + version: 1.0.7 + resolution: "is-string@npm:1.0.7" + dependencies: + has-tostringtag: ^1.0.0 + checksum: 323b3d04622f78d45077cf89aab783b2f49d24dc641aa89b5ad1a72114cfeff2585efc8c12ef42466dff32bde93d839ad321b26884cf75e5a7892a938b089989 + languageName: node + linkType: hard + +"is-symbol@npm:^1.0.2, is-symbol@npm:^1.0.3": + version: 1.0.4 + resolution: "is-symbol@npm:1.0.4" + dependencies: + has-symbols: ^1.0.2 + checksum: 92805812ef590738d9de49d677cd17dfd486794773fb6fa0032d16452af46e9b91bb43ffe82c983570f015b37136f4b53b28b8523bfb10b0ece7a66c31a54510 + languageName: node + linkType: hard + +"is-text-path@npm:^1.0.1": + version: 1.0.1 + resolution: "is-text-path@npm:1.0.1" + dependencies: + text-extensions: ^1.0.0 + checksum: fb5d78752c22b3f73a7c9540768f765ffcfa38c9e421e2b9af869565307fa1ae5e3d3a2ba016a43549742856846566d327da406e94a5846ec838a288b1704fd2 + 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 + languageName: node + linkType: hard + +"is-weakref@npm:^1.0.2": + version: 1.0.2 + resolution: "is-weakref@npm:1.0.2" + dependencies: + call-bind: ^1.0.2 + checksum: 95bd9a57cdcb58c63b1c401c60a474b0f45b94719c30f548c891860f051bc2231575c290a6b420c6bc6e7ed99459d424c652bd5bf9a1d5259505dc35b4bf83de + languageName: node + linkType: hard + +"is-whitespace-character@npm:^1.0.0": + version: 1.0.4 + resolution: "is-whitespace-character@npm:1.0.4" + checksum: adab8ad9847ccfcb6f1b7000b8f622881b5ba2a09ce8be2794a6d2b10c3af325b469fc562c9fb889f468eed27be06e227ac609d0aa1e3a59b4dbcc88e2b0418e + languageName: node + linkType: hard + +"is-word-character@npm:^1.0.0": + version: 1.0.4 + resolution: "is-word-character@npm:1.0.4" + checksum: 1821d6c6abe5bc0b3abe3fdc565d66d7c8a74ea4e93bc77b4a47d26e2e2a306d6ab7d92b353b0d2b182869e3ecaa8f4a346c62d0e31d38ebc0ceaf7cae182c3f + languageName: node + linkType: hard + +"is-wsl@npm:^2.2.0": + version: 2.2.0 + resolution: "is-wsl@npm:2.2.0" + dependencies: + is-docker: ^2.0.0 + checksum: 20849846ae414997d290b75e16868e5261e86ff5047f104027026fd61d8b5a9b0b3ade16239f35e1a067b3c7cc02f70183cb661010ed16f4b6c7c93dad1b19d8 + languageName: node + linkType: hard + +"is@npm:^3.3.0": + version: 3.3.0 + resolution: "is@npm:3.3.0" + checksum: 81fad3b40c606984c2d0699207c4c48d2a0d29cc834b274d0b74c172f3eeebdb981301fe0d690ce090a96bf021a8a1f8b1325262ad9870c525e557ac4a559c56 + languageName: node + linkType: hard + +"isarray@npm:~1.0.0": + version: 1.0.0 + resolution: "isarray@npm:1.0.0" + checksum: f032df8e02dce8ec565cf2eb605ea939bdccea528dbcf565cdf92bfa2da9110461159d86a537388ef1acef8815a330642d7885b29010e8f7eac967c9993b65ab + languageName: node + linkType: hard + +"isexe@npm:^2.0.0": + version: 2.0.0 + resolution: "isexe@npm:2.0.0" + checksum: 26bf6c5480dda5161c820c5b5c751ae1e766c587b1f951ea3fcfc973bafb7831ae5b54a31a69bd670220e42e99ec154475025a468eae58ea262f813fdc8d1c62 + languageName: node + linkType: hard + +"isobject@npm:^3.0.1": + version: 3.0.1 + resolution: "isobject@npm:3.0.1" + checksum: db85c4c970ce30693676487cca0e61da2ca34e8d4967c2e1309143ff910c207133a969f9e4ddb2dc6aba670aabce4e0e307146c310350b298e74a31f7d464703 + languageName: node + linkType: hard + +"isomorphic.js@npm:^0.2.4": + version: 0.2.5 + resolution: "isomorphic.js@npm:0.2.5" + checksum: d8d1b083f05f3c337a06628b982ac3ce6db953bbef14a9de8ad49131250c3592f864b73c12030fdc9ef138ce97b76ef55c7d96a849561ac215b1b4b9d301c8e9 + languageName: node + linkType: hard + +"istanbul-lib-coverage@npm:^3.0.0, istanbul-lib-coverage@npm:^3.2.0": + version: 3.2.0 + resolution: "istanbul-lib-coverage@npm:3.2.0" + checksum: a2a545033b9d56da04a8571ed05c8120bf10e9bce01cf8633a3a2b0d1d83dff4ac4fe78d6d5673c27fc29b7f21a41d75f83a36be09f82a61c367b56aa73c1ff9 + languageName: node + linkType: hard + +"istanbul-lib-instrument@npm:^5.0.4, istanbul-lib-instrument@npm:^5.1.0": + version: 5.2.1 + resolution: "istanbul-lib-instrument@npm:5.2.1" + dependencies: + "@babel/core": ^7.12.3 + "@babel/parser": ^7.14.7 + "@istanbuljs/schema": ^0.1.2 + istanbul-lib-coverage: ^3.2.0 + semver: ^6.3.0 + checksum: bf16f1803ba5e51b28bbd49ed955a736488381e09375d830e42ddeb403855b2006f850711d95ad726f2ba3f1ae8e7366de7e51d2b9ac67dc4d80191ef7ddf272 + languageName: node + linkType: hard + +"istanbul-lib-report@npm:^3.0.0": + version: 3.0.0 + resolution: "istanbul-lib-report@npm:3.0.0" + dependencies: + istanbul-lib-coverage: ^3.0.0 + make-dir: ^3.0.0 + supports-color: ^7.1.0 + checksum: 3f29eb3f53c59b987386e07fe772d24c7f58c6897f34c9d7a296f4000de7ae3de9eb95c3de3df91dc65b134c84dee35c54eee572a56243e8907c48064e34ff1b + languageName: node + linkType: hard + +"istanbul-lib-source-maps@npm:^4.0.0": + version: 4.0.1 + resolution: "istanbul-lib-source-maps@npm:4.0.1" + dependencies: + debug: ^4.1.1 + istanbul-lib-coverage: ^3.0.0 + source-map: ^0.6.1 + checksum: 21ad3df45db4b81852b662b8d4161f6446cd250c1ddc70ef96a585e2e85c26ed7cd9c2a396a71533cfb981d1a645508bc9618cae431e55d01a0628e7dec62ef2 + languageName: node + linkType: hard + +"istanbul-reports@npm:^3.1.3": + version: 3.1.5 + resolution: "istanbul-reports@npm:3.1.5" + dependencies: + html-escaper: ^2.0.0 + istanbul-lib-report: ^3.0.0 + checksum: 7867228f83ed39477b188ea07e7ccb9b4f5320b6f73d1db93a0981b7414fa4ef72d3f80c4692c442f90fc250d9406e71d8d7ab65bb615cb334e6292b73192b89 + languageName: node + linkType: hard + +"jackspeak@npm:^2.0.3": + version: 2.2.1 + resolution: "jackspeak@npm:2.2.1" + dependencies: + "@isaacs/cliui": ^8.0.2 + "@pkgjs/parseargs": ^0.11.0 + dependenciesMeta: + "@pkgjs/parseargs": + optional: true + checksum: e29291c0d0f280a063fa18fbd1e891ab8c2d7519fd34052c0ebde38538a15c603140d60c2c7f432375ff7ee4c5f1c10daa8b2ae19a97c3d4affe308c8360c1df + languageName: node + linkType: hard + +"jake@npm:^10.8.5": + version: 10.8.5 + resolution: "jake@npm:10.8.5" + dependencies: + async: ^3.2.3 + chalk: ^4.0.2 + filelist: ^1.0.1 + minimatch: ^3.0.4 + bin: + jake: ./bin/cli.js + checksum: 56c913ecf5a8d74325d0af9bc17a233bad50977438d44864d925bb6c45c946e0fee8c4c1f5fe2225471ef40df5222e943047982717ebff0d624770564d3c46ba + languageName: node + linkType: hard + +"jest-changed-files@npm:^29.5.0": + version: 29.5.0 + resolution: "jest-changed-files@npm:29.5.0" + dependencies: + execa: ^5.0.0 + p-limit: ^3.1.0 + checksum: a67a7cb3c11f8f92bd1b7c79e84f724cbd11a9ad51f3cdadafe3ce7ee3c79ee50dbea128f920f5fddc807e9e4e83f5462143094391feedd959a77dd20ab96cf3 + languageName: node + linkType: hard + +"jest-circus@npm:^29.6.1": + version: 29.6.1 + resolution: "jest-circus@npm:29.6.1" + dependencies: + "@jest/environment": ^29.6.1 + "@jest/expect": ^29.6.1 + "@jest/test-result": ^29.6.1 + "@jest/types": ^29.6.1 + "@types/node": "*" + chalk: ^4.0.0 + co: ^4.6.0 + dedent: ^0.7.0 + is-generator-fn: ^2.0.0 + jest-each: ^29.6.1 + jest-matcher-utils: ^29.6.1 + jest-message-util: ^29.6.1 + jest-runtime: ^29.6.1 + jest-snapshot: ^29.6.1 + jest-util: ^29.6.1 + p-limit: ^3.1.0 + pretty-format: ^29.6.1 + pure-rand: ^6.0.0 + slash: ^3.0.0 + stack-utils: ^2.0.3 + checksum: f3e39a74b601929448df92037f0599978d4d7a4b8f636f64e8020533d2d2b2f669d6729c80c6efed69341ca26753e5061e9787a0acd6c70af2127a94375ebb76 + languageName: node + linkType: hard + +"jest-cli@npm:^29.6.1": + version: 29.6.1 + resolution: "jest-cli@npm:29.6.1" + dependencies: + "@jest/core": ^29.6.1 + "@jest/test-result": ^29.6.1 + "@jest/types": ^29.6.1 + chalk: ^4.0.0 + exit: ^0.1.2 + graceful-fs: ^4.2.9 + import-local: ^3.0.2 + jest-config: ^29.6.1 + jest-util: ^29.6.1 + jest-validate: ^29.6.1 + prompts: ^2.0.1 + yargs: ^17.3.1 + peerDependencies: + node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 + peerDependenciesMeta: + node-notifier: + optional: true + bin: + jest: bin/jest.js + checksum: f5854ffea977b9a12520ea71f8d0cc8a626cbb93d7e1e6eea18a2a1f2b25f70f1b6b08a89f11b4dc7dd36a1776a9ac2cf8ec5c7998086f913ee690c06c07c949 + languageName: node + linkType: hard + +"jest-config@npm:^29.6.1": + version: 29.6.1 + resolution: "jest-config@npm:29.6.1" + dependencies: + "@babel/core": ^7.11.6 + "@jest/test-sequencer": ^29.6.1 + "@jest/types": ^29.6.1 + babel-jest: ^29.6.1 + chalk: ^4.0.0 + ci-info: ^3.2.0 + deepmerge: ^4.2.2 + glob: ^7.1.3 + graceful-fs: ^4.2.9 + jest-circus: ^29.6.1 + jest-environment-node: ^29.6.1 + jest-get-type: ^29.4.3 + jest-regex-util: ^29.4.3 + jest-resolve: ^29.6.1 + jest-runner: ^29.6.1 + jest-util: ^29.6.1 + jest-validate: ^29.6.1 + micromatch: ^4.0.4 + parse-json: ^5.2.0 + pretty-format: ^29.6.1 + slash: ^3.0.0 + strip-json-comments: ^3.1.1 + peerDependencies: + "@types/node": "*" + ts-node: ">=9.0.0" + peerDependenciesMeta: + "@types/node": + optional: true + ts-node: + optional: true + checksum: 3a30afeb28cc5658ef9cd95f2551ab8a29641bb6d377eb239cba8e7522eb4611c9a98cdcf173d87f5ad7b5e1ad242c3cd5434a260107bd3c7e8305d05023e05c + languageName: node + linkType: hard + +"jest-diff@npm:^29.6.1": + version: 29.6.1 + resolution: "jest-diff@npm:29.6.1" + dependencies: + chalk: ^4.0.0 + diff-sequences: ^29.4.3 + jest-get-type: ^29.4.3 + pretty-format: ^29.6.1 + checksum: c6350178ca27d92c7fd879790fb2525470c1ff1c5d29b1834a240fecd26c6904fb470ebddb98dc96dd85389c56c3b50e6965a1f5203e9236d213886ed9806219 + languageName: node + linkType: hard + +"jest-docblock@npm:^29.4.3": + version: 29.4.3 + resolution: "jest-docblock@npm:29.4.3" + dependencies: + detect-newline: ^3.0.0 + checksum: e0e9df1485bb8926e5b33478cdf84b3387d9caf3658e7dc1eaa6dc34cb93dea0d2d74797f6e940f0233a88f3dadd60957f2288eb8f95506361f85b84bf8661df + languageName: node + linkType: hard + +"jest-each@npm:^29.6.1": + version: 29.6.1 + resolution: "jest-each@npm:29.6.1" + dependencies: + "@jest/types": ^29.6.1 + chalk: ^4.0.0 + jest-get-type: ^29.4.3 + jest-util: ^29.6.1 + pretty-format: ^29.6.1 + checksum: 9d2ea7ed5326ee8c22523b22c66c85fe73754ea39f9b389881956508ee441392c61072a5fbf673e39beddd31d011bb94acae3edc77053ba4f9aa5c060114a5c8 + languageName: node + linkType: hard + +"jest-environment-jsdom@npm:^29.3.0": + version: 29.5.0 + resolution: "jest-environment-jsdom@npm:29.5.0" + dependencies: + "@jest/environment": ^29.5.0 + "@jest/fake-timers": ^29.5.0 + "@jest/types": ^29.5.0 + "@types/jsdom": ^20.0.0 + "@types/node": "*" + jest-mock: ^29.5.0 + jest-util: ^29.5.0 + jsdom: ^20.0.0 + peerDependencies: + canvas: ^2.5.0 + peerDependenciesMeta: + canvas: + optional: true + checksum: 3df7fc85275711f20b483ac8cd8c04500704ed0f69791eb55c574b38f5a39470f03d775cf20c1025bc1884916ac0573aa2fa4db1bb74225bc7fdd95ba97ad0da + languageName: node + linkType: hard + +"jest-environment-node@npm:^29.6.1": + version: 29.6.1 + resolution: "jest-environment-node@npm:29.6.1" + dependencies: + "@jest/environment": ^29.6.1 + "@jest/fake-timers": ^29.6.1 + "@jest/types": ^29.6.1 + "@types/node": "*" + jest-mock: ^29.6.1 + jest-util: ^29.6.1 + checksum: a50287e1ff29d131646bd09acc3222ac6ea0ad61e86bf73851d318ef2be0633a421b8558c4a15ddc67e0ffcfc32da7f6a0d8a2ddbfa85453837899dec88d256c + languageName: node + linkType: hard + +"jest-get-type@npm:^29.4.3": + version: 29.4.3 + resolution: "jest-get-type@npm:29.4.3" + checksum: 6ac7f2dde1c65e292e4355b6c63b3a4897d7e92cb4c8afcf6d397f2682f8080e094c8b0b68205a74d269882ec06bf696a9de6cd3e1b7333531e5ed7b112605ce + languageName: node + linkType: hard + +"jest-haste-map@npm:^29.6.1": + version: 29.6.1 + resolution: "jest-haste-map@npm:29.6.1" + dependencies: + "@jest/types": ^29.6.1 + "@types/graceful-fs": ^4.1.3 + "@types/node": "*" + anymatch: ^3.0.3 + fb-watchman: ^2.0.0 + fsevents: ^2.3.2 + graceful-fs: ^4.2.9 + jest-regex-util: ^29.4.3 + jest-util: ^29.6.1 + jest-worker: ^29.6.1 + micromatch: ^4.0.4 + walker: ^1.0.8 + dependenciesMeta: + fsevents: + optional: true + checksum: 7c74d5a0f6aafa9f4e60fae7949d4774770c0243fb529c24f2f4c81229db479fa318dc8b81e8d226865aef1d600af10bd8404dd208e802318434b46f75d5d869 + languageName: node + linkType: hard + +"jest-junit@npm:^15.0.0": + version: 15.0.0 + resolution: "jest-junit@npm:15.0.0" + dependencies: + mkdirp: ^1.0.4 + strip-ansi: ^6.0.1 + uuid: ^8.3.2 + xml: ^1.0.1 + checksum: e8fe4d2f2ab843383ac41820a6fe495739d154ec435cd44ba590b44ec7fd62095676f3eef13f98392f81d4a3727ea58b4f4fad231fe367ac31243952b9ad716f + languageName: node + linkType: hard + +"jest-leak-detector@npm:^29.6.1": + version: 29.6.1 + resolution: "jest-leak-detector@npm:29.6.1" + dependencies: + jest-get-type: ^29.4.3 + pretty-format: ^29.6.1 + checksum: 5122d40c248effaede4c9ee3a99046a3f30088fef7bfc4af534678b432455161399357af46deb6423de7e05c6597920d6ee8cd570e26048886a90d541334f8c8 + languageName: node + linkType: hard + +"jest-matcher-utils@npm:^29.6.1": + version: 29.6.1 + resolution: "jest-matcher-utils@npm:29.6.1" + dependencies: + chalk: ^4.0.0 + jest-diff: ^29.6.1 + jest-get-type: ^29.4.3 + pretty-format: ^29.6.1 + checksum: d2efa6aed6e4820758b732b9fefd315c7fa4508ee690da656e1c5ac4c1a0f4cee5b04c9719ee1fda9aeb883b4209186c145089ced521e715b9fa70afdfa4a9c6 + languageName: node + linkType: hard + +"jest-message-util@npm:^29.6.1": + version: 29.6.1 + resolution: "jest-message-util@npm:29.6.1" + dependencies: + "@babel/code-frame": ^7.12.13 + "@jest/types": ^29.6.1 + "@types/stack-utils": ^2.0.0 + chalk: ^4.0.0 + graceful-fs: ^4.2.9 + micromatch: ^4.0.4 + pretty-format: ^29.6.1 + slash: ^3.0.0 + stack-utils: ^2.0.3 + checksum: 3e7cb2ff087fe72255292e151d24e4fbb4cd6134885c0a67a4b302f233fe4110bf7580b176f427f05ad7550eb878ed94237209785d09d659a7d171ffa59c068f + languageName: node + linkType: hard + +"jest-mock@npm:^29.5.0, jest-mock@npm:^29.6.1": + version: 29.6.1 + resolution: "jest-mock@npm:29.6.1" + dependencies: + "@jest/types": ^29.6.1 + "@types/node": "*" + jest-util: ^29.6.1 + checksum: 5e902f1a7eba1eb1a64eb6c19947fe1316834359d9869d0e2644d8979b9cad0465885dc4c9909c471888cddeea835c938cec6263d386d3d1aad720fc74e52ea1 + languageName: node + linkType: hard + +"jest-pnp-resolver@npm:^1.2.2": + version: 1.2.3 + resolution: "jest-pnp-resolver@npm:1.2.3" + peerDependencies: + jest-resolve: "*" + peerDependenciesMeta: + jest-resolve: + optional: true + checksum: db1a8ab2cb97ca19c01b1cfa9a9c8c69a143fde833c14df1fab0766f411b1148ff0df878adea09007ac6a2085ec116ba9a996a6ad104b1e58c20adbf88eed9b2 + languageName: node + linkType: hard + +"jest-regex-util@npm:^29.4.3": + version: 29.4.3 + resolution: "jest-regex-util@npm:29.4.3" + checksum: 96fc7fc28cd4dd73a63c13a526202c4bd8b351d4e5b68b1a2a2c88da3308c2a16e26feaa593083eb0bac38cca1aa9dd05025412e7de013ba963fb8e66af22b8a + languageName: node + linkType: hard + +"jest-resolve-dependencies@npm:^29.6.1": + version: 29.6.1 + resolution: "jest-resolve-dependencies@npm:29.6.1" + dependencies: + jest-regex-util: ^29.4.3 + jest-snapshot: ^29.6.1 + checksum: cee0a0fe53fd4531492a526b6ccd32377baad1eff6e6c124f04e9dc920219fd23fd39be88bb9551ee68d5fe92a3af627b423c9bc65a2aa0ac8a223c0e74dbbbb + languageName: node + linkType: hard + +"jest-resolve@npm:^29.6.1": + version: 29.6.1 + resolution: "jest-resolve@npm:29.6.1" + dependencies: + chalk: ^4.0.0 + graceful-fs: ^4.2.9 + jest-haste-map: ^29.6.1 + jest-pnp-resolver: ^1.2.2 + jest-util: ^29.6.1 + jest-validate: ^29.6.1 + resolve: ^1.20.0 + resolve.exports: ^2.0.0 + slash: ^3.0.0 + checksum: 9ce979a0f4a751bea58caea76415112df2a3f4d58e294019872244728aadd001f0ec20c873a3c805dd8f7c762143b3c14d00f87d124ed87c9981fbf8723090ef + languageName: node + linkType: hard + +"jest-runner@npm:^29.6.1": + version: 29.6.1 + resolution: "jest-runner@npm:29.6.1" + dependencies: + "@jest/console": ^29.6.1 + "@jest/environment": ^29.6.1 + "@jest/test-result": ^29.6.1 + "@jest/transform": ^29.6.1 + "@jest/types": ^29.6.1 + "@types/node": "*" + chalk: ^4.0.0 + emittery: ^0.13.1 + graceful-fs: ^4.2.9 + jest-docblock: ^29.4.3 + jest-environment-node: ^29.6.1 + jest-haste-map: ^29.6.1 + jest-leak-detector: ^29.6.1 + jest-message-util: ^29.6.1 + jest-resolve: ^29.6.1 + jest-runtime: ^29.6.1 + jest-util: ^29.6.1 + jest-watcher: ^29.6.1 + jest-worker: ^29.6.1 + p-limit: ^3.1.0 + source-map-support: 0.5.13 + checksum: 0e4dbda26669ae31fee32f8a62b3119bba510f2d17a098d6157b48a73ed2fc9842405bf893f3045c12b3632c7c0e3399fb22684b18ab5566aff4905b26c79a9a + languageName: node + linkType: hard + +"jest-runtime@npm:^29.6.1": + version: 29.6.1 + resolution: "jest-runtime@npm:29.6.1" + dependencies: + "@jest/environment": ^29.6.1 + "@jest/fake-timers": ^29.6.1 + "@jest/globals": ^29.6.1 + "@jest/source-map": ^29.6.0 + "@jest/test-result": ^29.6.1 + "@jest/transform": ^29.6.1 + "@jest/types": ^29.6.1 + "@types/node": "*" + chalk: ^4.0.0 + cjs-module-lexer: ^1.0.0 + collect-v8-coverage: ^1.0.0 + glob: ^7.1.3 + graceful-fs: ^4.2.9 + jest-haste-map: ^29.6.1 + jest-message-util: ^29.6.1 + jest-mock: ^29.6.1 + jest-regex-util: ^29.4.3 + jest-resolve: ^29.6.1 + jest-snapshot: ^29.6.1 + jest-util: ^29.6.1 + slash: ^3.0.0 + strip-bom: ^4.0.0 + checksum: 7c360c9694467d996f3d6d914fefa0e7bda554adda8c2b9fba31546dba663d71a64eda103ff68120a2422f3c16db8f0bc2c445923fe8fb934f37e53ef74fb429 + languageName: node + linkType: hard + +"jest-snapshot@npm:^29.6.1": + version: 29.6.1 + resolution: "jest-snapshot@npm:29.6.1" + dependencies: + "@babel/core": ^7.11.6 + "@babel/generator": ^7.7.2 + "@babel/plugin-syntax-jsx": ^7.7.2 + "@babel/plugin-syntax-typescript": ^7.7.2 + "@babel/types": ^7.3.3 + "@jest/expect-utils": ^29.6.1 + "@jest/transform": ^29.6.1 + "@jest/types": ^29.6.1 + "@types/prettier": ^2.1.5 + babel-preset-current-node-syntax: ^1.0.0 + chalk: ^4.0.0 + expect: ^29.6.1 + graceful-fs: ^4.2.9 + jest-diff: ^29.6.1 + jest-get-type: ^29.4.3 + jest-matcher-utils: ^29.6.1 + jest-message-util: ^29.6.1 + jest-util: ^29.6.1 + natural-compare: ^1.4.0 + pretty-format: ^29.6.1 + semver: ^7.5.3 + checksum: e8f69d1fd4a29d354d4dca9eb2a22674b300f8ef509e4f1e75337c880414a00d2bdc9d3849a6855dbb5a76bfbe74603f33435378a3877e69f0838e4cc2244350 + languageName: node + linkType: hard + +"jest-util@npm:^29.0.0, jest-util@npm:^29.5.0, jest-util@npm:^29.6.1": + version: 29.6.1 + resolution: "jest-util@npm:29.6.1" + dependencies: + "@jest/types": ^29.6.1 + "@types/node": "*" + chalk: ^4.0.0 + ci-info: ^3.2.0 + graceful-fs: ^4.2.9 + picomatch: ^2.2.3 + checksum: fc553556c1350c443449cadaba5fb9d604628e8b5ceb6ceaf4e7e08975b24277d0a14bf2e0f956024e03c23e556fcb074659423422a06fbedf2ab52978697ac7 + languageName: node + linkType: hard + +"jest-validate@npm:^29.6.1": + version: 29.6.1 + resolution: "jest-validate@npm:29.6.1" + dependencies: + "@jest/types": ^29.6.1 + camelcase: ^6.2.0 + chalk: ^4.0.0 + jest-get-type: ^29.4.3 + leven: ^3.1.0 + pretty-format: ^29.6.1 + checksum: d2491f3f33d9bbc2dcaaa6acbff26f257b59c5eeceb65a52a9c1cec2f679b836ec2a4658b7004c0ef9d90cd0d9bd664e41d5ed6900f932bea742dd8e6b85e7f1 + languageName: node + linkType: hard + +"jest-watcher@npm:^29.6.1": + version: 29.6.1 + resolution: "jest-watcher@npm:29.6.1" + dependencies: + "@jest/test-result": ^29.6.1 + "@jest/types": ^29.6.1 + "@types/node": "*" + ansi-escapes: ^4.2.1 + chalk: ^4.0.0 + emittery: ^0.13.1 + jest-util: ^29.6.1 + string-length: ^4.0.1 + checksum: 69bd5a602284fdce6eba5486c5c57aca6b511d91cb0907c34c104d6dd931e18ce67baa7f8e280fa473e5d81ea3e7b9e7d94f712c37ab0b3b8cc2aec30676955d + languageName: node + linkType: hard + +"jest-worker@npm:^27.4.5": + version: 27.5.1 + resolution: "jest-worker@npm:27.5.1" + dependencies: + "@types/node": "*" + merge-stream: ^2.0.0 + supports-color: ^8.0.0 + checksum: 98cd68b696781caed61c983a3ee30bf880b5bd021c01d98f47b143d4362b85d0737f8523761e2713d45e18b4f9a2b98af1eaee77afade4111bb65c77d6f7c980 + languageName: node + linkType: hard + +"jest-worker@npm:^29.6.1": + version: 29.6.1 + resolution: "jest-worker@npm:29.6.1" + dependencies: + "@types/node": "*" + jest-util: ^29.6.1 + merge-stream: ^2.0.0 + supports-color: ^8.0.0 + checksum: 0af309ea4db17c4c47e84a9246f907960a15577683c005fdeafc8f3c06bc455136f95a6f28fa2a3e924b767eb4dacd9b40915a7707305f88586f099af3ac27a8 + languageName: node + linkType: hard + +"jest@npm:^29.0.0": + version: 29.6.1 + resolution: "jest@npm:29.6.1" + dependencies: + "@jest/core": ^29.6.1 + "@jest/types": ^29.6.1 + import-local: ^3.0.2 + jest-cli: ^29.6.1 + peerDependencies: + node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 + peerDependenciesMeta: + node-notifier: + optional: true + bin: + jest: bin/jest.js + checksum: 7b8c0ca72f483e00ec19dcf9549f9a9af8ae468ab62925b148d714b58eb52d5fea9a082625193bc833d2d9b64cf65a11f3d37857636c5551af05c10aec4ce71b + languageName: node + linkType: hard + +"js-sdsl@npm:^4.1.4": + version: 4.2.0 + resolution: "js-sdsl@npm:4.2.0" + checksum: 2cd0885f7212afb355929d72ca105cb37de7e95ad6031e6a32619eaefa46735a7d0fb682641a0ba666e1519cb138fe76abc1eea8a34e224140c9d94c995171f1 + 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: 8a95213a5a77deb6cbe94d86340e8d9ace2b93bc367790b260101d2f36a2eaf4e4e22d9fa9cf459b38af3a32fb4190e638024cf82ec95ef708680e405ea7cc78 + languageName: node + linkType: hard + +"js-yaml@npm:4.1.0, js-yaml@npm:^4.1.0": + version: 4.1.0 + resolution: "js-yaml@npm:4.1.0" + dependencies: + argparse: ^2.0.1 + bin: + js-yaml: bin/js-yaml.js + checksum: c7830dfd456c3ef2c6e355cc5a92e6700ceafa1d14bba54497b34a99f0376cecbb3e9ac14d3e5849b426d5a5140709a66237a8c991c675431271c4ce5504151a + languageName: node + linkType: hard + +"js-yaml@npm:^3.10.0, js-yaml@npm:^3.12.1, js-yaml@npm:^3.13.1, js-yaml@npm:^3.14.0": + version: 3.14.1 + resolution: "js-yaml@npm:3.14.1" + dependencies: + argparse: ^1.0.7 + esprima: ^4.0.0 + bin: + js-yaml: bin/js-yaml.js + checksum: bef146085f472d44dee30ec34e5cf36bf89164f5d585435a3d3da89e52622dff0b188a580e4ad091c3341889e14cb88cac6e4deb16dc5b1e9623bb0601fc255c + languageName: node + linkType: hard + +"jsdom@npm:^20.0.0": + version: 20.0.3 + resolution: "jsdom@npm:20.0.3" + dependencies: + abab: ^2.0.6 + acorn: ^8.8.1 + acorn-globals: ^7.0.0 + cssom: ^0.5.0 + cssstyle: ^2.3.0 + data-urls: ^3.0.2 + decimal.js: ^10.4.2 + domexception: ^4.0.0 + escodegen: ^2.0.0 + form-data: ^4.0.0 + html-encoding-sniffer: ^3.0.0 + http-proxy-agent: ^5.0.0 + https-proxy-agent: ^5.0.1 + is-potential-custom-element-name: ^1.0.1 + nwsapi: ^2.2.2 + parse5: ^7.1.1 + saxes: ^6.0.0 + symbol-tree: ^3.2.4 + tough-cookie: ^4.1.2 + w3c-xmlserializer: ^4.0.0 + webidl-conversions: ^7.0.0 + whatwg-encoding: ^2.0.0 + whatwg-mimetype: ^3.0.0 + whatwg-url: ^11.0.0 + ws: ^8.11.0 + xml-name-validator: ^4.0.0 + peerDependencies: + canvas: ^2.5.0 + peerDependenciesMeta: + canvas: + optional: true + checksum: 6e2ae21db397133a061b270c26d2dbc0b9051733ea3b896a7ece78d79f475ff0974f766a413c1198a79c793159119169f2335ddb23150348fbfdcfa6f3105536 + languageName: node + linkType: hard + +"jsesc@npm:^2.5.1": + version: 2.5.2 + resolution: "jsesc@npm:2.5.2" + bin: + jsesc: bin/jsesc + checksum: 4dc190771129e12023f729ce20e1e0bfceac84d73a85bc3119f7f938843fe25a4aeccb54b6494dce26fcf263d815f5f31acdefac7cc9329efb8422a4f4d9fa9d + languageName: node + linkType: hard + +"jsesc@npm:~0.5.0": + version: 0.5.0 + resolution: "jsesc@npm:0.5.0" + bin: + jsesc: bin/jsesc + checksum: b8b44cbfc92f198ad972fba706ee6a1dfa7485321ee8c0b25f5cedd538dcb20cde3197de16a7265430fce8277a12db066219369e3d51055038946039f6e20e17 + languageName: node + linkType: hard + +"json-bigint@npm:^1.0.0": + version: 1.0.0 + resolution: "json-bigint@npm:1.0.0" + dependencies: + bignumber.js: ^9.0.0 + checksum: c67bb93ccb3c291e60eb4b62931403e378906aab113ec1c2a8dd0f9a7f065ad6fd9713d627b732abefae2e244ac9ce1721c7a3142b2979532f12b258634ce6f6 + languageName: node + linkType: hard + +"json-parse-better-errors@npm:^1.0.1": + version: 1.0.2 + resolution: "json-parse-better-errors@npm:1.0.2" + checksum: ff2b5ba2a70e88fd97a3cb28c1840144c5ce8fae9cbeeddba15afa333a5c407cf0e42300cd0a2885dbb055227fe68d405070faad941beeffbfde9cf3b2c78c5d + 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: 798ed4cf3354a2d9ccd78e86d2169515a0097a5c133337807cdf7f1fc32e1391d207ccfc276518cc1d7d8d4db93288b8a50ba4293d212ad1336e52a8ec0a941f + languageName: node + linkType: hard + +"json-schema-compare@npm:^0.2.2": + version: 0.2.2 + resolution: "json-schema-compare@npm:0.2.2" + dependencies: + lodash: ^4.17.4 + checksum: dd6f2173857c8e3b77d6ebdfa05bd505bba5b08709ab46b532722f5d1c33b5fee1fc8f3c97d0c0d011db25f9f3b0baf7ab783bb5f55c32abd9f1201760e43c2c + languageName: node + linkType: hard + +"json-schema-merge-allof@npm:^0.8.1": + version: 0.8.1 + resolution: "json-schema-merge-allof@npm:0.8.1" + dependencies: + compute-lcm: ^1.1.2 + json-schema-compare: ^0.2.2 + lodash: ^4.17.20 + checksum: 82700f6ac77351959138d6b153d77375a8c29cf48d907241b85c8292dd77aabd8cb816400f2b0d17062c4ccc8893832ec4f664ab9c814927ef502e7a595ea873 + languageName: node + linkType: hard + +"json-schema-ref-parser@npm:^6.1.0": + version: 6.1.0 + resolution: "json-schema-ref-parser@npm:6.1.0" + dependencies: + call-me-maybe: ^1.0.1 + js-yaml: ^3.12.1 + ono: ^4.0.11 + checksum: 03944fcb5b3d73181b5c90ec06a8b0fd1f744f366b6f956e1df9d42117172427b7476ff82c3def0e932272dfdfec77c14e024ca67a5dfc36175eb272e87421dd + languageName: node + linkType: hard + +"json-schema-to-typescript@npm:^8.0.0": + version: 8.2.0 + resolution: "json-schema-to-typescript@npm:8.2.0" + dependencies: + "@types/is-glob": ^4.0.1 + "@types/json-schema": ^7.0.3 + "@types/mkdirp": ^0.5.2 + "@types/prettier": ^1.16.1 + cli-color: ^1.4.0 + glob: ^7.1.4 + is-glob: ^4.0.1 + json-schema-ref-parser: ^6.1.0 + json-stringify-safe: ^5.0.1 + lodash: ^4.17.11 + minimist: ^1.2.0 + mkdirp: ^0.5.1 + mz: ^2.7.0 + prettier: ^1.19.1 + stdin: 0.0.1 + bin: + json2ts: dist/src/cli.js + checksum: 4327a6983be0eccc1dc1823c185c10b6287425d1a283b96ea88f5d6d61c71a031343bd6c5d5e7d30c0ba1c0b413655978a766a744d04707ce68417e0e2ccd2c0 + 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 + languageName: node + linkType: hard + +"json-schema-traverse@npm:^1.0.0": + version: 1.0.0 + resolution: "json-schema-traverse@npm:1.0.0" + checksum: 02f2f466cdb0362558b2f1fd5e15cce82ef55d60cd7f8fa828cf35ba74330f8d767fcae5c5c2adb7851fa811766c694b9405810879bc4e1ddd78a7c0e03658ad + 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: cff44156ddce9c67c44386ad5cddf91925fe06b1d217f2da9c4910d01f358c6e3989c4d5a02683c7a5667f9727ff05831f7aa8ae66c8ff691c556f0884d49215 + languageName: node + linkType: hard + +"json-stringify-nice@npm:^1.1.4": + version: 1.1.4 + resolution: "json-stringify-nice@npm:1.1.4" + checksum: 6ddf781148b46857ab04e97f47be05f14c4304b86eb5478369edbeacd070c21c697269964b982fc977e8989d4c59091103b1d9dc291aba40096d6cbb9a392b72 + languageName: node + linkType: hard + +"json-stringify-safe@npm:^5.0.1": + version: 5.0.1 + resolution: "json-stringify-safe@npm:5.0.1" + checksum: 48ec0adad5280b8a96bb93f4563aa1667fd7a36334f79149abd42446d0989f2ddc58274b479f4819f1f00617957e6344c886c55d05a4e15ebb4ab931e4a6a8ee + languageName: node + linkType: hard + +"json5@npm:^1.0.1": + version: 1.0.2 + resolution: "json5@npm:1.0.2" + dependencies: + minimist: ^1.2.0 + bin: + json5: lib/cli.js + checksum: 866458a8c58a95a49bef3adba929c625e82532bcff1fe93f01d29cb02cac7c3fe1f4b79951b7792c2da9de0b32871a8401a6e3c5b36778ad852bf5b8a61165d7 + languageName: node + linkType: hard + +"json5@npm:^2.1.2, json5@npm:^2.2.2, json5@npm:^2.2.3": + version: 2.2.3 + resolution: "json5@npm:2.2.3" + bin: + json5: lib/cli.js + checksum: 2a7436a93393830bce797d4626275152e37e877b265e94ca69c99e3d20c2b9dab021279146a39cdb700e71b2dd32a4cebd1514cd57cee102b1af906ce5040349 + languageName: node + linkType: hard + +"jsonc-parser@npm:3.2.0, jsonc-parser@npm:^3.0.0": + version: 3.2.0 + resolution: "jsonc-parser@npm:3.2.0" + checksum: 946dd9a5f326b745aa326d48a7257e3f4a4b62c5e98ec8e49fa2bdd8d96cef7e6febf1399f5c7016114fd1f68a1c62c6138826d5d90bc650448e3cf0951c53c7 + languageName: node + linkType: hard + +"jsonc-parser@npm:^1.0.0": + version: 1.0.3 + resolution: "jsonc-parser@npm:1.0.3" + checksum: 9f922acb87995e5efb72b0ac0e9589b56f8b4439b0ac4b21c92bfd6d5fc52fe1b3bdc034866a40444b1d2ae17e27046c5a173ff092393865a21e60b02b7e6362 + languageName: node + linkType: hard + +"jsonc-parser@npm:^2.3.1": + version: 2.3.1 + resolution: "jsonc-parser@npm:2.3.1" + checksum: de37640bd1d0dcc5b2e19f2514b3c2e05832ec6fdb86da65102509524d3eef0f2cc49bd471a0b28b8af2f8069bbca8396a9bd5cad4ae04001e1893e47df265eb + languageName: node + linkType: hard + +"jsonfile@npm:^6.0.1": + version: 6.1.0 + resolution: "jsonfile@npm:6.1.0" + dependencies: + graceful-fs: ^4.1.6 + universalify: ^2.0.0 + dependenciesMeta: + graceful-fs: + optional: true + checksum: 7af3b8e1ac8fe7f1eccc6263c6ca14e1966fcbc74b618d3c78a0a2075579487547b94f72b7a1114e844a1e15bb00d440e5d1720bfc4612d790a6f285d5ea8354 + languageName: node + linkType: hard + +"jsonparse@npm:^1.2.0, jsonparse@npm:^1.3.1": + version: 1.3.1 + resolution: "jsonparse@npm:1.3.1" + checksum: 6514a7be4674ebf407afca0eda3ba284b69b07f9958a8d3113ef1005f7ec610860c312be067e450c569aab8b89635e332cee3696789c750692bb60daba627f4d + languageName: node + linkType: hard + +"jsonpointer@npm:^5.0.1": + version: 5.0.1 + resolution: "jsonpointer@npm:5.0.1" + checksum: 0b40f712900ad0c846681ea2db23b6684b9d5eedf55807b4708c656f5894b63507d0e28ae10aa1bddbea551241035afe62b6df0800fc94c2e2806a7f3adecd7c + languageName: node + linkType: hard + +"jsx-ast-utils@npm:^2.4.1 || ^3.0.0": + version: 3.2.1 + resolution: "jsx-ast-utils@npm:3.2.1" + dependencies: + array-includes: ^3.1.3 + object.assign: ^4.1.2 + checksum: dcee22e6382ee5a6bd4187333a44b6420d9d079838119a07055d6e88d137dd0afadc97a2246152b0b65006bd5fc393112dc0cef01956a01a66c1713913953c66 + languageName: node + linkType: hard + +"just-diff-apply@npm:^5.2.0": + version: 5.4.1 + resolution: "just-diff-apply@npm:5.4.1" + checksum: e324ccfdb5df174e3ec30751f6b7e8d84a75a1c559c7b294ccba79c94390b424cc84714cb2dc72cef41e0ba0cf5ecce33e5d6dedd14f5700285de38892d81cce + languageName: node + linkType: hard + +"just-diff@npm:^5.0.1": + version: 5.2.0 + resolution: "just-diff@npm:5.2.0" + checksum: 5527fb6d28a446185250fba501ad857370c049bac7aa5a34c9ec82a45e1380af1a96137be7df2f87252d9f75ef67be41d4c0267d481ed0235b2ceb3ee1f5f75d + languageName: node + linkType: hard + +"jwa@npm:^2.0.0": + version: 2.0.0 + resolution: "jwa@npm:2.0.0" + dependencies: + buffer-equal-constant-time: 1.0.1 + ecdsa-sig-formatter: 1.0.11 + safe-buffer: ^5.0.1 + checksum: 8f00b71ad5fe94cb55006d0d19202f8f56889109caada2f7eeb63ca81755769ce87f4f48101967f398462e3b8ae4faebfbd5a0269cb755dead5d63c77ba4d2f1 + languageName: node + linkType: hard + +"jws@npm:^4.0.0": + version: 4.0.0 + resolution: "jws@npm:4.0.0" + dependencies: + jwa: ^2.0.0 + safe-buffer: ^5.0.1 + checksum: d68d07aa6d1b8cb35c363a9bd2b48f15064d342a5d9dc18a250dbbce8dc06bd7e4792516c50baa16b8d14f61167c19e851fd7f66b59ecc68b7f6a013759765f7 + languageName: node + linkType: hard + +"kind-of@npm:^6.0.2, kind-of@npm:^6.0.3": + version: 6.0.3 + resolution: "kind-of@npm:6.0.3" + checksum: 3ab01e7b1d440b22fe4c31f23d8d38b4d9b91d9f291df683476576493d5dfd2e03848a8b05813dd0c3f0e835bc63f433007ddeceb71f05cb25c45ae1b19c6d3b + languageName: node + linkType: hard + +"kleur@npm:^3.0.3": + version: 3.0.3 + resolution: "kleur@npm:3.0.3" + checksum: df82cd1e172f957bae9c536286265a5cdbd5eeca487cb0a3b2a7b41ef959fc61f8e7c0e9aeea9c114ccf2c166b6a8dd45a46fd619c1c569d210ecd2765ad5169 + languageName: node + linkType: hard + +"lerna@npm:~6.5.0": + version: 6.5.1 + resolution: "lerna@npm:6.5.1" + dependencies: + "@lerna/child-process": 6.5.1 + "@lerna/create": 6.5.1 + "@npmcli/arborist": 5.3.0 + "@npmcli/run-script": 4.1.7 + "@nrwl/devkit": ">=15.5.2 < 16" + "@octokit/plugin-enterprise-rest": 6.0.1 + "@octokit/rest": 19.0.3 + byte-size: 7.0.0 + chalk: 4.1.0 + clone-deep: 4.0.1 + cmd-shim: 5.0.0 + columnify: 1.6.0 + config-chain: 1.1.12 + conventional-changelog-angular: 5.0.12 + conventional-changelog-core: 4.2.4 + conventional-recommended-bump: 6.1.0 + cosmiconfig: 7.0.0 + dedent: 0.7.0 + dot-prop: 6.0.1 + envinfo: ^7.7.4 + execa: 5.0.0 + fs-extra: 9.1.0 + get-port: 5.1.1 + get-stream: 6.0.0 + git-url-parse: 13.1.0 + glob-parent: 5.1.2 + globby: 11.1.0 + graceful-fs: 4.2.10 + has-unicode: 2.0.1 + import-local: ^3.0.2 + init-package-json: 3.0.2 + inquirer: ^8.2.4 + is-ci: 2.0.0 + is-stream: 2.0.0 + js-yaml: ^4.1.0 + libnpmaccess: 6.0.3 + libnpmpublish: 6.0.4 + load-json-file: 6.2.0 + make-dir: 3.1.0 + minimatch: 3.0.5 + multimatch: 5.0.0 + node-fetch: 2.6.7 + npm-package-arg: 8.1.1 + npm-packlist: 5.1.1 + npm-registry-fetch: 13.3.0 + npmlog: ^6.0.2 + nx: ">=15.5.2 < 16" + p-map: 4.0.0 + p-map-series: 2.1.0 + p-pipe: 3.1.0 + p-queue: 6.6.2 + p-reduce: 2.1.0 + p-waterfall: 2.1.1 + pacote: 13.6.1 + path-exists: 4.0.0 + pify: 5.0.0 + read-cmd-shim: 3.0.0 + read-package-json: 5.0.1 + resolve-from: 5.0.0 + rimraf: ^3.0.2 + semver: 7.3.4 + signal-exit: 3.0.7 + slash: 3.0.0 + ssri: 9.0.1 + strong-log-transformer: 2.1.0 + tar: 6.1.11 + temp-dir: 1.0.0 + typescript: ^3 || ^4 + upath: ^2.0.1 + uuid: 8.3.2 + validate-npm-package-license: 3.0.4 + validate-npm-package-name: 4.0.0 + write-file-atomic: 4.0.1 + write-pkg: 4.0.0 + yargs: 16.2.0 + yargs-parser: 20.2.4 + bin: + lerna: dist/cli.js + checksum: f0f3ad0cd329ea34a0f9beb3b74adf3757af9b8b23b914efc987cf0aa5afa86da5284937da4879b62c0db76cbf3c6b575381dc32b71c760d2d6152c98d0b976b + languageName: node + linkType: hard + +"leven@npm:^3.1.0": + version: 3.1.0 + resolution: "leven@npm:3.1.0" + checksum: 638401d534585261b6003db9d99afd244dfe82d75ddb6db5c0df412842d5ab30b2ef18de471aaec70fe69a46f17b4ae3c7f01d8a4e6580ef7adb9f4273ad1e55 + languageName: node + linkType: hard + +"levn@npm:^0.4.1": + version: 0.4.1 + resolution: "levn@npm:0.4.1" + dependencies: + prelude-ls: ^1.2.1 + type-check: ~0.4.0 + checksum: 12c5021c859bd0f5248561bf139121f0358285ec545ebf48bb3d346820d5c61a4309535c7f387ed7d84361cf821e124ce346c6b7cef8ee09a67c1473b46d0fc4 + languageName: node + linkType: hard + +"levn@npm:~0.3.0": + version: 0.3.0 + resolution: "levn@npm:0.3.0" + dependencies: + prelude-ls: ~1.1.2 + type-check: ~0.3.2 + checksum: 0d084a524231a8246bb10fec48cdbb35282099f6954838604f3c7fc66f2e16fa66fd9cc2f3f20a541a113c4dafdf181e822c887c8a319c9195444e6c64ac395e + languageName: node + linkType: hard + +"lib0@npm:^0.2.42, lib0@npm:^0.2.49": + version: 0.2.66 + resolution: "lib0@npm:0.2.66" + dependencies: + isomorphic.js: ^0.2.4 + bin: + 0gentesthtml: bin/gentesthtml.js + checksum: 500210fd1c91112b4bd309b988f83282fd6b5e8ae0ca49e1675047524cdb26760becd54c36d214263f911005a2e995da1680ce359d0b411b3cced0b7ae5a921f + languageName: node + linkType: hard + +"libnpmaccess@npm:6.0.3": + version: 6.0.3 + resolution: "libnpmaccess@npm:6.0.3" + dependencies: + aproba: ^2.0.0 + minipass: ^3.1.1 + npm-package-arg: ^9.0.1 + npm-registry-fetch: ^13.0.0 + checksum: 4a437390d52bd5e6145164210cfab4cdbc824c4f4a62e11cf186cad9c159a7c8f0c1b6e37346db1cc675bcdf1508e92ed64d47ac1a9bcf838a670bb4741a50c9 + languageName: node + linkType: hard + +"libnpmpublish@npm:6.0.4": + version: 6.0.4 + resolution: "libnpmpublish@npm:6.0.4" + dependencies: + normalize-package-data: ^4.0.0 + npm-package-arg: ^9.0.1 + npm-registry-fetch: ^13.0.0 + semver: ^7.3.7 + ssri: ^9.0.0 + checksum: d653e0d9be0b01011c020f8252f480ca68105b56fde575a6c4fda650f6b5ff33a51fda43897ba817d2955579cc096910561e60e26628c59f5ac2d031157551d1 + languageName: node + linkType: hard + +"license-webpack-plugin@npm:^2.3.14": + version: 2.3.21 + resolution: "license-webpack-plugin@npm:2.3.21" + dependencies: + "@types/webpack-sources": ^0.1.5 + webpack-sources: ^1.2.0 + peerDependenciesMeta: + webpack: + optional: true + checksum: 6208bd2060d200fbffbcc89702c929d50c5a4a3f2158b046cf813b3f7f728bbbe4611b9fea2d67843bb5e7d64ad9122cc368a19ac73f5c4ad41765e6283bdc0c + 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 + languageName: node + linkType: hard + +"lines-and-columns@npm:~2.0.3": + version: 2.0.3 + resolution: "lines-and-columns@npm:2.0.3" + checksum: 5955363dfd7d3d7c476d002eb47944dbe0310d57959e2112dce004c0dc76cecfd479cf8c098fd479ff344acdf04ee0e82b455462a26492231ac152f6c48d17a1 + languageName: node + linkType: hard + +"load-json-file@npm:6.2.0": + version: 6.2.0 + resolution: "load-json-file@npm:6.2.0" + dependencies: + graceful-fs: ^4.1.15 + parse-json: ^5.0.0 + strip-bom: ^4.0.0 + type-fest: ^0.6.0 + checksum: 4429e430ebb99375fc7cd936348e4f7ba729486080ced4272091c1e386a7f5f738ea3337d8ffd4b01c2f5bc3ddde92f2c780045b66838fe98bdb79f901884643 + languageName: node + linkType: hard + +"load-json-file@npm:^4.0.0": + version: 4.0.0 + resolution: "load-json-file@npm:4.0.0" + dependencies: + graceful-fs: ^4.1.2 + parse-json: ^4.0.0 + pify: ^3.0.0 + strip-bom: ^3.0.0 + checksum: 8f5d6d93ba64a9620445ee9bde4d98b1eac32cf6c8c2d20d44abfa41a6945e7969456ab5f1ca2fb06ee32e206c9769a20eec7002fe290de462e8c884b6b8b356 + languageName: node + linkType: hard + +"loader-runner@npm:^4.2.0": + version: 4.3.0 + resolution: "loader-runner@npm:4.3.0" + checksum: a90e00dee9a16be118ea43fec3192d0b491fe03a32ed48a4132eb61d498f5536a03a1315531c19d284392a8726a4ecad71d82044c28d7f22ef62e029bf761569 + languageName: node + linkType: hard + +"loader-utils@npm:^2.0.0": + version: 2.0.4 + resolution: "loader-utils@npm:2.0.4" + dependencies: + big.js: ^5.2.2 + emojis-list: ^3.0.0 + json5: ^2.1.2 + checksum: a5281f5fff1eaa310ad5e1164095689443630f3411e927f95031ab4fb83b4a98f388185bb1fe949e8ab8d4247004336a625e9255c22122b815bb9a4c5d8fc3b7 + languageName: node + linkType: hard + +"locate-path@npm:^2.0.0": + version: 2.0.0 + resolution: "locate-path@npm:2.0.0" + dependencies: + p-locate: ^2.0.0 + path-exists: ^3.0.0 + checksum: 02d581edbbbb0fa292e28d96b7de36b5b62c2fa8b5a7e82638ebb33afa74284acf022d3b1e9ae10e3ffb7658fbc49163fcd5e76e7d1baaa7801c3e05a81da755 + languageName: node + linkType: hard + +"locate-path@npm:^5.0.0": + version: 5.0.0 + resolution: "locate-path@npm:5.0.0" + dependencies: + p-locate: ^4.1.0 + checksum: 83e51725e67517287d73e1ded92b28602e3ae5580b301fe54bfb76c0c723e3f285b19252e375712316774cf52006cb236aed5704692c32db0d5d089b69696e30 + languageName: node + linkType: hard + +"locate-path@npm:^6.0.0": + version: 6.0.0 + resolution: "locate-path@npm:6.0.0" + dependencies: + p-locate: ^5.0.0 + checksum: 72eb661788a0368c099a184c59d2fee760b3831c9c1c33955e8a19ae4a21b4116e53fa736dc086cdeb9fce9f7cc508f2f92d2d3aae516f133e16a2bb59a39f5a + languageName: node + linkType: hard + +"lodash-es@npm:^4.17.21": + version: 4.17.21 + resolution: "lodash-es@npm:4.17.21" + checksum: 05cbffad6e2adbb331a4e16fbd826e7faee403a1a04873b82b42c0f22090f280839f85b95393f487c1303c8a3d2a010048bf06151a6cbe03eee4d388fb0a12d2 + languageName: node + linkType: hard + +"lodash.debounce@npm:^4.0.8": + version: 4.0.8 + resolution: "lodash.debounce@npm:4.0.8" + checksum: a3f527d22c548f43ae31c861ada88b2637eb48ac6aa3eb56e82d44917971b8aa96fbb37aa60efea674dc4ee8c42074f90f7b1f772e9db375435f6c83a19b3bc6 + languageName: node + linkType: hard + +"lodash.escape@npm:^4.0.1": + version: 4.0.1 + resolution: "lodash.escape@npm:4.0.1" + checksum: fcb54f457497256964d619d5cccbd80a961916fca60df3fe0fa3e7f052715c2944c0ed5aefb4f9e047d127d44aa2d55555f3350cb42c6549e9e293fb30b41e7f + languageName: node + linkType: hard + +"lodash.includes@npm:^4.2.0": + version: 4.3.0 + resolution: "lodash.includes@npm:4.3.0" + checksum: 71092c130515a67ab3bd928f57f6018434797c94def7f46aafa417771e455ce3a4834889f4267b17887d7f75297dfabd96231bf704fd2b8c5096dc4a913568b6 + languageName: node + linkType: hard + +"lodash.ismatch@npm:^4.4.0": + version: 4.4.0 + resolution: "lodash.ismatch@npm:4.4.0" + checksum: a393917578842705c7fc1a30fb80613d1ac42d20b67eb26a2a6004d6d61ee90b419f9eb320508ddcd608e328d91eeaa2651411727eaa9a12534ed6ccb02fc705 + languageName: node + linkType: hard + +"lodash.memoize@npm:4.x": + version: 4.1.2 + resolution: "lodash.memoize@npm:4.1.2" + checksum: 9ff3942feeccffa4f1fafa88d32f0d24fdc62fd15ded5a74a5f950ff5f0c6f61916157246744c620173dddf38d37095a92327d5fd3861e2063e736a5c207d089 + languageName: node + linkType: hard + +"lodash.merge@npm:^4.6.2": + version: 4.6.2 + resolution: "lodash.merge@npm:4.6.2" + checksum: ad580b4bdbb7ca1f7abf7e1bce63a9a0b98e370cf40194b03380a46b4ed799c9573029599caebc1b14e3f24b111aef72b96674a56cfa105e0f5ac70546cdc005 + languageName: node + linkType: hard + +"lodash.mergewith@npm:^4.6.1": + version: 4.6.2 + resolution: "lodash.mergewith@npm:4.6.2" + checksum: a6db2a9339752411f21b956908c404ec1e088e783a65c8b29e30ae5b3b6384f82517662d6f425cc97c2070b546cc2c7daaa8d33f78db7b6e9be06cd834abdeb8 + languageName: node + linkType: hard + +"lodash@npm:^4.17.11, lodash@npm:^4.17.15, lodash@npm:^4.17.20, lodash@npm:^4.17.21, lodash@npm:^4.17.4, lodash@npm:^4.7.0": + version: 4.17.21 + resolution: "lodash@npm:4.17.21" + checksum: eb835a2e51d381e561e508ce932ea50a8e5a68f4ebdd771ea240d3048244a8d13658acbd502cd4829768c56f2e16bdd4340b9ea141297d472517b83868e677f7 + languageName: node + linkType: hard + +"log-symbols@npm:^2.1.0": + version: 2.2.0 + resolution: "log-symbols@npm:2.2.0" + dependencies: + chalk: ^2.0.1 + checksum: 4c95e3b65f0352dbe91dc4989c10baf7a44e2ef5b0db7e6721e1476268e2b6f7090c3aa880d4f833a05c5c3ff18f4ec5215a09bd0099986d64a8186cfeb48ac8 + languageName: node + linkType: hard + +"log-symbols@npm:^4.1.0": + version: 4.1.0 + resolution: "log-symbols@npm:4.1.0" + dependencies: + chalk: ^4.1.0 + is-unicode-supported: ^0.1.0 + checksum: fce1497b3135a0198803f9f07464165e9eb83ed02ceb2273930a6f8a508951178d8cf4f0378e9d28300a2ed2bc49050995d2bd5f53ab716bb15ac84d58c6ef74 + languageName: node + linkType: hard + +"log4js@npm:^6.2.1": + version: 6.4.3 + resolution: "log4js@npm:6.4.3" + dependencies: + date-format: ^4.0.5 + debug: ^4.3.3 + flatted: ^3.2.5 + rfdc: ^1.3.0 + streamroller: ^3.0.5 + checksum: 03b277d67e1fe000f82eb5314affc80c8b50561ba8f1c5983ff9f37050460dd3a2d21616ad47f5ffd47702ca16e52816df85d100262b013e9f60e777afedc074 + languageName: node + linkType: hard + +"long@npm:^4.0.0": + version: 4.0.0 + resolution: "long@npm:4.0.0" + checksum: 16afbe8f749c7c849db1f4de4e2e6a31ac6e617cead3bdc4f9605cb703cd20e1e9fc1a7baba674ffcca57d660a6e5b53a9e236d7b25a295d3855cca79cc06744 + languageName: node + linkType: hard + +"loose-envify@npm:^1.1.0, loose-envify@npm:^1.4.0": + version: 1.4.0 + resolution: "loose-envify@npm:1.4.0" + dependencies: + js-tokens: ^3.0.0 || ^4.0.0 + bin: + loose-envify: cli.js + checksum: 6517e24e0cad87ec9888f500c5b5947032cdfe6ef65e1c1936a0c48a524b81e65542c9c3edc91c97d5bddc806ee2a985dbc79be89215d613b1de5db6d1cfe6f4 + languageName: node + linkType: hard + +"lru-cache@npm:^4.0.1, lru-cache@npm:^4.1.3": + version: 4.1.5 + resolution: "lru-cache@npm:4.1.5" + dependencies: + pseudomap: ^1.0.2 + yallist: ^2.1.2 + checksum: 4bb4b58a36cd7dc4dcec74cbe6a8f766a38b7426f1ff59d4cf7d82a2aa9b9565cd1cb98f6ff60ce5cd174524868d7bc9b7b1c294371851356066ca9ac4cf135a + languageName: node + linkType: hard + +"lru-cache@npm:^5.1.1": + version: 5.1.1 + resolution: "lru-cache@npm:5.1.1" + dependencies: + yallist: ^3.0.2 + checksum: c154ae1cbb0c2206d1501a0e94df349653c92c8cbb25236d7e85190bcaf4567a03ac6eb43166fabfa36fd35623694da7233e88d9601fbf411a9a481d85dbd2cb + languageName: node + linkType: hard + +"lru-cache@npm:^6.0.0": + version: 6.0.0 + resolution: "lru-cache@npm:6.0.0" + dependencies: + yallist: ^4.0.0 + checksum: f97f499f898f23e4585742138a22f22526254fdba6d75d41a1c2526b3b6cc5747ef59c5612ba7375f42aca4f8461950e925ba08c991ead0651b4918b7c978297 + languageName: node + linkType: hard + +"lru-cache@npm:^7.4.4, lru-cache@npm:^7.5.1, lru-cache@npm:^7.7.1": + version: 7.14.0 + resolution: "lru-cache@npm:7.14.0" + checksum: efdd329f2c1bb790b71d497c6c59272e6bc2d7dd060ba55fc136becd3dd31fc8346edb446275504d94cb60d3c8385dbf5267b79b23789e409b2bdf302d13f0d7 + languageName: node + linkType: hard + +"lru-cache@npm:^9.1.1": + version: 9.1.2 + resolution: "lru-cache@npm:9.1.2" + checksum: d3415634be3908909081fc4c56371a8d562d9081eba70543d86871b978702fffd0e9e362b83921b27a29ae2b37b90f55675aad770a54ac83bb3e4de5049d4b15 + languageName: node + linkType: hard + +"lru-queue@npm:0.1": + version: 0.1.0 + resolution: "lru-queue@npm:0.1.0" + dependencies: + es5-ext: ~0.10.2 + checksum: 7f2c53c5e7f2de20efb6ebb3086b7aea88d6cf9ae91ac5618ece974122960c4e8ed04988e81d92c3e63d60b12c556b14d56ef7a9c5a4627b23859b813e39b1a2 + languageName: node + linkType: hard + +"make-dir@npm:3.1.0, make-dir@npm:^3.0.0, make-dir@npm:^3.1.0": + version: 3.1.0 + resolution: "make-dir@npm:3.1.0" + dependencies: + semver: ^6.0.0 + checksum: 484200020ab5a1fdf12f393fe5f385fc8e4378824c940fba1729dcd198ae4ff24867bc7a5646331e50cead8abff5d9270c456314386e629acec6dff4b8016b78 + languageName: node + linkType: hard + +"make-dir@npm:^2.1.0": + version: 2.1.0 + resolution: "make-dir@npm:2.1.0" + dependencies: + pify: ^4.0.1 + semver: ^5.6.0 + checksum: 043548886bfaf1820323c6a2997e6d2fa51ccc2586ac14e6f14634f7458b4db2daf15f8c310e2a0abd3e0cddc64df1890d8fc7263033602c47bb12cbfcf86aab + languageName: node + linkType: hard + +"make-error@npm:1.x": + version: 1.3.6 + resolution: "make-error@npm:1.3.6" + checksum: b86e5e0e25f7f777b77fabd8e2cbf15737972869d852a22b7e73c17623928fccb826d8e46b9951501d3f20e51ad74ba8c59ed584f610526a48f8ccf88aaec402 + languageName: node + linkType: hard + +"make-fetch-happen@npm:^10.0.6": + version: 10.2.1 + resolution: "make-fetch-happen@npm:10.2.1" + 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 + checksum: 2332eb9a8ec96f1ffeeea56ccefabcb4193693597b132cd110734d50f2928842e22b84cfa1508e921b8385cdfd06dda9ad68645fed62b50fff629a580f5fb72c + languageName: node + linkType: hard + +"make-fetch-happen@npm:^11.0.3": + version: 11.1.1 + resolution: "make-fetch-happen@npm:11.1.1" + 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: ^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 + checksum: 7268bf274a0f6dcf0343829489a4506603ff34bd0649c12058753900b0eb29191dce5dba12680719a5d0a983d3e57810f594a12f3c18494e93a1fbc6348a4540 + languageName: node + linkType: hard + +"make-fetch-happen@npm:^9.1.0": + version: 9.1.0 + resolution: "make-fetch-happen@npm:9.1.0" + 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 + checksum: 0eb371c85fdd0b1584fcfdf3dc3c62395761b3c14658be02620c310305a9a7ecf1617a5e6fb30c1d081c5c8aaf177fa133ee225024313afabb7aa6a10f1e3d04 + languageName: node + linkType: hard + +"makeerror@npm:1.0.12": + version: 1.0.12 + resolution: "makeerror@npm:1.0.12" + dependencies: + tmpl: 1.0.5 + checksum: b38a025a12c8146d6eeea5a7f2bf27d51d8ad6064da8ca9405fcf7bf9b54acd43e3b30ddd7abb9b1bfa4ddb266019133313482570ddb207de568f71ecfcf6060 + languageName: node + linkType: hard + +"map-obj@npm:^1.0.0": + version: 1.0.1 + resolution: "map-obj@npm:1.0.1" + checksum: 9949e7baec2a336e63b8d4dc71018c117c3ce6e39d2451ccbfd3b8350c547c4f6af331a4cbe1c83193d7c6b786082b6256bde843db90cb7da2a21e8fcc28afed + languageName: node + linkType: hard + +"map-obj@npm:^4.0.0": + version: 4.1.0 + resolution: "map-obj@npm:4.1.0" + checksum: c62b22f23e58d742a093a0935fa904c92cc788d56132b75666160ac0c5704d3c677d28794594c7adf7ed0c177a96579e781dbf06e0a1b5d574c992a5c13877a3 + languageName: node + linkType: hard + +"markdown-escapes@npm:^1.0.0": + version: 1.0.4 + resolution: "markdown-escapes@npm:1.0.4" + checksum: 6833a93d72d3f70a500658872312c6fa8015c20cc835a85ae6901fa232683fbc6ed7118ebe920fea7c80039a560f339c026597d96eee0e9de602a36921804997 + languageName: node + linkType: hard + +"markdown-to-jsx@npm:^7.2.1": + version: 7.2.1 + resolution: "markdown-to-jsx@npm:7.2.1" + peerDependencies: + react: ">= 0.14.0" + checksum: 0c8c715229044401ea48c2fc26c2554464100074959dafacdd9e4a0e849f0a190b02f39edb373bbdd95e38b8f910074b83b63d08752b8ae6be6ddcfb40ea50a0 + languageName: node + linkType: hard + +"mdast-comment-marker@npm:^1.0.0": + version: 1.1.2 + resolution: "mdast-comment-marker@npm:1.1.2" + checksum: 9e3a75cbc8dad24388825889001542065ee6684634548be2f08fa5c557a28a2b39530273805ed85c75a8d04c1231c345decf07445717e2d458d86440471a9e4b + languageName: node + linkType: hard + +"mdast-util-heading-style@npm:^1.0.2": + version: 1.0.6 + resolution: "mdast-util-heading-style@npm:1.0.6" + checksum: ac4bbf64717d45b6b1c797c5020d541df8ed2c547461e78a6f75e765123efd47fc8721c6a6b495d9536a0c22e897ef4a988e3f70603cbef2707f91096efb507a + languageName: node + linkType: hard + +"mdast-util-to-nlcst@npm:^3.2.0": + version: 3.2.3 + resolution: "mdast-util-to-nlcst@npm:3.2.3" + dependencies: + nlcst-to-string: ^2.0.0 + repeat-string: ^1.5.2 + unist-util-position: ^3.0.0 + vfile-location: ^2.0.0 + checksum: 4de57854e664e457005945d0ee66bc29ebe3f7f6916263a1232ab54b83eea81700cd5be2dd19c81cdd87a725bf5f7a042080a882c7c91d1e9b6bb413cd382aff + languageName: node + linkType: hard + +"mdast-util-to-string@npm:^1.0.2": + version: 1.1.0 + resolution: "mdast-util-to-string@npm:1.1.0" + checksum: eec1eb283f3341376c8398b67ce512a11ab3e3191e3dbd5644d32a26784eac8d5f6d0b0fb81193af00d75a2c545cde765c8b03e966bd890076efb5d357fb4fe2 + languageName: node + linkType: hard + +"memoizee@npm:^0.4.14": + version: 0.4.14 + resolution: "memoizee@npm:0.4.14" + dependencies: + d: 1 + es5-ext: ^0.10.45 + es6-weak-map: ^2.0.2 + event-emitter: ^0.3.5 + is-promise: ^2.1 + lru-queue: 0.1 + next-tick: 1 + timers-ext: ^0.1.5 + checksum: ec40c829c27054a52aedbb674fa055b1168950ad1aa8445122ceec901ed1285e6e089ad2adde4d6584c9c23948c372e33a30c148af2e867b29280477da69e1e0 + languageName: node + linkType: hard + +"memorystream@npm:^0.3.1": + version: 0.3.1 + resolution: "memorystream@npm:0.3.1" + checksum: f18b42440d24d09516d01466c06adf797df7873f0d40aa7db02e5fb9ed83074e5e65412d0720901d7069363465f82dc4f8bcb44f0cde271567a61426ce6ca2e9 + languageName: node + linkType: hard + +"meow@npm:^8.0.0": + version: 8.1.2 + resolution: "meow@npm:8.1.2" + dependencies: + "@types/minimist": ^1.2.0 + camelcase-keys: ^6.2.2 + decamelize-keys: ^1.1.0 + hard-rejection: ^2.1.0 + minimist-options: 4.1.0 + normalize-package-data: ^3.0.0 + read-pkg-up: ^7.0.1 + redent: ^3.0.0 + trim-newlines: ^3.0.0 + type-fest: ^0.18.0 + yargs-parser: ^20.2.3 + checksum: bc23bf1b4423ef6a821dff9734406bce4b91ea257e7f10a8b7f896f45b59649f07adc0926e2917eacd8cf1df9e4cd89c77623cf63dfd0f8bf54de07a32ee5a85 + languageName: node + linkType: hard + +"merge-stream@npm:^2.0.0": + version: 2.0.0 + resolution: "merge-stream@npm:2.0.0" + checksum: 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 + languageName: node + linkType: hard + +"micromatch@npm:^4.0.4": + version: 4.0.5 + resolution: "micromatch@npm:4.0.5" + dependencies: + braces: ^3.0.2 + picomatch: ^2.3.1 + checksum: 02a17b671c06e8fefeeb6ef996119c1e597c942e632a21ef589154f23898c9c6a9858526246abb14f8bca6e77734aa9dcf65476fca47cedfb80d9577d52843fc + languageName: node + linkType: hard + +"mime-db@npm:1.52.0": + version: 1.52.0 + resolution: "mime-db@npm:1.52.0" + checksum: 0d99a03585f8b39d68182803b12ac601d9c01abfa28ec56204fa330bc9f3d1c5e14beb049bafadb3dbdf646dfb94b87e24d4ec7b31b7279ef906a8ea9b6a513f + languageName: node + linkType: hard + +"mime-types@npm:^2.1.12, mime-types@npm:^2.1.27": + version: 2.1.35 + resolution: "mime-types@npm:2.1.35" + dependencies: + mime-db: 1.52.0 + checksum: 89a5b7f1def9f3af5dad6496c5ed50191ae4331cc5389d7c521c8ad28d5fdad2d06fd81baf38fed813dc4e46bb55c8145bb0ff406330818c9cf712fb2e9b3836 + languageName: node + linkType: hard + +"mimic-fn@npm:^1.0.0": + version: 1.2.0 + resolution: "mimic-fn@npm:1.2.0" + checksum: 69c08205156a1f4906d9c46f9b4dc08d18a50176352e77fdeb645cedfe9f20c0b19865d465bd2dec27a5c432347f24dc07fc3695e11159d193f892834233e939 + languageName: node + linkType: hard + +"mimic-fn@npm:^2.1.0": + version: 2.1.0 + resolution: "mimic-fn@npm:2.1.0" + checksum: d2421a3444848ce7f84bd49115ddacff29c15745db73f54041edc906c14b131a38d05298dae3081667627a59b2eb1ca4b436ff2e1b80f69679522410418b478a + languageName: node + linkType: hard + +"min-indent@npm:^1.0.0": + version: 1.0.1 + resolution: "min-indent@npm:1.0.1" + checksum: bfc6dd03c5eaf623a4963ebd94d087f6f4bbbfd8c41329a7f09706b0cb66969c4ddd336abeb587bc44bc6f08e13bf90f0b374f9d71f9f01e04adc2cd6f083ef1 + languageName: node + linkType: hard + +"mini-css-extract-plugin@npm:^2.7.0": + version: 2.7.6 + resolution: "mini-css-extract-plugin@npm:2.7.6" + dependencies: + schema-utils: ^4.0.0 + peerDependencies: + webpack: ^5.0.0 + checksum: be6f7cefc6275168eb0a6b8fe977083a18c743c9612c9f00e6c1a62c3393ca7960e93fba1a7ebb09b75f36a0204ad087d772c1ef574bc29c90c0e8175a3c0b83 + languageName: node + linkType: hard + +"mini-svg-data-uri@npm:^1.4.4": + version: 1.4.4 + resolution: "mini-svg-data-uri@npm:1.4.4" + bin: + mini-svg-data-uri: cli.js + checksum: 997f1fbd8d59a70f03761e18626d335197a3479cb9d1ff75678e4b64b864d32a0b8fc18115eabde035e5299b8b4a354a78e57dd6ac10f9d604162a6170898d09 + languageName: node + linkType: hard + +"minimatch@npm:3.0.5": + version: 3.0.5 + resolution: "minimatch@npm:3.0.5" + dependencies: + brace-expansion: ^1.1.7 + checksum: a3b84b426eafca947741b864502cee02860c4e7b145de11ad98775cfcf3066fef422583bc0ffce0952ddf4750c1ccf4220b1556430d4ce10139f66247d87d69e + languageName: node + linkType: hard + +"minimatch@npm:^3.0.4, minimatch@npm:^3.0.5, minimatch@npm:^3.1.2": + version: 3.1.2 + resolution: "minimatch@npm:3.1.2" + dependencies: + brace-expansion: ^1.1.7 + checksum: c154e566406683e7bcb746e000b84d74465b3a832c45d59912b9b55cd50dee66e5c4b1e5566dba26154040e51672f9aa450a9aef0c97cfc7336b78b7afb9540a + languageName: node + linkType: hard + +"minimatch@npm:^5.0.1": + version: 5.1.6 + resolution: "minimatch@npm:5.1.6" + dependencies: + brace-expansion: ^2.0.1 + checksum: 7564208ef81d7065a370f788d337cd80a689e981042cb9a1d0e6580b6c6a8c9279eba80010516e258835a988363f99f54a6f711a315089b8b42694f5da9d0d77 + languageName: node + linkType: hard + +"minimatch@npm:^9.0.1": + version: 9.0.1 + resolution: "minimatch@npm:9.0.1" + dependencies: + brace-expansion: ^2.0.1 + checksum: 97f5f5284bb57dc65b9415dec7f17a0f6531a33572193991c60ff18450dcfad5c2dad24ffeaf60b5261dccd63aae58cc3306e2209d57e7f88c51295a532d8ec3 + languageName: node + linkType: hard + +"minimist-options@npm:4.1.0": + version: 4.1.0 + resolution: "minimist-options@npm:4.1.0" + dependencies: + arrify: ^1.0.1 + is-plain-obj: ^1.1.0 + kind-of: ^6.0.3 + checksum: 8c040b3068811e79de1140ca2b708d3e203c8003eb9a414c1ab3cd467fc5f17c9ca02a5aef23bedc51a7f8bfbe77f87e9a7e31ec81fba304cda675b019496f4e + languageName: node + linkType: hard + +"minimist@npm:^1.2.0, minimist@npm:^1.2.5, minimist@npm:^1.2.6, minimist@npm:~1.2.0": + version: 1.2.8 + resolution: "minimist@npm:1.2.8" + checksum: 75a6d645fb122dad29c06a7597bddea977258957ed88d7a6df59b5cd3fe4a527e253e9bbf2e783e4b73657f9098b96a5fe96ab8a113655d4109108577ecf85b0 + languageName: node + linkType: hard + +"minipass-collect@npm:^1.0.2": + version: 1.0.2 + resolution: "minipass-collect@npm:1.0.2" + dependencies: + minipass: ^3.0.0 + checksum: 14df761028f3e47293aee72888f2657695ec66bd7d09cae7ad558da30415fdc4752bbfee66287dcc6fd5e6a2fa3466d6c484dc1cbd986525d9393b9523d97f10 + languageName: node + linkType: hard + +"minipass-fetch@npm:^1.3.2": + version: 1.4.1 + resolution: "minipass-fetch@npm:1.4.1" + dependencies: + encoding: ^0.1.12 + minipass: ^3.1.0 + minipass-sized: ^1.0.3 + minizlib: ^2.0.0 + dependenciesMeta: + encoding: + optional: true + checksum: ec93697bdb62129c4e6c0104138e681e30efef8c15d9429dd172f776f83898471bc76521b539ff913248cc2aa6d2b37b652c993504a51cc53282563640f29216 + languageName: node + linkType: hard + +"minipass-fetch@npm:^2.0.3": + version: 2.1.2 + resolution: "minipass-fetch@npm:2.1.2" + dependencies: + encoding: ^0.1.13 + minipass: ^3.1.6 + minipass-sized: ^1.0.3 + minizlib: ^2.1.2 + dependenciesMeta: + encoding: + optional: true + checksum: 3f216be79164e915fc91210cea1850e488793c740534985da017a4cbc7a5ff50506956d0f73bb0cb60e4fe91be08b6b61ef35101706d3ef5da2c8709b5f08f91 + languageName: node + linkType: hard + +"minipass-fetch@npm:^3.0.0": + version: 3.0.3 + resolution: "minipass-fetch@npm:3.0.3" + dependencies: + encoding: ^0.1.13 + minipass: ^5.0.0 + minipass-sized: ^1.0.3 + minizlib: ^2.1.2 + dependenciesMeta: + encoding: + optional: true + checksum: af5ab2552a16fcf505d35fd7ffb84b57f4a0eeb269e6e1d9a2a75824dda48b36e527083250b7cca4a4def21d9544e2ade441e4730e233c0bc2133f6abda31e18 + languageName: node + linkType: hard + +"minipass-flush@npm:^1.0.5": + version: 1.0.5 + resolution: "minipass-flush@npm:1.0.5" + dependencies: + minipass: ^3.0.0 + checksum: 56269a0b22bad756a08a94b1ffc36b7c9c5de0735a4dd1ab2b06c066d795cfd1f0ac44a0fcae13eece5589b908ecddc867f04c745c7009be0b566421ea0944cf + 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: ^1.3.1 + minipass: ^3.0.0 + checksum: 791b696a27d1074c4c08dab1bf5a9f3201145c2933e428f45d880467bce12c60de4703203d2928de4b162d0ae77b0bb4b55f96cb846645800aa0eb4919b3e796 + languageName: node + linkType: hard + +"minipass-pipeline@npm:^1.2.2, minipass-pipeline@npm:^1.2.4": + version: 1.2.4 + resolution: "minipass-pipeline@npm:1.2.4" + dependencies: + minipass: ^3.0.0 + checksum: b14240dac0d29823c3d5911c286069e36d0b81173d7bdf07a7e4a91ecdef92cdff4baaf31ea3746f1c61e0957f652e641223970870e2353593f382112257971b + languageName: node + linkType: hard + +"minipass-sized@npm:^1.0.3": + version: 1.0.3 + resolution: "minipass-sized@npm:1.0.3" + dependencies: + minipass: ^3.0.0 + checksum: 79076749fcacf21b5d16dd596d32c3b6bf4d6e62abb43868fac21674078505c8b15eaca4e47ed844985a4514854f917d78f588fcd029693709417d8f98b2bd60 + languageName: node + linkType: hard + +"minipass@npm:^3.0.0, minipass@npm:^3.1.0, minipass@npm:^3.1.1, minipass@npm:^3.1.3, minipass@npm:^3.1.6": + version: 3.3.6 + resolution: "minipass@npm:3.3.6" + dependencies: + yallist: ^4.0.0 + checksum: a30d083c8054cee83cdcdc97f97e4641a3f58ae743970457b1489ce38ee1167b3aaf7d815cd39ec7a99b9c40397fd4f686e83750e73e652b21cb516f6d845e48 + languageName: node + linkType: hard + +"minipass@npm:^5.0.0, minipass@npm:^5.0.0 || ^6.0.2": + version: 5.0.0 + resolution: "minipass@npm:5.0.0" + checksum: 425dab288738853fded43da3314a0b5c035844d6f3097a8e3b5b29b328da8f3c1af6fc70618b32c29ff906284cf6406b6841376f21caaadd0793c1d5a6a620ea + languageName: node + linkType: hard + +"minizlib@npm:^2.0.0, minizlib@npm:^2.1.1, minizlib@npm:^2.1.2": + version: 2.1.2 + resolution: "minizlib@npm:2.1.2" + dependencies: + minipass: ^3.0.0 + yallist: ^4.0.0 + checksum: f1fdeac0b07cf8f30fcf12f4b586795b97be856edea22b5e9072707be51fc95d41487faec3f265b42973a304fe3a64acd91a44a3826a963e37b37bafde0212c3 + languageName: node + linkType: hard + +"mkdirp-infer-owner@npm:^2.0.0": + version: 2.0.0 + resolution: "mkdirp-infer-owner@npm:2.0.0" + dependencies: + chownr: ^2.0.0 + infer-owner: ^1.0.4 + mkdirp: ^1.0.3 + checksum: d8f4ecd32f6762459d6b5714eae6487c67ae9734ab14e26d14377ddd9b2a1bf868d8baa18c0f3e73d3d513f53ec7a698e0f81a9367102c870a55bef7833880f7 + languageName: node + linkType: hard + +"mkdirp@npm:^0.5.1": + version: 0.5.4 + resolution: "mkdirp@npm:0.5.4" + dependencies: + minimist: ^1.2.5 + bin: + mkdirp: bin/cmd.js + checksum: c71e931374b2776f7b8208cf9a5175363d6d32feb20e90b7955c412a30bc6344c293169da824f6b63e000923b453f12132149216faffa087209ac2c1d1f423f1 + languageName: node + linkType: hard + +"mkdirp@npm:^1.0.3, mkdirp@npm:^1.0.4": + version: 1.0.4 + resolution: "mkdirp@npm:1.0.4" + bin: + mkdirp: bin/cmd.js + checksum: a96865108c6c3b1b8e1d5e9f11843de1e077e57737602de1b82030815f311be11f96f09cce59bd5b903d0b29834733e5313f9301e3ed6d6f6fba2eae0df4298f + languageName: node + linkType: hard + +"modify-values@npm:^1.0.0": + version: 1.0.1 + resolution: "modify-values@npm:1.0.1" + checksum: 8296610c608bc97b03c2cf889c6cdf4517e32fa2d836440096374c2209f6b7b3e256c209493a0b32584b9cb32d528e99d0dd19dcd9a14d2d915a312d391cc7e9 + languageName: node + linkType: hard + +"mri@npm:^1.1.0": + version: 1.1.6 + resolution: "mri@npm:1.1.6" + checksum: c568269a40e2e95d48f28b88ab8b24bdc7c586edbfbb3e5ce7a4e3cee0665aef673b86bc2b63c98289d29b573a39d0e054924e415286a8dafdabfc68785746c7 + languageName: node + linkType: hard + +"ms@npm:2.0.0": + version: 2.0.0 + resolution: "ms@npm:2.0.0" + checksum: 0e6a22b8b746d2e0b65a430519934fefd41b6db0682e3477c10f60c76e947c4c0ad06f63ffdf1d78d335f83edee8c0aa928aa66a36c7cd95b69b26f468d527f4 + languageName: node + linkType: hard + +"ms@npm:2.1.2, ms@npm:^2.0.0, ms@npm:^2.1.1": + version: 2.1.2 + resolution: "ms@npm:2.1.2" + checksum: 673cdb2c3133eb050c745908d8ce632ed2c02d85640e2edb3ace856a2266a813b30c613569bf3354fdf4ea7d1a1494add3bfa95e2713baa27d0c2c71fc44f58f + languageName: node + linkType: hard + +"multimatch@npm:5.0.0": + version: 5.0.0 + resolution: "multimatch@npm:5.0.0" + dependencies: + "@types/minimatch": ^3.0.3 + array-differ: ^3.0.0 + array-union: ^2.1.0 + arrify: ^2.0.1 + minimatch: ^3.0.4 + checksum: 82c8030a53af965cab48da22f1b0f894ef99e16ee680dabdfbd38d2dfacc3c8208c475203d747afd9e26db44118ed0221d5a0d65268c864f06d6efc7ac6df812 + languageName: node + linkType: hard + +"mute-stream@npm:0.0.8, mute-stream@npm:~0.0.4": + version: 0.0.8 + resolution: "mute-stream@npm:0.0.8" + checksum: ff48d251fc3f827e5b1206cda0ffdaec885e56057ee86a3155e1951bc940fd5f33531774b1cc8414d7668c10a8907f863f6561875ee6e8768931a62121a531a1 + languageName: node + linkType: hard + +"mysql2@npm:^2.3.0": + version: 2.3.3 + resolution: "mysql2@npm:2.3.3" + dependencies: + denque: ^2.0.1 + generate-function: ^2.3.1 + iconv-lite: ^0.6.3 + long: ^4.0.0 + lru-cache: ^6.0.0 + named-placeholders: ^1.1.2 + seq-queue: ^0.0.5 + sqlstring: ^2.3.2 + checksum: 45e479d0cbdb24ceb9d1846a1708ae2c33aa64f603f7899279b33560b1eec441f1b7a596075896f1305f701cfbc083bceb88bc72ba5d2f3656a3d6102611286a + languageName: node + linkType: hard + +"mz@npm:^2.7.0": + version: 2.7.0 + resolution: "mz@npm:2.7.0" + dependencies: + any-promise: ^1.0.0 + object-assign: ^4.0.1 + thenify-all: ^1.0.0 + checksum: 8427de0ece99a07e9faed3c0c6778820d7543e3776f9a84d22cf0ec0a8eb65f6e9aee9c9d353ff9a105ff62d33a9463c6ca638974cc652ee8140cd1e35951c87 + languageName: node + linkType: hard + +"named-placeholders@npm:^1.1.2": + version: 1.1.2 + resolution: "named-placeholders@npm:1.1.2" + dependencies: + lru-cache: ^4.1.3 + checksum: c9317d1b479d6733b3baedfde209c6c866cf387c2d625837f93355fdb6a9055b1e8180b883fe00bcb20edb3ba4dd21128ec2f1ed8cb884385cef7698cbcadcc4 + languageName: node + linkType: hard + +"nanoid@npm:^3.3.6": + version: 3.3.6 + resolution: "nanoid@npm:3.3.6" + bin: + nanoid: bin/nanoid.cjs + checksum: 7d0eda657002738aa5206107bd0580aead6c95c460ef1bdd0b1a87a9c7ae6277ac2e9b945306aaa5b32c6dcb7feaf462d0f552e7f8b5718abfc6ead5c94a71b3 + languageName: node + linkType: hard + +"natural-compare-lite@npm:^1.4.0": + version: 1.4.0 + resolution: "natural-compare-lite@npm:1.4.0" + checksum: 5222ac3986a2b78dd6069ac62cbb52a7bf8ffc90d972ab76dfe7b01892485d229530ed20d0c62e79a6b363a663b273db3bde195a1358ce9e5f779d4453887225 + languageName: node + linkType: hard + +"natural-compare@npm:^1.4.0": + version: 1.4.0 + resolution: "natural-compare@npm:1.4.0" + checksum: 23ad088b08f898fc9b53011d7bb78ec48e79de7627e01ab5518e806033861bef68d5b0cd0e2205c2f36690ac9571ff6bcb05eb777ced2eeda8d4ac5b44592c3d + languageName: node + linkType: hard + +"negotiator@npm:^0.6.2, negotiator@npm:^0.6.3": + version: 0.6.3 + resolution: "negotiator@npm:0.6.3" + checksum: b8ffeb1e262eff7968fc90a2b6767b04cfd9842582a9d0ece0af7049537266e7b2506dfb1d107a32f06dd849ab2aea834d5830f7f4d0e5cb7d36e1ae55d021d9 + languageName: node + linkType: hard + +"neo-async@npm:^2.6.0, neo-async@npm:^2.6.2": + version: 2.6.2 + resolution: "neo-async@npm:2.6.2" + checksum: deac9f8d00eda7b2e5cd1b2549e26e10a0faa70adaa6fdadca701cc55f49ee9018e427f424bac0c790b7c7e2d3068db97f3093f1093975f2acb8f8818b936ed9 + languageName: node + linkType: hard + +"next-tick@npm:1, next-tick@npm:^1.1.0": + version: 1.1.0 + resolution: "next-tick@npm:1.1.0" + checksum: 83b5cf36027a53ee6d8b7f9c0782f2ba87f4858d977342bfc3c20c21629290a2111f8374d13a81221179603ffc4364f38374b5655d17b6a8f8a8c77bdea4fe8b + languageName: node + linkType: hard + +"nice-try@npm:^1.0.4": + version: 1.0.5 + resolution: "nice-try@npm:1.0.5" + checksum: 0b4af3b5bb5d86c289f7a026303d192a7eb4417231fe47245c460baeabae7277bcd8fd9c728fb6bd62c30b3e15cd6620373e2cf33353b095d8b403d3e8a15aff + languageName: node + linkType: hard + +"nlcst-is-literal@npm:^1.0.0": + version: 1.2.2 + resolution: "nlcst-is-literal@npm:1.2.2" + dependencies: + nlcst-to-string: ^2.0.0 + checksum: dfc5ed0286e8c55c89904f4ed80f568b97295ff21ae08dcc788feb22f89dce08682cc24213935c60208680d0ce3b9cf0f8e978d989818d4ac1ac8f462e2a2d30 + languageName: node + linkType: hard + +"nlcst-to-string@npm:^2.0.0": + version: 2.0.4 + resolution: "nlcst-to-string@npm:2.0.4" + checksum: 251b5d894ca13893bfc9c4e892a0656a2effb9a053becf8c94d9655ce3d5acc50811f535b0e77cc2156f45ac4addcef29a9654fc4e5841337c86aa08fa2ea878 + languageName: node + linkType: hard + +"node-addon-api@npm:^3.2.1": + version: 3.2.1 + resolution: "node-addon-api@npm:3.2.1" + dependencies: + node-gyp: latest + checksum: 2369986bb0881ccd9ef6bacdf39550e07e089a9c8ede1cbc5fc7712d8e2faa4d50da0e487e333d4125f8c7a616c730131d1091676c9d499af1d74560756b4a18 + languageName: node + linkType: hard + +"node-addon-api@npm:^4.2.0": + version: 4.3.0 + resolution: "node-addon-api@npm:4.3.0" + dependencies: + node-gyp: latest + checksum: 3de396e23cc209f539c704583e8e99c148850226f6e389a641b92e8967953713228109f919765abc1f4355e801e8f41842f96210b8d61c7dcc10a477002dcf00 + languageName: node + linkType: hard + +"node-fetch@npm:2.6.11, node-fetch@npm:^2.6.0, node-fetch@npm:^2.6.1, node-fetch@npm:^2.6.7": + version: 2.6.11 + resolution: "node-fetch@npm:2.6.11" + dependencies: + whatwg-url: ^5.0.0 + peerDependencies: + encoding: ^0.1.0 + peerDependenciesMeta: + encoding: + optional: true + checksum: 249d0666a9497553384d46b5ab296ba223521ac88fed4d8a17d6ee6c2efb0fc890f3e8091cafe7f9fba8151a5b8d925db2671543b3409a56c3cd522b468b47b3 + languageName: node + linkType: hard + +"node-fetch@npm:2.6.7": + version: 2.6.7 + resolution: "node-fetch@npm:2.6.7" + dependencies: + whatwg-url: ^5.0.0 + peerDependencies: + encoding: ^0.1.0 + peerDependenciesMeta: + encoding: + optional: true + checksum: 8d816ffd1ee22cab8301c7756ef04f3437f18dace86a1dae22cf81db8ef29c0bf6655f3215cb0cdb22b420b6fe141e64b26905e7f33f9377a7fa59135ea3e10b + languageName: node + linkType: hard + +"node-forge@npm:^1.0.0": + version: 1.3.0 + resolution: "node-forge@npm:1.3.0" + checksum: 3d8124168dd82006fafbb079f40a529afa0de5bf4d77e6a5a471877e9d39bece31fdc8339e8aee30d5480dc79ffcd1059cfcb21983d350dd3f2a9f226db6ca85 + languageName: node + linkType: hard + +"node-gyp-build@npm:^4.3.0": + version: 4.5.0 + resolution: "node-gyp-build@npm:4.5.0" + bin: + node-gyp-build: bin.js + node-gyp-build-optional: optional.js + node-gyp-build-test: build-test.js + checksum: d888bae0fb88335f69af1b57a2294a931c5042f36e413d8d364c992c9ebfa0b96ffe773179a5a2c8f04b73856e8634e09cce108dbb9804396d3cc8c5455ff2db + languageName: node + linkType: hard + +"node-gyp@npm:8.x": + version: 8.4.1 + resolution: "node-gyp@npm:8.4.1" + 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 + checksum: 341710b5da39d3660e6a886b37e210d33f8282047405c2e62c277bcc744c7552c5b8b972ebc3a7d5c2813794e60cc48c3ebd142c46d6e0321db4db6c92dd0355 + languageName: node + linkType: hard + +"node-gyp@npm:^9.0.0, node-gyp@npm:latest": + version: 9.4.0 + resolution: "node-gyp@npm:9.4.0" + dependencies: + env-paths: ^2.2.0 + exponential-backoff: ^3.1.1 + glob: ^7.1.4 + graceful-fs: ^4.2.6 + make-fetch-happen: ^11.0.3 + nopt: ^6.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 + checksum: 78b404e2e0639d64e145845f7f5a3cb20c0520cdaf6dda2f6e025e9b644077202ea7de1232396ba5bde3fee84cdc79604feebe6ba3ec84d464c85d407bb5da99 + languageName: node + linkType: hard + +"node-int64@npm:^0.4.0": + version: 0.4.0 + resolution: "node-int64@npm:0.4.0" + checksum: d0b30b1ee6d961851c60d5eaa745d30b5c95d94bc0e74b81e5292f7c42a49e3af87f1eb9e89f59456f80645d679202537de751b7d72e9e40ceea40c5e449057e + languageName: node + linkType: hard + +"node-releases@npm:^2.0.12": + version: 2.0.12 + resolution: "node-releases@npm:2.0.12" + checksum: b8c56db82c4642a0f443332b331a4396dae452a2ac5a65c8dbd93ef89ecb2fbb0da9d42ac5366d4764973febadca816cf7587dad492dce18d2a6b2af59cda260 + languageName: node + linkType: hard + +"node-ssh-forward@npm:^0.6.3": + version: 0.6.3 + resolution: "node-ssh-forward@npm:0.6.3" + dependencies: + debug: ^4.1.1 + ssh2: ^0.8.9 + checksum: 5b1172fd0c914edae761d83f2b2ad1d8b9b77a84bd5539d45838d9663ce4b52bb7c993f11d9513aece95ff5ee499b8a9eb292f13219eb1a624d9da464f622bf3 + languageName: node + linkType: hard + +"nopt@npm:^5.0.0": + version: 5.0.0 + resolution: "nopt@npm:5.0.0" + dependencies: + abbrev: 1 + bin: + nopt: bin/nopt.js + checksum: d35fdec187269503843924e0114c0c6533fb54bbf1620d0f28b4b60ba01712d6687f62565c55cc20a504eff0fbe5c63e22340c3fad549ad40469ffb611b04f2f + languageName: node + linkType: hard + +"nopt@npm:^6.0.0": + version: 6.0.0 + resolution: "nopt@npm:6.0.0" + dependencies: + abbrev: ^1.0.0 + bin: + nopt: bin/nopt.js + checksum: 82149371f8be0c4b9ec2f863cc6509a7fd0fa729929c009f3a58e4eb0c9e4cae9920e8f1f8eb46e7d032fec8fb01bede7f0f41a67eb3553b7b8e14fa53de1dac + languageName: node + linkType: hard + +"normalize-package-data@npm:^2.3.2, normalize-package-data@npm:^2.5.0": + version: 2.5.0 + resolution: "normalize-package-data@npm:2.5.0" + dependencies: + hosted-git-info: ^2.1.4 + resolve: ^1.10.0 + semver: 2 || 3 || 4 || 5 + validate-npm-package-license: ^3.0.1 + checksum: 7999112efc35a6259bc22db460540cae06564aa65d0271e3bdfa86876d08b0e578b7b5b0028ee61b23f1cae9fc0e7847e4edc0948d3068a39a2a82853efc8499 + languageName: node + linkType: hard + +"normalize-package-data@npm:^3.0.0": + version: 3.0.3 + resolution: "normalize-package-data@npm:3.0.3" + dependencies: + hosted-git-info: ^4.0.1 + is-core-module: ^2.5.0 + semver: ^7.3.4 + validate-npm-package-license: ^3.0.1 + checksum: bbcee00339e7c26fdbc760f9b66d429258e2ceca41a5df41f5df06cc7652de8d82e8679ff188ca095cad8eff2b6118d7d866af2b68400f74602fbcbce39c160a + languageName: node + linkType: hard + +"normalize-package-data@npm:^4.0.0": + version: 4.0.1 + resolution: "normalize-package-data@npm:4.0.1" + dependencies: + hosted-git-info: ^5.0.0 + is-core-module: ^2.8.1 + semver: ^7.3.5 + validate-npm-package-license: ^3.0.4 + checksum: 292e0aa740e73d62f84bbd9d55d4bfc078155f32d5d7572c32c9807f96d543af0f43ff7e5c80bfa6238667123fd68bd83cd412eae9b27b85b271fb041f624528 + languageName: node + linkType: hard + +"normalize-path@npm:^3.0.0": + version: 3.0.0 + resolution: "normalize-path@npm:3.0.0" + checksum: 88eeb4da891e10b1318c4b2476b6e2ecbeb5ff97d946815ffea7794c31a89017c70d7f34b3c2ebf23ef4e9fc9fb99f7dffe36da22011b5b5c6ffa34f4873ec20 + languageName: node + linkType: hard + +"npm-bundled@npm:^1.1.1, npm-bundled@npm:^1.1.2": + version: 1.1.2 + resolution: "npm-bundled@npm:1.1.2" + dependencies: + npm-normalize-package-bin: ^1.0.1 + checksum: 6e599155ef28d0b498622f47f1ba189dfbae05095a1ed17cb3a5babf961e965dd5eab621f0ec6f0a98de774e5836b8f5a5ee639010d64f42850a74acec3d4d09 + languageName: node + linkType: hard + +"npm-install-checks@npm:^5.0.0": + version: 5.0.0 + resolution: "npm-install-checks@npm:5.0.0" + dependencies: + semver: ^7.1.1 + checksum: 0e7d1aae52b1fe9d3a0fd4a008850c7047931722dd49ee908afd13fd0297ac5ddb10964d9c59afcdaaa2ca04b51d75af2788f668c729ae71fec0e4cdac590ffc + languageName: node + linkType: hard + +"npm-normalize-package-bin@npm:^1.0.1": + version: 1.0.1 + resolution: "npm-normalize-package-bin@npm:1.0.1" + checksum: ae7f15155a1e3ace2653f12ddd1ee8eaa3c84452fdfbf2f1943e1de264e4b079c86645e2c55931a51a0a498cba31f70022a5219d5665fbcb221e99e58bc70122 + languageName: node + linkType: hard + +"npm-normalize-package-bin@npm:^2.0.0": + version: 2.0.0 + resolution: "npm-normalize-package-bin@npm:2.0.0" + checksum: 7c5379f9b188b564c4332c97bdd9a5d6b7b15f02b5823b00989d6a0e6fb31eb0280f02b0a924f930e1fcaf00e60fae333aec8923d2a4c7747613c7d629d8aa25 + languageName: node + linkType: hard + +"npm-package-arg@npm:8.1.1": + version: 8.1.1 + resolution: "npm-package-arg@npm:8.1.1" + dependencies: + hosted-git-info: ^3.0.6 + semver: ^7.0.0 + validate-npm-package-name: ^3.0.0 + checksum: 406c59f92d8fac5acbd1df62f4af8075e925af51131b6bc66245641ea71ddb0e60b3e2c56fafebd4e8ffc3ba0453e700a221a36a44740dc9f7488cec97ae4c55 + languageName: node + linkType: hard + +"npm-package-arg@npm:^9.0.0, npm-package-arg@npm:^9.0.1": + version: 9.1.2 + resolution: "npm-package-arg@npm:9.1.2" + dependencies: + hosted-git-info: ^5.0.0 + proc-log: ^2.0.1 + semver: ^7.3.5 + validate-npm-package-name: ^4.0.0 + checksum: 3793488843985ed71deb14fcba7c068d8ed03a18fd8f6b235c6a64465c9a25f60261598106d5cc8677c0bee9548e405c34c2e3c7a822e3113d3389351c745dfa + languageName: node + linkType: hard + +"npm-packlist@npm:5.1.1, npm-packlist@npm:^5.1.0": + version: 5.1.1 + resolution: "npm-packlist@npm:5.1.1" + dependencies: + glob: ^8.0.1 + ignore-walk: ^5.0.1 + npm-bundled: ^1.1.2 + npm-normalize-package-bin: ^1.0.1 + bin: + npm-packlist: bin/index.js + checksum: 28dab153744ceb4695b82a9032d14aa2bfb855d38344a09052673d07860a4d8725f808ed23996e6f2792c48e11f5d147632c159f798d2c24dac92b51a884f0c6 + languageName: node + linkType: hard + +"npm-pick-manifest@npm:^7.0.0": + version: 7.0.2 + resolution: "npm-pick-manifest@npm:7.0.2" + dependencies: + npm-install-checks: ^5.0.0 + npm-normalize-package-bin: ^2.0.0 + npm-package-arg: ^9.0.0 + semver: ^7.3.5 + checksum: a93ec449c12219a2be8556837db9ac5332914f304a69469bb6f1f47717adc6e262aa318f79166f763512688abd9c4e4b6a2d83b2dd19753a7abe5f0360f2c8bc + languageName: node + linkType: hard + +"npm-registry-fetch@npm:13.3.0, npm-registry-fetch@npm:^13.0.0, npm-registry-fetch@npm:^13.0.1": + version: 13.3.0 + resolution: "npm-registry-fetch@npm:13.3.0" + 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 + checksum: f153e471b7204eef260d4b774087291981a0d2909db7568540d77759409300d10f8e2a464af0da15ab1c4da4d6285c5d746ba09707dd55a4bd66f5f0ceafcf64 + languageName: node + linkType: hard + +"npm-run-all@npm:^4.1.5": + version: 4.1.5 + resolution: "npm-run-all@npm:4.1.5" + dependencies: + ansi-styles: ^3.2.1 + chalk: ^2.4.1 + cross-spawn: ^6.0.5 + memorystream: ^0.3.1 + minimatch: ^3.0.4 + pidtree: ^0.3.0 + read-pkg: ^3.0.0 + shell-quote: ^1.6.1 + string.prototype.padend: ^3.0.0 + bin: + npm-run-all: bin/npm-run-all/index.js + run-p: bin/run-p/index.js + run-s: bin/run-s/index.js + checksum: 373b72c6a36564da13c1642c1fd9bb4dcc756bce7a3648f883772f02661095319820834ff813762d2fee403e9b40c1cd27c8685807c107440f10eb19c006d4a0 + languageName: node + linkType: hard + +"npm-run-path@npm:^2.0.0": + version: 2.0.2 + resolution: "npm-run-path@npm:2.0.2" + dependencies: + path-key: ^2.0.0 + checksum: acd5ad81648ba4588ba5a8effb1d98d2b339d31be16826a118d50f182a134ac523172101b82eab1d01cb4c2ba358e857d54cfafd8163a1ffe7bd52100b741125 + languageName: node + linkType: hard + +"npm-run-path@npm:^4.0.1": + version: 4.0.1 + resolution: "npm-run-path@npm:4.0.1" + dependencies: + path-key: ^3.0.0 + checksum: 5374c0cea4b0bbfdfae62da7bbdf1e1558d338335f4cacf2515c282ff358ff27b2ecb91ffa5330a8b14390ac66a1e146e10700440c1ab868208430f56b5f4d23 + languageName: node + linkType: hard + +"npmlog@npm:^5.0.1": + version: 5.0.1 + resolution: "npmlog@npm:5.0.1" + dependencies: + are-we-there-yet: ^2.0.0 + console-control-strings: ^1.1.0 + gauge: ^3.0.0 + set-blocking: ^2.0.0 + checksum: 516b2663028761f062d13e8beb3f00069c5664925871a9b57989642ebe09f23ab02145bf3ab88da7866c4e112cafff72401f61a672c7c8a20edc585a7016ef5f + languageName: node + linkType: hard + +"npmlog@npm:^6.0.0, npmlog@npm:^6.0.2": + version: 6.0.2 + resolution: "npmlog@npm:6.0.2" + dependencies: + are-we-there-yet: ^3.0.0 + console-control-strings: ^1.1.0 + gauge: ^4.0.3 + set-blocking: ^2.0.0 + checksum: ae238cd264a1c3f22091cdd9e2b106f684297d3c184f1146984ecbe18aaa86343953f26b9520dedd1b1372bc0316905b736c1932d778dbeb1fcf5a1001390e2a + languageName: node + linkType: hard + +"nspell@npm:^2.0.0": + version: 2.1.4 + resolution: "nspell@npm:2.1.4" + dependencies: + is-buffer: ^2.0.0 + checksum: cbe65f0196a84fd4e3564042c1a3b831060d2a5cc7e235dc8dab9083ea2e22e08d193582c74bf34226d3336cff327c2b7d0827a4cfadecee809ff43136b11757 + languageName: node + linkType: hard + +"nwsapi@npm:^2.2.2": + version: 2.2.5 + resolution: "nwsapi@npm:2.2.5" + checksum: 3acfe387214e2a9a03960662ad600ecb41fc24385c9de91262a881608407f02d14686e5df3e6e87af0cf7b173ed2a6a202a569ab7bef376ec1841cd9b6cbf0a6 + languageName: node + linkType: hard + +"nx@npm:15.9.4, nx@npm:>=15.5.2 < 16": + version: 15.9.4 + resolution: "nx@npm:15.9.4" + dependencies: + "@nrwl/cli": 15.9.4 + "@nrwl/nx-darwin-arm64": 15.9.4 + "@nrwl/nx-darwin-x64": 15.9.4 + "@nrwl/nx-linux-arm-gnueabihf": 15.9.4 + "@nrwl/nx-linux-arm64-gnu": 15.9.4 + "@nrwl/nx-linux-arm64-musl": 15.9.4 + "@nrwl/nx-linux-x64-gnu": 15.9.4 + "@nrwl/nx-linux-x64-musl": 15.9.4 + "@nrwl/nx-win32-arm64-msvc": 15.9.4 + "@nrwl/nx-win32-x64-msvc": 15.9.4 + "@nrwl/tao": 15.9.4 + "@parcel/watcher": 2.0.4 + "@yarnpkg/lockfile": ^1.1.0 + "@yarnpkg/parsers": ^3.0.0-rc.18 + "@zkochan/js-yaml": 0.0.6 + axios: ^1.0.0 + chalk: ^4.1.0 + cli-cursor: 3.1.0 + cli-spinners: 2.6.1 + cliui: ^7.0.2 + dotenv: ~10.0.0 + enquirer: ~2.3.6 + fast-glob: 3.2.7 + figures: 3.2.0 + flat: ^5.0.2 + fs-extra: ^11.1.0 + glob: 7.1.4 + ignore: ^5.0.4 + js-yaml: 4.1.0 + jsonc-parser: 3.2.0 + lines-and-columns: ~2.0.3 + minimatch: 3.0.5 + npm-run-path: ^4.0.1 + open: ^8.4.0 + semver: 7.3.4 + string-width: ^4.2.3 + strong-log-transformer: ^2.1.0 + tar-stream: ~2.2.0 + tmp: ~0.2.1 + tsconfig-paths: ^4.1.2 + tslib: ^2.3.0 + v8-compile-cache: 2.3.0 + yargs: ^17.6.2 + yargs-parser: 21.1.1 + peerDependencies: + "@swc-node/register": ^1.4.2 + "@swc/core": ^1.2.173 + dependenciesMeta: + "@nrwl/nx-darwin-arm64": + optional: true + "@nrwl/nx-darwin-x64": + optional: true + "@nrwl/nx-linux-arm-gnueabihf": + optional: true + "@nrwl/nx-linux-arm64-gnu": + optional: true + "@nrwl/nx-linux-arm64-musl": + optional: true + "@nrwl/nx-linux-x64-gnu": + optional: true + "@nrwl/nx-linux-x64-musl": + optional: true + "@nrwl/nx-win32-arm64-msvc": + optional: true + "@nrwl/nx-win32-x64-msvc": + optional: true + peerDependenciesMeta: + "@swc-node/register": + optional: true + "@swc/core": + optional: true + bin: + nx: bin/nx.js + checksum: 61b92c070db1474462eb31f86cf3ac5a5ab2a3f454bed307a0b931cf09ef5ee883c90f05b4440f5760ff57f3965ecdd744320ff3b0475fba9b52004840173b5f + languageName: node + linkType: hard + +"object-assign@npm:^4.0.1, object-assign@npm:^4.1.1": + version: 4.1.1 + resolution: "object-assign@npm:4.1.1" + checksum: fcc6e4ea8c7fe48abfbb552578b1c53e0d194086e2e6bbbf59e0a536381a292f39943c6e9628af05b5528aa5e3318bb30d6b2e53cadaf5b8fe9e12c4b69af23f + languageName: node + linkType: hard + +"object-inspect@npm:^1.12.2, object-inspect@npm:^1.9.0": + version: 1.12.2 + resolution: "object-inspect@npm:1.12.2" + checksum: a534fc1b8534284ed71f25ce3a496013b7ea030f3d1b77118f6b7b1713829262be9e6243acbcb3ef8c626e2b64186112cb7f6db74e37b2789b9c789ca23048b2 + languageName: node + linkType: hard + +"object-keys@npm:^1.1.1": + version: 1.1.1 + resolution: "object-keys@npm:1.1.1" + checksum: b363c5e7644b1e1b04aa507e88dcb8e3a2f52b6ffd0ea801e4c7a62d5aa559affe21c55a07fd4b1fd55fc03a33c610d73426664b20032405d7b92a1414c34d6a + languageName: node + linkType: hard + +"object.assign@npm:^4.1.2, object.assign@npm:^4.1.4": + version: 4.1.4 + resolution: "object.assign@npm:4.1.4" + dependencies: + call-bind: ^1.0.2 + define-properties: ^1.1.4 + has-symbols: ^1.0.3 + object-keys: ^1.1.1 + checksum: 76cab513a5999acbfe0ff355f15a6a125e71805fcf53de4e9d4e082e1989bdb81d1e329291e1e4e0ae7719f0e4ef80e88fb2d367ae60500d79d25a6224ac8864 + languageName: node + linkType: hard + +"object.entries@npm:^1.1.6": + version: 1.1.6 + resolution: "object.entries@npm:1.1.6" + dependencies: + call-bind: ^1.0.2 + define-properties: ^1.1.4 + es-abstract: ^1.20.4 + checksum: 0f8c47517e6a9a980241eafe3b73de11e59511883173c2b93d67424a008e47e11b77c80e431ad1d8a806f6108b225a1cab9223e53e555776c612a24297117d28 + languageName: node + linkType: hard + +"object.fromentries@npm:^2.0.6": + version: 2.0.6 + resolution: "object.fromentries@npm:2.0.6" + dependencies: + call-bind: ^1.0.2 + define-properties: ^1.1.4 + es-abstract: ^1.20.4 + checksum: 453c6d694180c0c30df451b60eaf27a5b9bca3fb43c37908fd2b78af895803dc631242bcf05582173afa40d8d0e9c96e16e8874b39471aa53f3ac1f98a085d85 + languageName: node + linkType: hard + +"object.hasown@npm:^1.1.2": + version: 1.1.2 + resolution: "object.hasown@npm:1.1.2" + dependencies: + define-properties: ^1.1.4 + es-abstract: ^1.20.4 + checksum: b936572536db0cdf38eb30afd2f1026a8b6f2cc5d2c4497c9d9bbb01eaf3e980dead4fd07580cfdd098e6383e5a9db8212d3ea0c6bdd2b5e68c60aa7e3b45566 + languageName: node + linkType: hard + +"object.values@npm:^1.1.5, object.values@npm:^1.1.6": + version: 1.1.6 + resolution: "object.values@npm:1.1.6" + dependencies: + call-bind: ^1.0.2 + define-properties: ^1.1.4 + es-abstract: ^1.20.4 + checksum: f6fff9fd817c24cfd8107f50fb33061d81cd11bacc4e3dbb3852e9ff7692fde4dbce823d4333ea27cd9637ef1b6690df5fbb61f1ed314fa2959598dc3ae23d8e + languageName: node + linkType: hard + +"once@npm:^1.3.0, once@npm:^1.3.1, once@npm:^1.4.0": + version: 1.4.0 + resolution: "once@npm:1.4.0" + dependencies: + wrappy: 1 + checksum: cd0a88501333edd640d95f0d2700fbde6bff20b3d4d9bdc521bdd31af0656b5706570d6c6afe532045a20bb8dc0849f8332d6f2a416e0ba6d3d3b98806c7db68 + languageName: node + linkType: hard + +"onetime@npm:^2.0.0": + version: 2.0.1 + resolution: "onetime@npm:2.0.1" + dependencies: + mimic-fn: ^1.0.0 + checksum: bb44015ac7a525d0fb43b029a583d4ad359834632b4424ca209b438aacf6d669dda81b5edfbdb42c22636e607b276ba5589f46694a729e3bc27948ce26f4cc1a + languageName: node + linkType: hard + +"onetime@npm:^5.1.0, onetime@npm:^5.1.2": + version: 5.1.2 + resolution: "onetime@npm:5.1.2" + dependencies: + mimic-fn: ^2.1.0 + checksum: 2478859ef817fc5d4e9c2f9e5728512ddd1dbc9fb7829ad263765bb6d3b91ce699d6e2332eef6b7dff183c2f490bd3349f1666427eaba4469fba0ac38dfd0d34 + languageName: node + linkType: hard + +"ono@npm:^4.0.11": + version: 4.0.11 + resolution: "ono@npm:4.0.11" + dependencies: + format-util: ^1.0.3 + checksum: fabfdddb2e5e9875098e628871c86daf2fe0d1cbbfcdcc33093f47911eb4c386444410bc2bd3f6af9ff484deed46c6f9d88c8d49107ddec5350a9b089b283dd6 + languageName: node + linkType: hard + +"open@npm:^8.4.0": + version: 8.4.0 + resolution: "open@npm:8.4.0" + dependencies: + define-lazy-prop: ^2.0.0 + is-docker: ^2.1.1 + is-wsl: ^2.2.0 + checksum: e9545bec64cdbf30a0c35c1bdc310344adf8428a117f7d8df3c0af0a0a24c513b304916a6d9b11db0190ff7225c2d578885080b761ed46a3d5f6f1eebb98b63c + languageName: node + linkType: hard + +"opencollective-postinstall@npm:^2.0.2": + version: 2.0.3 + resolution: "opencollective-postinstall@npm:2.0.3" + bin: + opencollective-postinstall: index.js + checksum: 0a68c5cef135e46d11e665d5077398285d1ce5311c948e8327b435791c409744d4a6bb9c55bd6507fb5f2ef34b0ad920565adcdaf974cbdae701aead6f32b396 + languageName: node + linkType: hard + +"optionator@npm:^0.8.1": + version: 0.8.3 + resolution: "optionator@npm:0.8.3" + dependencies: + deep-is: ~0.1.3 + fast-levenshtein: ~2.0.6 + levn: ~0.3.0 + prelude-ls: ~1.1.2 + type-check: ~0.3.2 + word-wrap: ~1.2.3 + checksum: b8695ddf3d593203e25ab0900e265d860038486c943ff8b774f596a310f8ceebdb30c6832407a8198ba3ec9debe1abe1f51d4aad94843612db3b76d690c61d34 + languageName: node + linkType: hard + +"optionator@npm:^0.9.1": + version: 0.9.1 + resolution: "optionator@npm: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 + checksum: dbc6fa065604b24ea57d734261914e697bd73b69eff7f18e967e8912aa2a40a19a9f599a507fa805be6c13c24c4eae8c71306c239d517d42d4c041c942f508a0 + languageName: node + linkType: hard + +"ora@npm:^1.3.0": + version: 1.4.0 + resolution: "ora@npm:1.4.0" + dependencies: + chalk: ^2.1.0 + cli-cursor: ^2.1.0 + cli-spinners: ^1.0.1 + log-symbols: ^2.1.0 + checksum: 2a935721404cfb3196865b05fa69a916c338e4cb98cd27958df07d218a24cf59131fa2be116b9a9ea2ce875ee83a4a848758a5b42f5ca4a8c27ae59aabafa090 + languageName: node + linkType: hard + +"ora@npm:^5.4.1": + version: 5.4.1 + resolution: "ora@npm:5.4.1" + dependencies: + bl: ^4.1.0 + chalk: ^4.1.0 + cli-cursor: ^3.1.0 + cli-spinners: ^2.5.0 + is-interactive: ^1.0.0 + is-unicode-supported: ^0.1.0 + log-symbols: ^4.1.0 + strip-ansi: ^6.0.0 + wcwidth: ^1.0.1 + checksum: 28d476ee6c1049d68368c0dc922e7225e3b5600c3ede88fade8052837f9ed342625fdaa84a6209302587c8ddd9b664f71f0759833cbdb3a4cf81344057e63c63 + languageName: node + linkType: hard + +"os-tmpdir@npm:~1.0.2": + version: 1.0.2 + resolution: "os-tmpdir@npm:1.0.2" + checksum: 5666560f7b9f10182548bf7013883265be33620b1c1b4a4d405c25be2636f970c5488ff3e6c48de75b55d02bde037249fe5dbfbb4c0fb7714953d56aed062e6d + languageName: node + linkType: hard + +"p-debounce@npm:^2.1.0": + version: 2.1.0 + resolution: "p-debounce@npm:2.1.0" + checksum: a0f15041f41fbbc0ec26425f9f1e408958986558a4c6da0e8be1dd0005262cd3b79f30744e8392bce549613b830a0539bfd911874a6f1f621e65880a5ef71d04 + languageName: node + linkType: hard + +"p-event@npm:^4.1.0": + version: 4.2.0 + resolution: "p-event@npm:4.2.0" + dependencies: + p-timeout: ^3.1.0 + checksum: 8a3588f7a816a20726a3262dfeee70a631e3997e4773d23219176333eda55cce9a76219e3d2b441b331eb746e14fdb381eb2694ab9ff2fcf87c846462696fe89 + languageName: node + linkType: hard + +"p-finally@npm:^1.0.0": + version: 1.0.0 + resolution: "p-finally@npm:1.0.0" + checksum: 93a654c53dc805dd5b5891bab16eb0ea46db8f66c4bfd99336ae929323b1af2b70a8b0654f8f1eae924b2b73d037031366d645f1fd18b3d30cbd15950cc4b1d4 + languageName: node + linkType: hard + +"p-limit@npm:^1.1.0": + version: 1.3.0 + resolution: "p-limit@npm:1.3.0" + dependencies: + p-try: ^1.0.0 + checksum: 281c1c0b8c82e1ac9f81acd72a2e35d402bf572e09721ce5520164e9de07d8274451378a3470707179ad13240535558f4b277f02405ad752e08c7d5b0d54fbfd + languageName: node + linkType: hard + +"p-limit@npm:^2.2.0": + version: 2.3.0 + resolution: "p-limit@npm:2.3.0" + dependencies: + p-try: ^2.0.0 + checksum: 84ff17f1a38126c3314e91ecfe56aecbf36430940e2873dadaa773ffe072dc23b7af8e46d4b6485d302a11673fe94c6b67ca2cfbb60c989848b02100d0594ac1 + languageName: node + linkType: hard + +"p-limit@npm:^3.0.2, p-limit@npm:^3.1.0": + version: 3.1.0 + resolution: "p-limit@npm:3.1.0" + dependencies: + yocto-queue: ^0.1.0 + checksum: 7c3690c4dbf62ef625671e20b7bdf1cbc9534e83352a2780f165b0d3ceba21907e77ad63401708145ca4e25bfc51636588d89a8c0aeb715e6c37d1c066430360 + languageName: node + linkType: hard + +"p-locate@npm:^2.0.0": + version: 2.0.0 + resolution: "p-locate@npm:2.0.0" + dependencies: + p-limit: ^1.1.0 + checksum: e2dceb9b49b96d5513d90f715780f6f4972f46987dc32a0e18bc6c3fc74a1a5d73ec5f81b1398af5e58b99ea1ad03fd41e9181c01fa81b4af2833958696e3081 + languageName: node + linkType: hard + +"p-locate@npm:^4.1.0": + version: 4.1.0 + resolution: "p-locate@npm:4.1.0" + dependencies: + p-limit: ^2.2.0 + checksum: 513bd14a455f5da4ebfcb819ef706c54adb09097703de6aeaa5d26fe5ea16df92b48d1ac45e01e3944ce1e6aa2a66f7f8894742b8c9d6e276e16cd2049a2b870 + languageName: node + linkType: hard + +"p-locate@npm:^5.0.0": + version: 5.0.0 + resolution: "p-locate@npm:5.0.0" + dependencies: + p-limit: ^3.0.2 + checksum: 1623088f36cf1cbca58e9b61c4e62bf0c60a07af5ae1ca99a720837356b5b6c5ba3eb1b2127e47a06865fee59dd0453cad7cc844cda9d5a62ac1a5a51b7c86d3 + languageName: node + linkType: hard + +"p-map-series@npm:2.1.0": + version: 2.1.0 + resolution: "p-map-series@npm:2.1.0" + checksum: 69d4efbb6951c0dd62591d5a18c3af0af78496eae8b55791e049da239d70011aa3af727dece3fc9943e0bb3fd4fa64d24177cfbecc46efaf193179f0feeac486 + languageName: node + linkType: hard + +"p-map@npm:4.0.0, p-map@npm:^4.0.0": + version: 4.0.0 + resolution: "p-map@npm:4.0.0" + dependencies: + aggregate-error: ^3.0.0 + checksum: cb0ab21ec0f32ddffd31dfc250e3afa61e103ef43d957cc45497afe37513634589316de4eb88abdfd969fe6410c22c0b93ab24328833b8eb1ccc087fc0442a1c + languageName: node + linkType: hard + +"p-pipe@npm:3.1.0": + version: 3.1.0 + resolution: "p-pipe@npm:3.1.0" + checksum: ee9a2609685f742c6ceb3122281ec4453bbbcc80179b13e66fd139dcf19b1c327cf6c2fdfc815b548d6667e7eaefe5396323f6d49c4f7933e4cef47939e3d65c + languageName: node + linkType: hard + +"p-queue@npm:6.6.2": + version: 6.6.2 + resolution: "p-queue@npm:6.6.2" + dependencies: + eventemitter3: ^4.0.4 + p-timeout: ^3.2.0 + checksum: 832642fcc4ab6477b43e6d7c30209ab10952969ed211c6d6f2931be8a4f9935e3578c72e8cce053dc34f2eb6941a408a2c516a54904e989851a1a209cf19761c + languageName: node + linkType: hard + +"p-reduce@npm:2.1.0, p-reduce@npm:^2.0.0, p-reduce@npm:^2.1.0": + version: 2.1.0 + resolution: "p-reduce@npm:2.1.0" + checksum: 99b26d36066a921982f25c575e78355824da0787c486e3dd9fc867460e8bf17d5fb3ce98d006b41bdc81ffc0aa99edf5faee53d11fe282a20291fb721b0cb1c7 + languageName: node + linkType: hard + +"p-timeout@npm:^3.1.0, p-timeout@npm:^3.2.0": + version: 3.2.0 + resolution: "p-timeout@npm:3.2.0" + dependencies: + p-finally: ^1.0.0 + checksum: 3dd0eaa048780a6f23e5855df3dd45c7beacff1f820476c1d0d1bcd6648e3298752ba2c877aa1c92f6453c7dd23faaf13d9f5149fc14c0598a142e2c5e8d649c + languageName: node + linkType: hard + +"p-try@npm:^1.0.0": + version: 1.0.0 + resolution: "p-try@npm:1.0.0" + checksum: 3b5303f77eb7722144154288bfd96f799f8ff3e2b2b39330efe38db5dd359e4fb27012464cd85cb0a76e9b7edd1b443568cb3192c22e7cffc34989df0bafd605 + languageName: node + linkType: hard + +"p-try@npm:^2.0.0": + version: 2.2.0 + resolution: "p-try@npm:2.2.0" + checksum: f8a8e9a7693659383f06aec604ad5ead237c7a261c18048a6e1b5b85a5f8a067e469aa24f5bc009b991ea3b058a87f5065ef4176793a200d4917349881216cae + languageName: node + linkType: hard + +"p-waterfall@npm:2.1.1": + version: 2.1.1 + resolution: "p-waterfall@npm:2.1.1" + dependencies: + p-reduce: ^2.0.0 + checksum: 8588bb8b004ee37e559c7e940a480c1742c42725d477b0776ff30b894920a3e48bddf8f60aa0ae82773e500a8fc99d75e947c450e0c2ce187aff72cc1b248f6d + languageName: node + linkType: hard + +"packet-reader@npm:1.0.0": + version: 1.0.0 + resolution: "packet-reader@npm:1.0.0" + checksum: 0b7516f0cbf3e322aad591bed29ba544220088c53943145c0d9121a6f59182ad811f7fd6785a8979a34356aca69d97653689029964c5998dc02645633d88ffd7 + languageName: node + linkType: hard + +"pacote@npm:13.6.1, pacote@npm:^13.0.3, pacote@npm:^13.6.1": + version: 13.6.1 + resolution: "pacote@npm:13.6.1" + 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 + 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 + 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 + tar: ^6.1.11 + bin: + pacote: lib/bin.js + checksum: 26cebb59aea93d03ad051d82c4f2300beb333ded0f16ba92cfe976b5600157bd1ee034afe1c86406bbe5eacd51d413797939b08aa58adcf73f7680aead9e667f + languageName: node + linkType: hard + +"parent-module@npm:^1.0.0": + version: 1.0.1 + resolution: "parent-module@npm:1.0.1" + dependencies: + callsites: ^3.0.0 + checksum: 6ba8b255145cae9470cf5551eb74be2d22281587af787a2626683a6c20fbb464978784661478dd2a3f1dad74d1e802d403e1b03c1a31fab310259eec8ac560ff + languageName: node + linkType: hard + +"parse-conflict-json@npm:^2.0.1": + version: 2.0.2 + resolution: "parse-conflict-json@npm:2.0.2" + dependencies: + json-parse-even-better-errors: ^2.3.1 + just-diff: ^5.0.1 + just-diff-apply: ^5.2.0 + checksum: 076f65c958696586daefb153f59d575dfb59648be43116a21b74d5ff69ec63dd56f585a27cc2da56d8e64ca5abf0373d6619b8330c035131f8d1e990c8406378 + languageName: node + linkType: hard + +"parse-english@npm:^4.0.0": + version: 4.2.0 + resolution: "parse-english@npm:4.2.0" + dependencies: + nlcst-to-string: ^2.0.0 + parse-latin: ^4.0.0 + unist-util-modify-children: ^2.0.0 + unist-util-visit-children: ^1.0.0 + checksum: 38e3302585d47d9a90011e437006eed4452f033fcdaf1b6904bbd36441323d6ecbd4549e5f0a4ae5bbfaa636cc02eddd4620d6121ff27522e0f955ed95000899 + languageName: node + linkType: hard + +"parse-entities@npm:^1.1.0": + version: 1.2.2 + resolution: "parse-entities@npm:1.2.2" + dependencies: + character-entities: ^1.0.0 + character-entities-legacy: ^1.0.0 + character-reference-invalid: ^1.0.0 + is-alphanumerical: ^1.0.0 + is-decimal: ^1.0.0 + is-hexadecimal: ^1.0.0 + checksum: abf070c67912647a016efd5547607ecddc7e1963e59fc20c76797419b6699a3a9a522c067efa509feefedd37afd6c2a44200b3e5546a023a973c90e6e650b68a + languageName: node + linkType: hard + +"parse-json@npm:^4.0.0": + version: 4.0.0 + resolution: "parse-json@npm:4.0.0" + dependencies: + error-ex: ^1.3.1 + json-parse-better-errors: ^1.0.1 + checksum: 0fe227d410a61090c247e34fa210552b834613c006c2c64d9a05cfe9e89cf8b4246d1246b1a99524b53b313e9ac024438d0680f67e33eaed7e6f38db64cfe7b5 + languageName: node + linkType: hard + +"parse-json@npm:^5.0.0, parse-json@npm:^5.2.0": + version: 5.2.0 + resolution: "parse-json@npm:5.2.0" + dependencies: + "@babel/code-frame": ^7.0.0 + error-ex: ^1.3.1 + json-parse-even-better-errors: ^2.3.0 + lines-and-columns: ^1.1.6 + checksum: 62085b17d64da57f40f6afc2ac1f4d95def18c4323577e1eced571db75d9ab59b297d1d10582920f84b15985cbfc6b6d450ccbf317644cfa176f3ed982ad87e2 + languageName: node + linkType: hard + +"parse-latin@npm:^4.0.0, parse-latin@npm:^4.1.1": + version: 4.3.0 + resolution: "parse-latin@npm:4.3.0" + dependencies: + nlcst-to-string: ^2.0.0 + unist-util-modify-children: ^2.0.0 + unist-util-visit-children: ^1.0.0 + checksum: 4318342b85350f4da4dfa9613119648d4facbe61d653ef06e507f6c314b4d502b1d1956b0be2b71c9a3a863b9b6d42ce1a7af4680841d5b5d3d60097a288996b + languageName: node + linkType: hard + +"parse-path@npm:^7.0.0": + version: 7.0.0 + resolution: "parse-path@npm:7.0.0" + dependencies: + protocols: ^2.0.0 + checksum: 244b46523a58181d251dda9b888efde35d8afb957436598d948852f416d8c76ddb4f2010f9fc94218b4be3e5c0f716aa0d2026194a781e3b8981924142009302 + languageName: node + linkType: hard + +"parse-srcset@npm:^1.0.2": + version: 1.0.2 + resolution: "parse-srcset@npm:1.0.2" + checksum: 3a0380380c6082021fcce982f0b89fb8a493ce9dfd7d308e5e6d855201e80db8b90438649b31fdd82a3d6089a8ca17dccddaa2b730a718389af4c037b8539ebf + languageName: node + linkType: hard + +"parse-url@npm:^8.1.0": + version: 8.1.0 + resolution: "parse-url@npm:8.1.0" + dependencies: + parse-path: ^7.0.0 + checksum: b93e21ab4c93c7d7317df23507b41be7697694d4c94f49ed5c8d6288b01cba328fcef5ba388e147948eac20453dee0df9a67ab2012415189fff85973bdffe8d9 + languageName: node + linkType: hard + +"parse5@npm:^7.0.0, parse5@npm:^7.1.1": + version: 7.1.2 + resolution: "parse5@npm:7.1.2" + dependencies: + entities: ^4.4.0 + checksum: 59465dd05eb4c5ec87b76173d1c596e152a10e290b7abcda1aecf0f33be49646ea74840c69af975d7887543ea45564801736356c568d6b5e71792fd0f4055713 + languageName: node + linkType: hard + +"path-browserify@npm:^1.0.0": + version: 1.0.1 + resolution: "path-browserify@npm:1.0.1" + checksum: c6d7fa376423fe35b95b2d67990060c3ee304fc815ff0a2dc1c6c3cfaff2bd0d572ee67e18f19d0ea3bbe32e8add2a05021132ac40509416459fffee35200699 + languageName: node + linkType: hard + +"path-exists@npm:4.0.0, path-exists@npm:^4.0.0": + version: 4.0.0 + resolution: "path-exists@npm:4.0.0" + checksum: 505807199dfb7c50737b057dd8d351b82c033029ab94cb10a657609e00c1bc53b951cfdbccab8de04c5584d5eff31128ce6afd3db79281874a5ef2adbba55ed1 + languageName: node + linkType: hard + +"path-exists@npm:^3.0.0": + version: 3.0.0 + resolution: "path-exists@npm:3.0.0" + checksum: 96e92643aa34b4b28d0de1cd2eba52a1c5313a90c6542d03f62750d82480e20bfa62bc865d5cfc6165f5fcd5aeb0851043c40a39be5989646f223300021bae0a + 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 + languageName: node + linkType: hard + +"path-key@npm:^2.0.0, path-key@npm:^2.0.1": + version: 2.0.1 + resolution: "path-key@npm:2.0.1" + checksum: f7ab0ad42fe3fb8c7f11d0c4f849871e28fbd8e1add65c370e422512fc5887097b9cf34d09c1747d45c942a8c1e26468d6356e2df3f740bf177ab8ca7301ebfd + 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 + 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 + languageName: node + linkType: hard + +"path-scurry@npm:^1.7.0": + version: 1.9.2 + resolution: "path-scurry@npm:1.9.2" + dependencies: + lru-cache: ^9.1.1 + minipass: ^5.0.0 || ^6.0.2 + checksum: 92888dfb68e285043c6d3291c8e971d5d2bc2f5082f4d7b5392896f34be47024c9d0a8b688dd7ae6d125acc424699195474927cb4f00049a9b1ec7c4256fa8e0 + languageName: node + linkType: hard + +"path-type@npm:^3.0.0": + version: 3.0.0 + resolution: "path-type@npm:3.0.0" + dependencies: + pify: ^3.0.0 + checksum: 735b35e256bad181f38fa021033b1c33cfbe62ead42bb2222b56c210e42938eecb272ae1949f3b6db4ac39597a61b44edd8384623ec4d79bfdc9a9c0f12537a6 + languageName: node + linkType: hard + +"path-type@npm:^4.0.0": + version: 4.0.0 + resolution: "path-type@npm:4.0.0" + checksum: 5b1e2daa247062061325b8fdbfd1fb56dde0a448fb1455453276ea18c60685bdad23a445dc148cf87bc216be1573357509b7d4060494a6fd768c7efad833ee45 + languageName: node + linkType: hard + +"pg-connection-string@npm:0.1.3": + version: 0.1.3 + resolution: "pg-connection-string@npm:0.1.3" + checksum: 0ec5612a9c59b22fe2353165eea2f98d403bfe216678a88549610a27f23d60f922db19969e1b7c020904b6d15499674f69e078566d14c7969e54a8b720acd932 + languageName: node + linkType: hard + +"pg-int8@npm:1.0.1": + version: 1.0.1 + resolution: "pg-int8@npm:1.0.1" + checksum: a1e3a05a69005ddb73e5f324b6b4e689868a447c5fa280b44cd4d04e6916a344ac289e0b8d2695d66e8e89a7fba023affb9e0e94778770ada5df43f003d664c9 + languageName: node + linkType: hard + +"pg-packet-stream@npm:^1.1.0": + version: 1.1.0 + resolution: "pg-packet-stream@npm:1.1.0" + checksum: 5da0fcb7c878a46f299543b098b67243d20bcd845f5eb46afd1dcef9782a7a8759fab3ac13b1b4b40646f534dc301327be9084e3bfbb07f312cac4c81e22a1b9 + languageName: node + linkType: hard + +"pg-pool@npm:^2.0.10": + version: 2.0.10 + resolution: "pg-pool@npm:2.0.10" + peerDependencies: + pg: ">5.0" + checksum: 5913584d3d1611747f445dae8ae1595140be4ef6eedc8164b45fe7ee48aed99f83853d93ec75b21021b2f593983a624ad6cf8e1dbed759590a3e04459e39171e + languageName: node + linkType: hard + +"pg-protocol@npm:^1.2.0": + version: 1.5.0 + resolution: "pg-protocol@npm:1.5.0" + checksum: b839d12cafe942ef9cbc5b13c174eb2356804fb4fe8ead8279f46a36be90722d19a91409955beb8a3d5301639c44854e49749de4aef02dc361fee3e2a61fb1e4 + languageName: node + linkType: hard + +"pg-types@npm:^2.1.0, pg-types@npm:^2.2.0": + version: 2.2.0 + resolution: "pg-types@npm:2.2.0" + dependencies: + pg-int8: 1.0.1 + postgres-array: ~2.0.0 + postgres-bytea: ~1.0.0 + postgres-date: ~1.0.4 + postgres-interval: ^1.1.0 + checksum: bf4ec3f594743442857fb3a8dfe5d2478a04c98f96a0a47365014557cbc0b4b0cee01462c79adca863b93befbf88f876299b75b72c665b5fb84a2c94fbd10316 + languageName: node + linkType: hard + +"pg@npm:^7.4.3": + version: 7.18.2 + resolution: "pg@npm:7.18.2" + dependencies: + buffer-writer: 2.0.0 + packet-reader: 1.0.0 + pg-connection-string: 0.1.3 + pg-packet-stream: ^1.1.0 + pg-pool: ^2.0.10 + pg-types: ^2.1.0 + pgpass: 1.x + semver: 4.3.2 + checksum: aa4906baa14406aa07f2e3c7ef4c835f9be1836d7f1764cdc45d0aa8bc1baaf36aff05a0b1ad766f58b93055936de7f50a6755e6eed26c369f33b725d116fad0 + languageName: node + linkType: hard + +"pgpass@npm:1.x": + version: 1.0.5 + resolution: "pgpass@npm:1.0.5" + dependencies: + split2: ^4.1.0 + checksum: 947ac096c031eebdf08d989de2e9f6f156b8133d6858c7c2c06c041e1e71dda6f5f3bad3c0ec1e96a09497bbc6ef89e762eefe703b5ef9cb2804392ec52ec400 + languageName: node + linkType: hard + +"picocolors@npm:^1.0.0": + version: 1.0.0 + resolution: "picocolors@npm:1.0.0" + checksum: a2e8092dd86c8396bdba9f2b5481032848525b3dc295ce9b57896f931e63fc16f79805144321f72976383fc249584672a75cc18d6777c6b757603f372f745981 + languageName: node + linkType: hard + +"picomatch@npm:^2.0.4, picomatch@npm:^2.2.3, picomatch@npm:^2.3.1": + version: 2.3.1 + resolution: "picomatch@npm:2.3.1" + checksum: 050c865ce81119c4822c45d3c84f1ced46f93a0126febae20737bd05ca20589c564d6e9226977df859ed5e03dc73f02584a2b0faad36e896936238238b0446cf + languageName: node + linkType: hard + +"pidtree@npm:^0.3.0": + version: 0.3.1 + resolution: "pidtree@npm:0.3.1" + bin: + pidtree: bin/pidtree.js + checksum: eb49025099f1af89a4696f7673351421f13420f3397b963c901fe23a1c9c2ff50f4750321970d4472c0ffbb065e4a6c3c27f75e226cc62284b19e21d32ce7012 + languageName: node + linkType: hard + +"pify@npm:5.0.0, pify@npm:^5.0.0": + version: 5.0.0 + resolution: "pify@npm:5.0.0" + checksum: 443e3e198ad6bfa8c0c533764cf75c9d5bc976387a163792fb553ffe6ce923887cf14eebf5aea9b7caa8eab930da8c33612990ae85bd8c2bc18bedb9eae94ecb + languageName: node + linkType: hard + +"pify@npm:^2.3.0": + version: 2.3.0 + resolution: "pify@npm:2.3.0" + checksum: 9503aaeaf4577acc58642ad1d25c45c6d90288596238fb68f82811c08104c800e5a7870398e9f015d82b44ecbcbef3dc3d4251a1cbb582f6e5959fe09884b2ba + languageName: node + linkType: hard + +"pify@npm:^3.0.0": + version: 3.0.0 + resolution: "pify@npm:3.0.0" + checksum: 6cdcbc3567d5c412450c53261a3f10991665d660961e06605decf4544a61a97a54fefe70a68d5c37080ff9d6f4cf51444c90198d1ba9f9309a6c0d6e9f5c4fde + languageName: node + linkType: hard + +"pify@npm:^4.0.1": + version: 4.0.1 + resolution: "pify@npm:4.0.1" + checksum: 9c4e34278cb09987685fa5ef81499c82546c033713518f6441778fbec623fc708777fe8ac633097c72d88470d5963094076c7305cafc7ad340aae27cfacd856b + languageName: node + linkType: hard + +"pirates@npm:^4.0.4": + version: 4.0.5 + resolution: "pirates@npm:4.0.5" + checksum: c9994e61b85260bec6c4fc0307016340d9b0c4f4b6550a957afaaff0c9b1ad58fbbea5cfcf083860a25cb27a375442e2b0edf52e2e1e40e69934e08dcc52d227 + languageName: node + linkType: hard + +"pkg-dir@npm:^4.2.0": + version: 4.2.0 + resolution: "pkg-dir@npm:4.2.0" + dependencies: + find-up: ^4.0.0 + checksum: 9863e3f35132bf99ae1636d31ff1e1e3501251d480336edb1c211133c8d58906bed80f154a1d723652df1fda91e01c7442c2eeaf9dc83157c7ae89087e43c8d6 + languageName: node + linkType: hard + +"please-upgrade-node@npm:^3.2.0": + version: 3.2.0 + resolution: "please-upgrade-node@npm:3.2.0" + dependencies: + semver-compare: ^1.0.0 + checksum: d87c41581a2a022fbe25965a97006238cd9b8cbbf49b39f78d262548149a9d30bd2bdf35fec3d810e0001e630cd46ef13c7e19c389dea8de7e64db271a2381bb + languageName: node + linkType: hard + +"plur@npm:^3.0.0": + version: 3.1.1 + resolution: "plur@npm:3.1.1" + dependencies: + irregular-plurals: ^2.0.0 + checksum: d6e353d660c8c1e4dc982a6898a50953c1d8cbdebfb1cc18a4bbc020aa4a86192ac8417b9e153372b642e365df3271b7cde4d7563d63993f81ea9010e35c4c47 + languageName: node + linkType: hard + +"postcss-modules-extract-imports@npm:^3.0.0": + version: 3.0.0 + resolution: "postcss-modules-extract-imports@npm:3.0.0" + peerDependencies: + postcss: ^8.1.0 + checksum: 4b65f2f1382d89c4bc3c0a1bdc5942f52f3cb19c110c57bd591ffab3a5fee03fcf831604168205b0c1b631a3dce2255c70b61aaae3ef39d69cd7eb450c2552d2 + languageName: node + linkType: hard + +"postcss-modules-local-by-default@npm:^4.0.3": + version: 4.0.3 + resolution: "postcss-modules-local-by-default@npm:4.0.3" + dependencies: + icss-utils: ^5.0.0 + postcss-selector-parser: ^6.0.2 + postcss-value-parser: ^4.1.0 + peerDependencies: + postcss: ^8.1.0 + checksum: 2f8083687f3d6067885f8863dd32dbbb4f779cfcc7e52c17abede9311d84faf6d3ed8760e7c54c6380281732ae1f78e5e56a28baf3c271b33f450a11c9e30485 + languageName: node + linkType: hard + +"postcss-modules-scope@npm:^3.0.0": + version: 3.0.0 + resolution: "postcss-modules-scope@npm:3.0.0" + dependencies: + postcss-selector-parser: ^6.0.4 + peerDependencies: + postcss: ^8.1.0 + checksum: 330b9398dbd44c992c92b0dc612c0626135e2cc840fee41841eb61247a6cfed95af2bd6f67ead9dd9d0bb41f5b0367129d93c6e434fa3e9c58ade391d9a5a138 + languageName: node + linkType: hard + +"postcss-modules-values@npm:^4.0.0": + version: 4.0.0 + resolution: "postcss-modules-values@npm:4.0.0" + dependencies: + icss-utils: ^5.0.0 + peerDependencies: + postcss: ^8.1.0 + checksum: f7f2cdf14a575b60e919ad5ea52fed48da46fe80db2733318d71d523fc87db66c835814940d7d05b5746b0426e44661c707f09bdb83592c16aea06e859409db6 + languageName: node + linkType: hard + +"postcss-selector-parser@npm:^6.0.2, postcss-selector-parser@npm:^6.0.4": + version: 6.0.11 + resolution: "postcss-selector-parser@npm:6.0.11" + dependencies: + cssesc: ^3.0.0 + util-deprecate: ^1.0.2 + checksum: 0b01aa9c2d2c8dbeb51e9b204796b678284be9823abc8d6d40a8b16d4149514e922c264a8ed4deb4d6dbced564b9be390f5942c058582d8656351516d6c49cde + languageName: node + linkType: hard + +"postcss-value-parser@npm:^4.1.0, postcss-value-parser@npm:^4.2.0": + version: 4.2.0 + resolution: "postcss-value-parser@npm:4.2.0" + checksum: 819ffab0c9d51cf0acbabf8996dffbfafbafa57afc0e4c98db88b67f2094cb44488758f06e5da95d7036f19556a4a732525e84289a425f4f6fd8e412a9d7442f + languageName: node + linkType: hard + +"postcss@npm:^8.3.11, postcss@npm:^8.4.21": + version: 8.4.24 + resolution: "postcss@npm:8.4.24" + dependencies: + nanoid: ^3.3.6 + picocolors: ^1.0.0 + source-map-js: ^1.0.2 + checksum: 814e2126dacfea313588eda09cc99a9b4c26ec55c059188aa7a916d20d26d483483106dc5ff9e560731b59f45c5bb91b945dfadc670aed875cc90ddbbf4e787d + languageName: node + linkType: hard + +"postgres-array@npm:~2.0.0": + version: 2.0.0 + resolution: "postgres-array@npm:2.0.0" + checksum: 0e1e659888147c5de579d229a2d95c0d83ebdbffc2b9396d890a123557708c3b758a0a97ed305ce7f58edfa961fa9f0bbcd1ea9f08b6e5df73322e683883c464 + languageName: node + linkType: hard + +"postgres-bytea@npm:~1.0.0": + version: 1.0.0 + resolution: "postgres-bytea@npm:1.0.0" + checksum: d844ae4ca7a941b70e45cac1261a73ee8ed39d72d3d74ab1d645248185a1b7f0ac91a3c63d6159441020f4e1f7fe64689ac56536a307b31cef361e5187335090 + languageName: node + linkType: hard + +"postgres-date@npm:~1.0.4": + version: 1.0.7 + resolution: "postgres-date@npm:1.0.7" + checksum: 5745001d47e51cd767e46bcb1710649cd705d91a24d42fa661c454b6dcbb7353c066a5047983c90a626cd3bbfea9e626cc6fa84a35ec57e5bbb28b49f78e13ed + languageName: node + linkType: hard + +"postgres-interval@npm:^1.1.0": + version: 1.2.0 + resolution: "postgres-interval@npm:1.2.0" + dependencies: + xtend: ^4.0.0 + checksum: 746b71f93805ae33b03528e429dc624706d1f9b20ee81bf743263efb6a0cd79ae02a642a8a480dbc0f09547b4315ab7df6ce5ec0be77ed700bac42730f5c76b2 + languageName: node + linkType: hard + +"precise-commits@npm:^1.0.2": + version: 1.0.2 + resolution: "precise-commits@npm:1.0.2" + dependencies: + diff-match-patch: ^1.0.0 + execa: ^0.9.0 + find-up: ^2.1.0 + glob: ^7.1.2 + ignore: ^3.3.7 + mri: ^1.1.0 + ora: ^1.3.0 + peerDependencies: + prettier: ">=1.8.0" + bin: + precise-commits: bin/index.js + checksum: d7c90202ff9d397ed186ea9adc82cd58144c8b27264cadea9e31fc1e97c45aaee532310473fd773f4a476900535f0048d60b3e7fd3f5ebfb4111e7973fb5d022 + languageName: node + linkType: hard + +"prelude-ls@npm:^1.2.1": + version: 1.2.1 + resolution: "prelude-ls@npm:1.2.1" + checksum: cd192ec0d0a8e4c6da3bb80e4f62afe336df3f76271ac6deb0e6a36187133b6073a19e9727a1ff108cd8b9982e4768850d413baa71214dd80c7979617dca827a + languageName: node + linkType: hard + +"prelude-ls@npm:~1.1.2": + version: 1.1.2 + resolution: "prelude-ls@npm:1.1.2" + checksum: c4867c87488e4a0c233e158e4d0d5565b609b105d75e4c05dc760840475f06b731332eb93cc8c9cecb840aa8ec323ca3c9a56ad7820ad2e63f0261dadcb154e4 + languageName: node + linkType: hard + +"prettier-linter-helpers@npm:^1.0.0": + version: 1.0.0 + resolution: "prettier-linter-helpers@npm:1.0.0" + dependencies: + fast-diff: ^1.1.2 + checksum: 00ce8011cf6430158d27f9c92cfea0a7699405633f7f1d4a45f07e21bf78e99895911cbcdc3853db3a824201a7c745bd49bfea8abd5fb9883e765a90f74f8392 + languageName: node + linkType: hard + +"prettier@npm:^2.8.1": + version: 2.8.1 + resolution: "prettier@npm:2.8.1" + bin: + prettier: bin-prettier.js + checksum: 4f21a0f1269f76fb36f54e9a8a1ea4c11e27478958bf860661fb4b6d7ac69aac1581f8724fa98ea3585e56d42a2ea317a17ff6e3324f40cb11ff9e20b73785cc + languageName: node + linkType: hard + +"pretty-format@npm:^29.0.0, pretty-format@npm:^29.6.1": + version: 29.6.1 + resolution: "pretty-format@npm:29.6.1" + dependencies: + "@jest/schemas": ^29.6.0 + ansi-styles: ^5.0.0 + react-is: ^18.0.0 + checksum: 6f923a2379a37a425241dc223d76f671c73c4f37dba158050575a54095867d565c068b441843afdf3d7c37bed9df4bbadf46297976e60d4149972b779474203a + languageName: node + linkType: hard + +"proc-log@npm:^2.0.0, proc-log@npm:^2.0.1": + version: 2.0.1 + resolution: "proc-log@npm:2.0.1" + checksum: f6f23564ff759097db37443e6e2765af84979a703d2c52c1b9df506ee9f87caa101ba49d8fdc115c1a313ec78e37e8134704e9069e6a870f3499d98bb24c436f + 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 + languageName: node + linkType: hard + +"process@npm:^0.11.10": + version: 0.11.10 + resolution: "process@npm:0.11.10" + checksum: bfcce49814f7d172a6e6a14d5fa3ac92cc3d0c3b9feb1279774708a719e19acd673995226351a082a9ae99978254e320ccda4240ddc474ba31a76c79491ca7c3 + languageName: node + linkType: hard + +"promise-all-reject-late@npm:^1.0.0": + version: 1.0.1 + resolution: "promise-all-reject-late@npm:1.0.1" + checksum: d7d61ac412352e2c8c3463caa5b1c3ca0f0cc3db15a09f180a3da1446e33d544c4261fc716f772b95e4c27d559cfd2388540f44104feb356584f9c73cfb9ffcb + languageName: node + linkType: hard + +"promise-call-limit@npm:^1.0.1": + version: 1.0.1 + resolution: "promise-call-limit@npm:1.0.1" + checksum: e69aed17f5f34bbd7aecff28faedb456e3500a08af31ee759ef75f2d8c2219d7c0e59f153f4d8c339056de8c304e0dd4acc500c339e7ea1e9c0e7bb1444367c8 + languageName: node + linkType: hard + +"promise-inflight@npm:^1.0.1": + version: 1.0.1 + resolution: "promise-inflight@npm:1.0.1" + checksum: 22749483091d2c594261517f4f80e05226d4d5ecc1fc917e1886929da56e22b5718b7f2a75f3807e7a7d471bc3be2907fe92e6e8f373ddf5c64bae35b5af3981 + languageName: node + linkType: hard + +"promise-retry@npm:^2.0.1": + version: 2.0.1 + resolution: "promise-retry@npm:2.0.1" + dependencies: + err-code: ^2.0.2 + retry: ^0.12.0 + checksum: f96a3f6d90b92b568a26f71e966cbbc0f63ab85ea6ff6c81284dc869b41510e6cdef99b6b65f9030f0db422bf7c96652a3fff9f2e8fb4a0f069d8f4430359429 + languageName: node + linkType: hard + +"prompts@npm:^2.0.1": + version: 2.4.2 + resolution: "prompts@npm:2.4.2" + dependencies: + kleur: ^3.0.3 + sisteransi: ^1.0.5 + checksum: d8fd1fe63820be2412c13bfc5d0a01909acc1f0367e32396962e737cb2fc52d004f3302475d5ce7d18a1e8a79985f93ff04ee03007d091029c3f9104bffc007d + languageName: node + linkType: hard + +"promzard@npm:^0.3.0": + version: 0.3.0 + resolution: "promzard@npm:0.3.0" + dependencies: + read: 1 + checksum: 443a3b39ac916099988ee0161ab4e22edd1fa27e3d39a38d60e48c11ca6df3f5a90bfe44d95af06ed8659c4050b789ffe64c3f9f8e49a4bea1ea19105c98445a + languageName: node + linkType: hard + +"prop-types@npm:^15.8.1": + version: 15.8.1 + resolution: "prop-types@npm:15.8.1" + dependencies: + loose-envify: ^1.4.0 + object-assign: ^4.1.1 + react-is: ^16.13.1 + checksum: c056d3f1c057cb7ff8344c645450e14f088a915d078dcda795041765047fa080d38e5d626560ccaac94a4e16e3aa15f3557c1a9a8d1174530955e992c675e459 + languageName: node + linkType: hard + +"proto-list@npm:~1.2.1": + version: 1.2.4 + resolution: "proto-list@npm:1.2.4" + checksum: 4d4826e1713cbfa0f15124ab0ae494c91b597a3c458670c9714c36e8baddf5a6aad22842776f2f5b137f259c8533e741771445eb8df82e861eea37a6eaba03f7 + languageName: node + linkType: hard + +"protocols@npm:^2.0.0, protocols@npm:^2.0.1": + version: 2.0.1 + resolution: "protocols@npm:2.0.1" + checksum: 4a9bef6aa0449a0245ded319ac3cbfd032c3e76ebb562777037a3a832c99253d0e8bc2847f7be350236df620a11f7d4fe683ea7f59a2cc14c69f746b6259eda4 + languageName: node + linkType: hard + +"proxy-from-env@npm:^1.1.0": + version: 1.1.0 + resolution: "proxy-from-env@npm:1.1.0" + checksum: ed7fcc2ba0a33404958e34d95d18638249a68c430e30fcb6c478497d72739ba64ce9810a24f53a7d921d0c065e5b78e3822759800698167256b04659366ca4d4 + languageName: node + linkType: hard + +"pseudomap@npm:^1.0.2": + version: 1.0.2 + resolution: "pseudomap@npm:1.0.2" + checksum: 856c0aae0ff2ad60881168334448e898ad7a0e45fe7386d114b150084254c01e200c957cf378378025df4e052c7890c5bd933939b0e0d2ecfcc1dc2f0b2991f5 + languageName: node + linkType: hard + +"psl@npm:^1.1.33": + version: 1.9.0 + resolution: "psl@npm:1.9.0" + checksum: 20c4277f640c93d393130673f392618e9a8044c6c7bf61c53917a0fddb4952790f5f362c6c730a9c32b124813e173733f9895add8d26f566ed0ea0654b2e711d + languageName: node + linkType: hard + +"pump@npm:^3.0.0": + version: 3.0.0 + resolution: "pump@npm:3.0.0" + dependencies: + end-of-stream: ^1.1.0 + once: ^1.3.1 + checksum: e42e9229fba14732593a718b04cb5e1cfef8254544870997e0ecd9732b189a48e1256e4e5478148ecb47c8511dca2b09eae56b4d0aad8009e6fac8072923cfc9 + languageName: node + linkType: hard + +"punycode@npm:^2.1.0, punycode@npm:^2.1.1": + version: 2.3.0 + resolution: "punycode@npm:2.3.0" + checksum: 39f760e09a2a3bbfe8f5287cf733ecdad69d6af2fe6f97ca95f24b8921858b91e9ea3c9eeec6e08cede96181b3bb33f95c6ffd8c77e63986508aa2e8159fa200 + languageName: node + linkType: hard + +"pure-rand@npm:^6.0.0": + version: 6.0.2 + resolution: "pure-rand@npm:6.0.2" + checksum: 79de33876a4f515d759c48e98d00756bbd916b4ea260cc572d7adfa4b62cace9952e89f0241d0410214554503d25061140fe325c66f845213d2b1728ba8d413e + languageName: node + linkType: hard + +"pyright@npm:^1.1": + version: 1.1.267 + resolution: "pyright@npm:1.1.267" + bin: + pyright: index.js + pyright-langserver: langserver.index.js + checksum: 13487fd24fd15a9ede69d61f1d36999c42df59325abfd7843744b4b1d34015d08edd20198116660033676443531f43407587da201ddcf250f3bd12af1e495d7d + languageName: node + linkType: hard + +"q@npm:^1.5.1": + version: 1.5.1 + resolution: "q@npm:1.5.1" + checksum: 147baa93c805bc1200ed698bdf9c72e9e42c05f96d007e33a558b5fdfd63e5ea130e99313f28efc1783e90e6bdb4e48b67a36fcc026b7b09202437ae88a1fb12 + languageName: node + linkType: hard + +"querystringify@npm:^2.1.1": + version: 2.2.0 + resolution: "querystringify@npm:2.2.0" + checksum: 5641ea231bad7ef6d64d9998faca95611ed4b11c2591a8cae741e178a974f6a8e0ebde008475259abe1621cb15e692404e6b6626e927f7b849d5c09392604b15 + languageName: node + linkType: hard + +"queue-microtask@npm:^1.2.2": + version: 1.2.3 + resolution: "queue-microtask@npm:1.2.3" + checksum: b676f8c040cdc5b12723ad2f91414d267605b26419d5c821ff03befa817ddd10e238d22b25d604920340fd73efd8ba795465a0377c4adf45a4a41e4234e42dc4 + languageName: node + linkType: hard + +"quick-lru@npm:^4.0.1": + version: 4.0.1 + resolution: "quick-lru@npm:4.0.1" + checksum: bea46e1abfaa07023e047d3cf1716a06172c4947886c053ede5c50321893711577cb6119360f810cc3ffcd70c4d7db4069c3cee876b358ceff8596e062bd1154 + languageName: node + linkType: hard + +"quotation@npm:^1.1.0": + version: 1.1.3 + resolution: "quotation@npm:1.1.3" + checksum: 0d713244f800d92a467d0549081c43da4969aa35bc2a26ce3e9ccfcd5bb79958f9153da6c096efc8aefb4a097a28d1b73961c1d2765d845fe81b7c5ead903831 + languageName: node + linkType: hard + +"randombytes@npm:^2.1.0": + version: 2.1.0 + resolution: "randombytes@npm:2.1.0" + dependencies: + safe-buffer: ^5.1.0 + checksum: d779499376bd4cbb435ef3ab9a957006c8682f343f14089ed5f27764e4645114196e75b7f6abf1cbd84fd247c0cb0651698444df8c9bf30e62120fbbc52269d6 + languageName: node + linkType: hard + +"react-dom@npm:^18.2.0": + version: 18.2.0 + resolution: "react-dom@npm:18.2.0" + dependencies: + loose-envify: ^1.1.0 + scheduler: ^0.23.0 + peerDependencies: + react: ^18.2.0 + checksum: 7d323310bea3a91be2965f9468d552f201b1c27891e45ddc2d6b8f717680c95a75ae0bc1e3f5cf41472446a2589a75aed4483aee8169287909fcd59ad149e8cc + languageName: node + linkType: hard + +"react-is@npm:^16.13.1": + version: 16.13.1 + resolution: "react-is@npm:16.13.1" + checksum: f7a19ac3496de32ca9ae12aa030f00f14a3d45374f1ceca0af707c831b2a6098ef0d6bdae51bd437b0a306d7f01d4677fcc8de7c0d331eb47ad0f46130e53c5f + languageName: node + linkType: hard + +"react-is@npm:^18.0.0, react-is@npm:^18.2.0": + version: 18.2.0 + resolution: "react-is@npm:18.2.0" + checksum: e72d0ba81b5922759e4aff17e0252bd29988f9642ed817f56b25a3e217e13eea8a7f2322af99a06edb779da12d5d636e9fda473d620df9a3da0df2a74141d53e + languageName: node + linkType: hard + +"react@npm:^18.2.0": + version: 18.2.0 + resolution: "react@npm:18.2.0" + dependencies: + loose-envify: ^1.1.0 + checksum: 88e38092da8839b830cda6feef2e8505dec8ace60579e46aa5490fc3dc9bba0bd50336507dc166f43e3afc1c42939c09fe33b25fae889d6f402721dcd78fca1b + languageName: node + linkType: hard + +"read-cmd-shim@npm:3.0.0, read-cmd-shim@npm:^3.0.0": + version: 3.0.0 + resolution: "read-cmd-shim@npm:3.0.0" + checksum: b518c6026f3320e30b692044f6ff5c4dc80f9c71261296da8994101b569b26b12b8e5df397bba2d4691dd3a3a2f770a1eca7be18a69ec202fac6dcfadc5016fd + languageName: node + linkType: hard + +"read-package-json-fast@npm:^2.0.2, read-package-json-fast@npm:^2.0.3": + version: 2.0.3 + resolution: "read-package-json-fast@npm:2.0.3" + dependencies: + json-parse-even-better-errors: ^2.3.0 + npm-normalize-package-bin: ^1.0.1 + checksum: fca37b3b2160b9dda7c5588b767f6a2b8ce68d03a044000e568208e20bea0cf6dd2de17b90740ce8da8b42ea79c0b3859649dadf29510bbe77224ea65326a903 + languageName: node + linkType: hard + +"read-package-json@npm:5.0.1, read-package-json@npm:^5.0.0": + version: 5.0.1 + resolution: "read-package-json@npm:5.0.1" + 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 + checksum: e8c2ad72df1f17e71268feabdb9bb0153ed2c7d38a05b759c5c49cf368a754bdd3c0e8a279fbc8d707802ff91d2cf144a995e6ebd5534de2848d52ab2c14034d + languageName: node + linkType: hard + +"read-pkg-up@npm:^3.0.0": + version: 3.0.0 + resolution: "read-pkg-up@npm:3.0.0" + dependencies: + find-up: ^2.0.0 + read-pkg: ^3.0.0 + checksum: 16175573f2914ab9788897bcbe2a62b5728d0075e62285b3680cebe97059e2911e0134a062cf6e51ebe3e3775312bc788ac2039ed6af38ec68d2c10c6f2b30fb + languageName: node + linkType: hard + +"read-pkg-up@npm:^7.0.1": + version: 7.0.1 + resolution: "read-pkg-up@npm:7.0.1" + dependencies: + find-up: ^4.1.0 + read-pkg: ^5.2.0 + type-fest: ^0.8.1 + checksum: e4e93ce70e5905b490ca8f883eb9e48b5d3cebc6cd4527c25a0d8f3ae2903bd4121c5ab9c5a3e217ada0141098eeb661313c86fa008524b089b8ed0b7f165e44 + languageName: node + linkType: hard + +"read-pkg@npm:^3.0.0": + version: 3.0.0 + resolution: "read-pkg@npm:3.0.0" + dependencies: + load-json-file: ^4.0.0 + normalize-package-data: ^2.3.2 + path-type: ^3.0.0 + checksum: 398903ebae6c7e9965419a1062924436cc0b6f516c42c4679a90290d2f87448ed8f977e7aa2dbba4aa1ac09248628c43e493ac25b2bc76640e946035200e34c6 + languageName: node + linkType: hard + +"read-pkg@npm:^5.2.0": + version: 5.2.0 + resolution: "read-pkg@npm:5.2.0" + dependencies: + "@types/normalize-package-data": ^2.4.0 + normalize-package-data: ^2.5.0 + parse-json: ^5.0.0 + type-fest: ^0.6.0 + checksum: eb696e60528b29aebe10e499ba93f44991908c57d70f2d26f369e46b8b9afc208ef11b4ba64f67630f31df8b6872129e0a8933c8c53b7b4daf0eace536901222 + languageName: node + linkType: hard + +"read@npm:1, read@npm:^1.0.7": + version: 1.0.7 + resolution: "read@npm:1.0.7" + dependencies: + mute-stream: ~0.0.4 + checksum: 2777c254e5732cac96f5d0a1c0f6b836c89ae23d8febd405b206f6f24d5de1873420f1a0795e0e3721066650d19adf802c7882c4027143ee0acf942a4f34f97b + languageName: node + linkType: hard + +"readable-stream@npm:3, readable-stream@npm:^3.0.0, readable-stream@npm:^3.0.2, 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: + inherits: ^2.0.3 + string_decoder: ^1.1.1 + util-deprecate: ^1.0.1 + checksum: bdcbe6c22e846b6af075e32cf8f4751c2576238c5043169a1c221c92ee2878458a816a4ea33f4c67623c0b6827c8a400409bfb3cf0bf3381392d0b1dfb52ac8d + languageName: node + linkType: hard + +"readable-stream@npm:~2.3.6": + version: 2.3.7 + resolution: "readable-stream@npm:2.3.7" + dependencies: + core-util-is: ~1.0.0 + inherits: ~2.0.3 + isarray: ~1.0.0 + process-nextick-args: ~2.0.0 + safe-buffer: ~5.1.1 + string_decoder: ~1.1.1 + util-deprecate: ~1.0.1 + checksum: e4920cf7549a60f8aaf694d483a0e61b2a878b969d224f89b3bc788b8d920075132c4b55a7494ee944c7b6a9a0eada28a7f6220d80b0312ece70bbf08eeca755 + languageName: node + linkType: hard + +"readdir-scoped-modules@npm:^1.1.0": + version: 1.1.0 + resolution: "readdir-scoped-modules@npm:1.1.0" + dependencies: + debuglog: ^1.0.1 + dezalgo: ^1.0.0 + graceful-fs: ^4.1.2 + once: ^1.3.0 + checksum: 6d9f334e40dfd0f5e4a8aab5e67eb460c95c85083c690431f87ab2c9135191170e70c2db6d71afcafb78e073d23eb95dcb3fc33ef91308f6ebfe3197be35e608 + languageName: node + linkType: hard + +"rechoir@npm:^0.8.0": + version: 0.8.0 + resolution: "rechoir@npm:0.8.0" + dependencies: + resolve: ^1.20.0 + checksum: ad3caed8afdefbc33fbc30e6d22b86c35b3d51c2005546f4e79bcc03c074df804b3640ad18945e6bef9ed12caedc035655ec1082f64a5e94c849ff939dc0a788 + languageName: node + linkType: hard + +"redent@npm:^3.0.0": + version: 3.0.0 + resolution: "redent@npm:3.0.0" + dependencies: + indent-string: ^4.0.0 + strip-indent: ^3.0.0 + checksum: fa1ef20404a2d399235e83cc80bd55a956642e37dd197b4b612ba7327bf87fa32745aeb4a1634b2bab25467164ab4ed9c15be2c307923dd08b0fe7c52431ae6b + languageName: node + linkType: hard + +"redeyed@npm:~2.1.0": + version: 2.1.1 + resolution: "redeyed@npm:2.1.1" + dependencies: + esprima: ~4.0.0 + checksum: 39a1426e377727cfb47a0e24e95c1cf78d969fbc388dc1e0fa1e2ef8a8756450cefb8b0c2598f63b85f1a331986fca7604c0db798427a5775a1dbdb9c1291979 + languageName: node + linkType: hard + +"regenerate-unicode-properties@npm:^10.1.0": + version: 10.1.0 + resolution: "regenerate-unicode-properties@npm:10.1.0" + dependencies: + regenerate: ^1.4.2 + checksum: b1a8929588433ab8b9dc1a34cf3665b3b472f79f2af6ceae00d905fc496b332b9af09c6718fb28c730918f19a00dc1d7310adbaa9b72a2ec7ad2f435da8ace17 + languageName: node + linkType: hard + +"regenerate@npm:^1.4.2": + version: 1.4.2 + resolution: "regenerate@npm:1.4.2" + checksum: 3317a09b2f802da8db09aa276e469b57a6c0dd818347e05b8862959c6193408242f150db5de83c12c3fa99091ad95fb42a6db2c3329bfaa12a0ea4cbbeb30cb0 + languageName: node + linkType: hard + +"regenerator-runtime@npm:^0.13.11": + version: 0.13.11 + resolution: "regenerator-runtime@npm:0.13.11" + checksum: 27481628d22a1c4e3ff551096a683b424242a216fee44685467307f14d58020af1e19660bf2e26064de946bad7eff28950eae9f8209d55723e2d9351e632bbb4 + languageName: node + linkType: hard + +"regenerator-transform@npm:^0.15.1": + version: 0.15.1 + resolution: "regenerator-transform@npm:0.15.1" + dependencies: + "@babel/runtime": ^7.8.4 + checksum: 2d15bdeadbbfb1d12c93f5775493d85874dbe1d405bec323da5c61ec6e701bc9eea36167483e1a5e752de9b2df59ab9a2dfff6bf3784f2b28af2279a673d29a4 + languageName: node + linkType: hard + +"regexp-match-indices@npm:^1.0.2": + version: 1.0.2 + resolution: "regexp-match-indices@npm:1.0.2" + dependencies: + regexp-tree: ^0.1.11 + checksum: 8cc779f6cf8f404ead828d09970a7d4bd66bd78d43ab9eb2b5e65f2ef2ba1ed53536f5b5fa839fb90b350365fb44b6a851c7f16289afc3f37789c113ab2a7916 + languageName: node + linkType: hard + +"regexp-tree@npm:^0.1.11": + version: 0.1.27 + resolution: "regexp-tree@npm:0.1.27" + bin: + regexp-tree: bin/regexp-tree + checksum: 129aebb34dae22d6694ab2ac328be3f99105143737528ab072ef624d599afecbcfae1f5c96a166fa9e5f64fa1ecf30b411c4691e7924c3e11bbaf1712c260c54 + languageName: node + linkType: hard + +"regexp.prototype.flags@npm:^1.4.3": + version: 1.4.3 + resolution: "regexp.prototype.flags@npm:1.4.3" + dependencies: + call-bind: ^1.0.2 + define-properties: ^1.1.3 + functions-have-names: ^1.2.2 + checksum: 51228bae732592adb3ededd5e15426be25f289e9c4ef15212f4da73f4ec3919b6140806374b8894036a86020d054a8d2657d3fee6bb9b4d35d8939c20030b7a6 + languageName: node + linkType: hard + +"regexpp@npm:^3.2.0": + version: 3.2.0 + resolution: "regexpp@npm:3.2.0" + checksum: a78dc5c7158ad9ddcfe01aa9144f46e192ddbfa7b263895a70a5c6c73edd9ce85faf7c0430e59ac38839e1734e275b9c3de5c57ee3ab6edc0e0b1bdebefccef8 + languageName: node + linkType: hard + +"regexpu-core@npm:^5.3.1": + version: 5.3.2 + resolution: "regexpu-core@npm:5.3.2" + dependencies: + "@babel/regjsgen": ^0.8.0 + regenerate: ^1.4.2 + regenerate-unicode-properties: ^10.1.0 + regjsparser: ^0.9.1 + unicode-match-property-ecmascript: ^2.0.0 + unicode-match-property-value-ecmascript: ^2.1.0 + checksum: 95bb97088419f5396e07769b7de96f995f58137ad75fac5811fb5fe53737766dfff35d66a0ee66babb1eb55386ef981feaef392f9df6d671f3c124812ba24da2 + languageName: node + linkType: hard + +"regjsparser@npm:^0.9.1": + version: 0.9.1 + resolution: "regjsparser@npm:0.9.1" + dependencies: + jsesc: ~0.5.0 + bin: + regjsparser: bin/parser + checksum: 5e1b76afe8f1d03c3beaf9e0d935dd467589c3625f6d65fb8ffa14f224d783a0fed4bf49c2c1b8211043ef92b6117313419edf055a098ed8342e340586741afc + languageName: node + linkType: hard + +"remark-lint-blockquote-indentation@npm:^1.0.0": + version: 1.0.4 + resolution: "remark-lint-blockquote-indentation@npm:1.0.4" + dependencies: + mdast-util-to-string: ^1.0.2 + plur: ^3.0.0 + unified-lint-rule: ^1.0.0 + unist-util-generated: ^1.1.0 + unist-util-position: ^3.0.0 + unist-util-visit: ^1.1.1 + checksum: aa5a1fe1ff9c4149876317b31e41a81bc70ac039c0253883e2a221dcce3aa6e9a4d3dfa5ac2043cebee9c786b461db3b50da65586a3b1f95cec063b9c4ce2727 + languageName: node + linkType: hard + +"remark-lint-code-block-style@npm:^1.0.0": + version: 1.0.4 + resolution: "remark-lint-code-block-style@npm:1.0.4" + dependencies: + unified-lint-rule: ^1.0.0 + unist-util-generated: ^1.1.0 + unist-util-position: ^3.0.0 + unist-util-visit: ^1.1.1 + checksum: 1d99c84e8a8ab8a2e76ddf8f22852eea8d9ec252805e899abd6f7790fb44d590dc35c711314318a989f31dd05e7368e3c5e49b9f4fc2c08ba8070eb95401e305 + languageName: node + linkType: hard + +"remark-lint-definition-case@npm:^1.0.0": + version: 1.0.5 + resolution: "remark-lint-definition-case@npm:1.0.5" + dependencies: + unified-lint-rule: ^1.0.0 + unist-util-generated: ^1.1.0 + unist-util-position: ^3.0.0 + unist-util-visit: ^1.4.0 + checksum: 45aa291675bc5498eda0305955d554a981dec34f7a7619fab7ad0d2d4cb90cff741ea59c138bbf97ae0837cb25b694f7fe9f072957d0d3aadac63142a378e577 + languageName: node + linkType: hard + +"remark-lint-definition-spacing@npm:^1.0.0": + version: 1.0.5 + resolution: "remark-lint-definition-spacing@npm:1.0.5" + dependencies: + unified-lint-rule: ^1.0.0 + unist-util-generated: ^1.1.0 + unist-util-position: ^3.0.0 + unist-util-visit: ^1.4.0 + checksum: 6339a7fb17789de8c43d55170e8e0dc0553cec8d9165bd5b2865d81263e3538165a4c7ad76fa4d636da852e98ec9f4d4ff6502eac294de00b7a79bd79c812c06 + languageName: node + linkType: hard + +"remark-lint-emphasis-marker@npm:^1.0.0": + version: 1.0.4 + resolution: "remark-lint-emphasis-marker@npm:1.0.4" + dependencies: + unified-lint-rule: ^1.0.0 + unist-util-generated: ^1.1.0 + unist-util-position: ^3.0.0 + unist-util-visit: ^1.1.1 + checksum: 19b816cfef2fdcefa8aac2890754970af25b12529388febd4a8c382ec885fdb7c49b041d4594144b2b1c4897990b31d2c190e20ca9b4eb3d24c605117df509c2 + languageName: node + linkType: hard + +"remark-lint-fenced-code-flag@npm:^1.0.0": + version: 1.0.4 + resolution: "remark-lint-fenced-code-flag@npm:1.0.4" + dependencies: + unified-lint-rule: ^1.0.0 + unist-util-generated: ^1.1.0 + unist-util-position: ^3.0.0 + unist-util-visit: ^1.1.1 + checksum: 13a99d4dbb63b19d0da08ca1894fde0bc291f2a40198400137d882921ecaa1bb15f3db2308d7aa8f3554a795f064bb65b1ac56e3f24de5ff0be75157df728842 + languageName: node + linkType: hard + +"remark-lint-fenced-code-marker@npm:^1.0.0": + version: 1.0.4 + resolution: "remark-lint-fenced-code-marker@npm:1.0.4" + dependencies: + unified-lint-rule: ^1.0.0 + unist-util-generated: ^1.1.0 + unist-util-position: ^3.0.0 + unist-util-visit: ^1.1.1 + checksum: 1548f0066866047bcff9514a7940cb320da6c1cbd6d00cb91064fddfa360c4fc1f9cd18c26f0708214d16056be6159969321cdb62d17e4a69601729f3564ed4d + languageName: node + linkType: hard + +"remark-lint-file-extension@npm:^1.0.0": + version: 1.0.5 + resolution: "remark-lint-file-extension@npm:1.0.5" + dependencies: + unified-lint-rule: ^1.0.0 + checksum: 46e7ae6eb3cbd98087147553eca5c6071ec1051f86206d2d0ae67d04577c2afc69fb3363fe2018dca8da4256f1e901846868bc82d6e9c92280aa32b5dc8198dc + languageName: node + linkType: hard + +"remark-lint-final-definition@npm:^1.0.0": + version: 1.0.4 + resolution: "remark-lint-final-definition@npm:1.0.4" + dependencies: + unified-lint-rule: ^1.0.0 + unist-util-generated: ^1.1.0 + unist-util-position: ^3.0.0 + unist-util-visit: ^1.1.1 + checksum: c15105cef875d727225557981a74e55c2641ba526f1642d74e617a09a931510b14ce77e344812b90dc6f3fbfa975db8ac9343751fdfd22c8c8aaeec8efad3517 + languageName: node + linkType: hard + +"remark-lint-hard-break-spaces@npm:^1.0.0": + version: 1.0.5 + resolution: "remark-lint-hard-break-spaces@npm:1.0.5" + dependencies: + unified-lint-rule: ^1.0.0 + unist-util-generated: ^1.1.0 + unist-util-position: ^3.0.0 + unist-util-visit: ^1.1.1 + checksum: ffc7168f24ba5de448fde66a7993efd49a791120110f6e35c0da05d7d7665df20b0a51795ee2990a8f3d1ae4139a00086cbd67f6bebcc3bdaa35928169c23879 + languageName: node + linkType: hard + +"remark-lint-heading-increment@npm:^1.0.0": + version: 1.0.4 + resolution: "remark-lint-heading-increment@npm:1.0.4" + dependencies: + unified-lint-rule: ^1.0.0 + unist-util-generated: ^1.1.0 + unist-util-visit: ^1.1.1 + checksum: 41161ab5288af44744f725f93e52838288e15e05facb7381c4e157066d36d93c49f3db75460894d1be4eb58c875c593856de463f3e78b0a091bc39fad0f0d6f9 + languageName: node + linkType: hard + +"remark-lint-heading-style@npm:^1.0.0": + version: 1.0.4 + resolution: "remark-lint-heading-style@npm:1.0.4" + dependencies: + mdast-util-heading-style: ^1.0.2 + unified-lint-rule: ^1.0.0 + unist-util-generated: ^1.1.0 + unist-util-visit: ^1.1.1 + checksum: d4eaf37d6020a30425ac85fe30ef67ba4514640855b3a15fc585615ffd7253e94c344f4461f8738bb826c697d8741fe9f9fdcd8649645c1b69115907beed801d + languageName: node + linkType: hard + +"remark-lint-link-title-style@npm:^1.0.0": + version: 1.0.5 + resolution: "remark-lint-link-title-style@npm:1.0.5" + dependencies: + unified-lint-rule: ^1.0.0 + unist-util-generated: ^1.1.0 + unist-util-position: ^3.0.0 + unist-util-visit: ^1.1.1 + vfile-location: ^2.0.1 + checksum: 2bdf5f16e292b81447282b83c6043351ba50c26e8347d27928fee23d8c0fb41ed23d2988b23ad4d902a30ad7ddd3a92ef13ef4b3f93ad0be9f80653cfdd1ad68 + languageName: node + linkType: hard + +"remark-lint-list-item-content-indent@npm:^1.0.0": + version: 1.0.4 + resolution: "remark-lint-list-item-content-indent@npm:1.0.4" + dependencies: + plur: ^3.0.0 + unified-lint-rule: ^1.0.0 + unist-util-generated: ^1.1.0 + unist-util-position: ^3.0.0 + unist-util-visit: ^1.1.1 + checksum: d0d8639b0ba379ffc1f2aa2459a1925a6f34fd1f819396a42281c5a51ebf9dbc64e9475e8403830703907ed137a39946be8c46bec431b4537188b744b5946773 + languageName: node + linkType: hard + +"remark-lint-list-item-indent@npm:^1.0.0": + version: 1.0.5 + resolution: "remark-lint-list-item-indent@npm:1.0.5" + dependencies: + plur: ^3.0.0 + unified-lint-rule: ^1.0.0 + unist-util-generated: ^1.1.0 + unist-util-position: ^3.0.0 + unist-util-visit: ^1.1.1 + checksum: 021aeb36cdeecc1bbb9059d8dfdfcf2d9f19089af71e6455dee0ba21acf197f810e42781a4178c4e69f658f29180ab9bea91b701b9e66ee03918f28e0302ab56 + languageName: node + linkType: hard + +"remark-lint-list-item-spacing@npm:^1.0.0": + version: 1.1.4 + resolution: "remark-lint-list-item-spacing@npm:1.1.4" + dependencies: + unified-lint-rule: ^1.0.0 + unist-util-generated: ^1.1.0 + unist-util-position: ^3.0.0 + unist-util-visit: ^1.1.1 + checksum: dcb2df53e3fada2a01bff94e4d294ff74afcf9fcbfca84c46bdf648acea0c3a60cd86bac8faef0513236bc37a7cf6ca38beceb82d8bd42be74ae4c54068206bc + languageName: node + linkType: hard + +"remark-lint-maximum-heading-length@npm:^1.0.0": + version: 1.0.4 + resolution: "remark-lint-maximum-heading-length@npm:1.0.4" + dependencies: + mdast-util-to-string: ^1.0.2 + unified-lint-rule: ^1.0.0 + unist-util-generated: ^1.1.0 + unist-util-visit: ^1.1.1 + checksum: bc9ef2233e0f01f4a445a4934b9ffa05fc2e904b3f7fcf2e2c988c5b9884a31827eb6b13dcd289a0ef02f2d7159beb76c70f6616f9f6580939151410c7906aa2 + languageName: node + linkType: hard + +"remark-lint-maximum-line-length@npm:^1.0.0": + version: 1.2.2 + resolution: "remark-lint-maximum-line-length@npm:1.2.2" + dependencies: + unified-lint-rule: ^1.0.0 + unist-util-generated: ^1.1.0 + unist-util-position: ^3.0.0 + unist-util-visit: ^1.4.0 + checksum: 6aa4a98c045d33b7a08e3331d580aa518e56405853deff600b519e18203e675970c4267c9dcf8a0ea28e2795b2a2bac9272b31a28214f4db6438f62255a024ea + languageName: node + linkType: hard + +"remark-lint-no-auto-link-without-protocol@npm:^1.0.0": + version: 1.0.4 + resolution: "remark-lint-no-auto-link-without-protocol@npm:1.0.4" + dependencies: + mdast-util-to-string: ^1.0.2 + unified-lint-rule: ^1.0.0 + unist-util-generated: ^1.1.0 + unist-util-position: ^3.0.0 + unist-util-visit: ^1.1.1 + checksum: f53972b5bf45a0cbf47cf62a940df2c179c00df220be099db18827b660c1d8951641565977a68e5f2cad78bda7666990803463a71abbd26a26d4d24fc73eef62 + languageName: node + linkType: hard + +"remark-lint-no-blockquote-without-marker@npm:^2.0.0": + version: 2.0.4 + resolution: "remark-lint-no-blockquote-without-marker@npm:2.0.4" + dependencies: + unified-lint-rule: ^1.0.0 + unist-util-generated: ^1.1.0 + unist-util-position: ^3.0.0 + unist-util-visit: ^1.1.1 + vfile-location: ^2.0.1 + checksum: 29b17044ed4514f49dd58524c88c073e73550adbf88410c304c0c6cf3e1b676d3162093f281df82529e234de12381d23d73a08c80227e1e6d6054757d4e03a9f + languageName: node + linkType: hard + +"remark-lint-no-consecutive-blank-lines@npm:^1.0.0": + version: 1.0.4 + resolution: "remark-lint-no-consecutive-blank-lines@npm:1.0.4" + dependencies: + plur: ^3.0.0 + unified-lint-rule: ^1.0.0 + unist-util-generated: ^1.1.0 + unist-util-position: ^3.0.0 + unist-util-visit: ^1.1.1 + checksum: 80f4e053aab836ff521294cbec30c0952e5c2876547e343ca83594abeb783f85d2e7f047c121ecfdd8f977cbc7cd623c97fb1a4a39055bc63eb743298e60234f + languageName: node + linkType: hard + +"remark-lint-no-duplicate-headings@npm:^1.0.0": + version: 1.0.5 + resolution: "remark-lint-no-duplicate-headings@npm:1.0.5" + dependencies: + mdast-util-to-string: ^1.0.2 + unified-lint-rule: ^1.0.0 + unist-util-generated: ^1.1.0 + unist-util-position: ^3.0.0 + unist-util-stringify-position: ^2.0.0 + unist-util-visit: ^1.1.1 + checksum: aab600b232ebd16ad3111b976e0afa7a2b1dc4d1f292f2ff5994a4ad455579fc20f9ac93fb2bd1e726e7ec2d3eaedf92ff3953102ec89f0be0b0bd8120d6f30b + languageName: node + linkType: hard + +"remark-lint-no-emphasis-as-heading@npm:^1.0.0": + version: 1.0.4 + resolution: "remark-lint-no-emphasis-as-heading@npm:1.0.4" + dependencies: + unified-lint-rule: ^1.0.0 + unist-util-generated: ^1.1.0 + unist-util-visit: ^1.1.1 + checksum: 77201b1a952edf0b6f0f1ca16a708dd053d28ffdd0fb9c4378ccd7991ac1de0744398914aef499bd68ca72428199e4de958af14229ac149a174bcd34a5a61ff8 + languageName: node + linkType: hard + +"remark-lint-no-file-name-articles@npm:^1.0.0": + version: 1.0.5 + resolution: "remark-lint-no-file-name-articles@npm:1.0.5" + dependencies: + unified-lint-rule: ^1.0.0 + checksum: 8ccf8fa1f6e5a2f18d4a450df1d22872001f8843bd916cc74ba1bc0f66c6c0094e3374f3fedeed517e94439ab06e5961c3bc4712c2139d58c2e9e90f06d28a8a + languageName: node + linkType: hard + +"remark-lint-no-file-name-consecutive-dashes@npm:^1.0.0": + version: 1.0.5 + resolution: "remark-lint-no-file-name-consecutive-dashes@npm:1.0.5" + dependencies: + unified-lint-rule: ^1.0.0 + checksum: 3bcdd57428eb48f73d6e46a97520bb50f1f7a64edd6a8cc971858612b98b25ea06a746fd64da9e976190169b9e4d292069ff30d06099ef058292600621457988 + languageName: node + linkType: hard + +"remark-lint-no-file-name-irregular-characters@npm:^1.0.0": + version: 1.0.5 + resolution: "remark-lint-no-file-name-irregular-characters@npm:1.0.5" + dependencies: + unified-lint-rule: ^1.0.0 + checksum: f5d37ddc749bfe4815bc29603757ee010fb55a8f699f7e7273db8c9a904763de14b648efc42f61930ba8efe77bb63bf0303d36ed235904b1656fc99b02f200ed + languageName: node + linkType: hard + +"remark-lint-no-file-name-mixed-case@npm:^1.0.0": + version: 1.0.5 + resolution: "remark-lint-no-file-name-mixed-case@npm:1.0.5" + dependencies: + unified-lint-rule: ^1.0.0 + checksum: 7243fc783d274edb2e019b0b1ab80bd44c730bdb81b2846f893f8a4b195462b25534d3e5d0d326f6cbb92c4c4db94d18712dd41fc2e25e2a3791b4452a4bc1fb + languageName: node + linkType: hard + +"remark-lint-no-file-name-outer-dashes@npm:^1.0.0": + version: 1.0.6 + resolution: "remark-lint-no-file-name-outer-dashes@npm:1.0.6" + dependencies: + unified-lint-rule: ^1.0.0 + checksum: 36d701274d8e69dd236011f3d2cb0a5eb6454db300dc2e4f4bbe6901514799ed20df923e46a2d5164dc12b68615d5b22f4b1076c1a36f2355d59162a544b55c2 + languageName: node + linkType: hard + +"remark-lint-no-heading-punctuation@npm:^1.0.0": + version: 1.0.4 + resolution: "remark-lint-no-heading-punctuation@npm:1.0.4" + dependencies: + mdast-util-to-string: ^1.0.2 + unified-lint-rule: ^1.0.0 + unist-util-generated: ^1.1.0 + unist-util-visit: ^1.1.1 + checksum: 607f81d0a425be4a9a229b993dc0633f602144cc1ca2d90a3572c98116ac320a6921a00fbee28a9a31c4ae7bbcb9479828b7f1063016476e9feddd4168b77c09 + languageName: node + linkType: hard + +"remark-lint-no-inline-padding@npm:^1.0.0": + version: 1.0.5 + resolution: "remark-lint-no-inline-padding@npm:1.0.5" + dependencies: + mdast-util-to-string: ^1.0.2 + unified-lint-rule: ^1.0.0 + unist-util-generated: ^1.1.0 + unist-util-visit: ^1.4.0 + checksum: 96a90f90d37cc47a4cb59b4806bcb4e6ba5a7d793d3c04bbe91ccb38cb79ce5482bf6346ad5d2929ef2116b903f83354b2ddc6b5814bde7baa42381231cd03cd + languageName: node + linkType: hard + +"remark-lint-no-literal-urls@npm:^1.0.0": + version: 1.0.4 + resolution: "remark-lint-no-literal-urls@npm:1.0.4" + dependencies: + mdast-util-to-string: ^1.0.2 + unified-lint-rule: ^1.0.0 + unist-util-generated: ^1.1.0 + unist-util-position: ^3.0.0 + unist-util-visit: ^1.1.1 + checksum: fa78350ec4b1fc80eb1208b179c74eb4f4fc5925dccde79ef634920fa03421a1ac9f33b28e5d21b73fda3264d8e4b2feb5fd673c76db26a7e142defc47d9b4a3 + languageName: node + linkType: hard + +"remark-lint-no-multiple-toplevel-headings@npm:^1.0.0": + version: 1.0.5 + resolution: "remark-lint-no-multiple-toplevel-headings@npm:1.0.5" + dependencies: + unified-lint-rule: ^1.0.0 + unist-util-generated: ^1.1.0 + unist-util-position: ^3.0.0 + unist-util-stringify-position: ^2.0.0 + unist-util-visit: ^1.1.1 + checksum: 56be19e61e21105ae5597add886050d9721e9abbccd9097d13059c176c7061a2df5edb6ed2816e4737600d1b525404fc0f5ae635192daacdc83d9f7da6cacf82 + languageName: node + linkType: hard + +"remark-lint-no-shell-dollars@npm:^1.0.0": + version: 1.0.4 + resolution: "remark-lint-no-shell-dollars@npm:1.0.4" + dependencies: + unified-lint-rule: ^1.0.0 + unist-util-generated: ^1.1.0 + unist-util-visit: ^1.1.1 + checksum: 4621a1dc2d254001a7afdf9ea78c384a0e13edd5a0212e24b7a67ad79ca5c56241a22b9b759063459f9e148ea826e402fe9248e57690d59efe5c8b81dc48e8b1 + languageName: node + linkType: hard + +"remark-lint-no-shortcut-reference-image@npm:^1.0.0": + version: 1.0.4 + resolution: "remark-lint-no-shortcut-reference-image@npm:1.0.4" + dependencies: + unified-lint-rule: ^1.0.0 + unist-util-generated: ^1.1.0 + unist-util-visit: ^1.1.1 + checksum: 1882d47449f3e72905ff66b8349ff788ca8a6260823904b4f1b5b98ef87891e9da05c476adf3397749702d662e9cadccfd1c0374611e35dec54a2b17c3c03906 + languageName: node + linkType: hard + +"remark-lint-no-shortcut-reference-link@npm:^1.0.0": + version: 1.0.5 + resolution: "remark-lint-no-shortcut-reference-link@npm:1.0.5" + dependencies: + unified-lint-rule: ^1.0.0 + unist-util-generated: ^1.1.0 + unist-util-visit: ^1.1.1 + checksum: 322e3f9dd95c17f283f58caa7f9e705e0fe5924f09b9d0e28292eb207fef1af86c942f93d63a68f52e6e50ed8b3c44f6bda2bd129aedd5defb0b93903830e41c + languageName: node + linkType: hard + +"remark-lint-no-table-indentation@npm:^1.0.0": + version: 1.0.5 + resolution: "remark-lint-no-table-indentation@npm:1.0.5" + dependencies: + unified-lint-rule: ^1.0.0 + unist-util-generated: ^1.1.0 + unist-util-position: ^3.0.0 + unist-util-visit: ^1.4.0 + checksum: 776e0baa43462104582a63f6398bd91c973421f4f85e9db6630e09e4fa3d0682d50ed564b62b3fe88973cbf1a3532e11606f21bb92a05ea0560084bdb53e6ee7 + languageName: node + linkType: hard + +"remark-lint-ordered-list-marker-style@npm:^1.0.0": + version: 1.0.4 + resolution: "remark-lint-ordered-list-marker-style@npm:1.0.4" + dependencies: + unified-lint-rule: ^1.0.0 + unist-util-generated: ^1.1.0 + unist-util-position: ^3.0.0 + unist-util-visit: ^1.1.1 + checksum: 2781a21912defdd7521fd8b0d601bdfd494f1ba1f62dee2651ff26d5a270619583ae38906846c738cf8cad98d4bc4788222554789319e26c4919a3b5cbde34d1 + languageName: node + linkType: hard + +"remark-lint-ordered-list-marker-value@npm:^1.0.0": + version: 1.0.5 + resolution: "remark-lint-ordered-list-marker-value@npm:1.0.5" + dependencies: + unified-lint-rule: ^1.0.0 + unist-util-generated: ^1.1.0 + unist-util-position: ^3.0.0 + unist-util-visit: ^1.1.1 + checksum: 64f2c29b4ac76332b3f76fb4c55a006d1819a334f5c49418993f12f6d829099fc5d56462547846dcee1adbb50a5b47f0f2c52c4730c0d8eb2a02ab0837b33bca + languageName: node + linkType: hard + +"remark-lint-rule-style@npm:^1.0.0": + version: 1.0.4 + resolution: "remark-lint-rule-style@npm:1.0.4" + dependencies: + unified-lint-rule: ^1.0.0 + unist-util-generated: ^1.1.0 + unist-util-position: ^3.0.0 + unist-util-visit: ^1.1.1 + checksum: b60bb632a181c52e37cd49ce23dead08715894fc10e1d2a83860fca3c5748f7b89d7d3f464991aa25d15cbb5e0ada9eee5875bdec7468d23475962703afbf588 + languageName: node + linkType: hard + +"remark-lint-strong-marker@npm:^1.0.0": + version: 1.0.4 + resolution: "remark-lint-strong-marker@npm:1.0.4" + dependencies: + unified-lint-rule: ^1.0.0 + unist-util-generated: ^1.1.0 + unist-util-position: ^3.0.0 + unist-util-visit: ^1.1.1 + checksum: d135492ab616931e807ab02a7acd53120382a7f8c5d59d97e66d5e30e6ef983ceb6b2ea02e2a2b2f8ca463e2c2fbfaec44999970f5e2c776dd273827049484b5 + languageName: node + linkType: hard + +"remark-lint-table-cell-padding@npm:^1.0.0": + version: 1.0.5 + resolution: "remark-lint-table-cell-padding@npm:1.0.5" + dependencies: + unified-lint-rule: ^1.0.0 + unist-util-generated: ^1.1.0 + unist-util-position: ^3.0.0 + unist-util-visit: ^1.4.0 + checksum: f4ecd659c5f8465b7b2f56b4197f5ef6bbedf5f3d7a2c7aee7579dd78dc855932910ed184d8db657897d82b5efefa71a1996f61331a449c522a03a03d529811b + languageName: node + linkType: hard + +"remark-lint-table-pipe-alignment@npm:^1.0.0": + version: 1.0.4 + resolution: "remark-lint-table-pipe-alignment@npm:1.0.4" + dependencies: + unified-lint-rule: ^1.0.0 + unist-util-generated: ^1.1.0 + unist-util-position: ^3.0.0 + unist-util-visit: ^1.1.1 + checksum: acdc31cb0e5701aa470d8dda6e0f399b313c36feaef552e680c9853c488f7255427d9867d93d783f9a7048faf055577355f73976516b69db5a1afed1ed90887c + languageName: node + linkType: hard + +"remark-lint-table-pipes@npm:^1.0.0": + version: 1.0.4 + resolution: "remark-lint-table-pipes@npm:1.0.4" + dependencies: + unified-lint-rule: ^1.0.0 + unist-util-generated: ^1.1.0 + unist-util-position: ^3.0.0 + unist-util-visit: ^1.1.1 + checksum: 866b1b77a4ad256e1dfde26793bdb60f8d2e26ea48c35e02894230dd691ff2c7268a27c6ff4a25b8895bda3017f4ac32d9f14e8c5fb06ae63c2b93259be6da02 + languageName: node + linkType: hard + +"remark-lint-unordered-list-marker-style@npm:^1.0.0": + version: 1.0.4 + resolution: "remark-lint-unordered-list-marker-style@npm:1.0.4" + dependencies: + unified-lint-rule: ^1.0.0 + unist-util-generated: ^1.1.0 + unist-util-position: ^3.0.0 + unist-util-visit: ^1.1.1 + checksum: d05c592eddc0640abf0f78de6954ae61860f5fc09b54ca3eb354b8f1b1264e28fb99121f30f3d9ecfabab8f8f386df98c07bfd5ea7c4f3556c40520b6aae780d + languageName: node + linkType: hard + +"remark-lint@npm:^6.0.0": + version: 6.0.6 + resolution: "remark-lint@npm:6.0.6" + dependencies: + remark-message-control: ^4.0.0 + checksum: 4b0297c120c789a72fd39fd1e9fd2060978d8fb1b003ebf4356eeeeb970765e1b0db0161d5b9ba4c6a3a5b75c5d0559599667dcad18ea2c819860ef3400ccb9f + languageName: node + linkType: hard + +"remark-message-control@npm:^4.0.0": + version: 4.2.0 + resolution: "remark-message-control@npm:4.2.0" + dependencies: + mdast-comment-marker: ^1.0.0 + unified-message-control: ^1.0.0 + xtend: ^4.0.1 + checksum: 69d55ba6bdd431bc396e0e1cec7c4b2989a58c2042dcc52471ac737b4177f51ef40c33dda049265cd8dbc40891d65d1b25d6c98c2ef2ea5a7f6acd326a034abf + languageName: node + linkType: hard + +"remark-parse@npm:^6.0.3": + version: 6.0.3 + resolution: "remark-parse@npm:6.0.3" + dependencies: + collapse-white-space: ^1.0.2 + is-alphabetical: ^1.0.0 + is-decimal: ^1.0.0 + is-whitespace-character: ^1.0.0 + is-word-character: ^1.0.0 + markdown-escapes: ^1.0.0 + parse-entities: ^1.1.0 + repeat-string: ^1.5.4 + state-toggle: ^1.0.0 + trim: 0.0.1 + trim-trailing-lines: ^1.0.0 + unherit: ^1.0.4 + unist-util-remove-position: ^1.0.0 + vfile-location: ^2.0.0 + xtend: ^4.0.1 + checksum: 10310eebdbbc202d6102894228cae42c60027a7b96a291410c17d9de32739ad84cc9fb6176ee7b27e61f79747513e042dcdaa10c924d5b985b084f4c1f755966 + languageName: node + linkType: hard + +"remark-preset-lint-markdown-style-guide@npm:^2.1.2": + version: 2.1.4 + resolution: "remark-preset-lint-markdown-style-guide@npm:2.1.4" + dependencies: + remark-lint: ^6.0.0 + remark-lint-blockquote-indentation: ^1.0.0 + remark-lint-code-block-style: ^1.0.0 + remark-lint-definition-case: ^1.0.0 + remark-lint-definition-spacing: ^1.0.0 + remark-lint-emphasis-marker: ^1.0.0 + remark-lint-fenced-code-flag: ^1.0.0 + remark-lint-fenced-code-marker: ^1.0.0 + remark-lint-file-extension: ^1.0.0 + remark-lint-final-definition: ^1.0.0 + remark-lint-hard-break-spaces: ^1.0.0 + remark-lint-heading-increment: ^1.0.0 + remark-lint-heading-style: ^1.0.0 + remark-lint-link-title-style: ^1.0.0 + remark-lint-list-item-content-indent: ^1.0.0 + remark-lint-list-item-indent: ^1.0.0 + remark-lint-list-item-spacing: ^1.0.0 + remark-lint-maximum-heading-length: ^1.0.0 + remark-lint-maximum-line-length: ^1.0.0 + remark-lint-no-auto-link-without-protocol: ^1.0.0 + remark-lint-no-blockquote-without-marker: ^2.0.0 + remark-lint-no-consecutive-blank-lines: ^1.0.0 + remark-lint-no-duplicate-headings: ^1.0.0 + remark-lint-no-emphasis-as-heading: ^1.0.0 + remark-lint-no-file-name-articles: ^1.0.0 + remark-lint-no-file-name-consecutive-dashes: ^1.0.0 + remark-lint-no-file-name-irregular-characters: ^1.0.0 + remark-lint-no-file-name-mixed-case: ^1.0.0 + remark-lint-no-file-name-outer-dashes: ^1.0.0 + remark-lint-no-heading-punctuation: ^1.0.0 + remark-lint-no-inline-padding: ^1.0.0 + remark-lint-no-literal-urls: ^1.0.0 + remark-lint-no-multiple-toplevel-headings: ^1.0.0 + remark-lint-no-shell-dollars: ^1.0.0 + remark-lint-no-shortcut-reference-image: ^1.0.0 + remark-lint-no-shortcut-reference-link: ^1.0.0 + remark-lint-no-table-indentation: ^1.0.0 + remark-lint-ordered-list-marker-style: ^1.0.0 + remark-lint-ordered-list-marker-value: ^1.0.0 + remark-lint-rule-style: ^1.0.0 + remark-lint-strong-marker: ^1.0.0 + remark-lint-table-cell-padding: ^1.0.0 + remark-lint-table-pipe-alignment: ^1.0.0 + remark-lint-table-pipes: ^1.0.0 + remark-lint-unordered-list-marker-style: ^1.0.0 + checksum: cbe908946096175f8329fa31db5e5697edf25de814ee5415a82cbf6f408edbe3617cb2fe6f55fd5061892b3ee4c024ff03f1146a29e8ca3ecaf0d1e51d2585a5 + languageName: node + linkType: hard + +"remark-retext@npm:^3.1.2": + version: 3.1.3 + resolution: "remark-retext@npm:3.1.3" + dependencies: + mdast-util-to-nlcst: ^3.2.0 + checksum: e477b758e1c10c524c73744df214de893ab9a502ff52a8d18d732d7194b809d223c5e1da2dc0a526a804d4b2b7ea8532e2b2187531323d9cb54529bba2d78901 + languageName: node + linkType: hard + +"repeat-string@npm:^1.5.2, repeat-string@npm:^1.5.4": + version: 1.6.1 + resolution: "repeat-string@npm:1.6.1" + checksum: 1b809fc6db97decdc68f5b12c4d1a671c8e3f65ec4a40c238bc5200e44e85bcc52a54f78268ab9c29fcf5fe4f1343e805420056d1f30fa9a9ee4c2d93e3cc6c0 + languageName: node + linkType: hard + +"replace-ext@npm:1.0.0": + version: 1.0.0 + resolution: "replace-ext@npm:1.0.0" + checksum: 123e5c28046e4f0b82e1cdedb0340058d362ddbd8e17d98e5068bbacc3b3b397b4d8e3c69d603f9c4c0f6a6494852064396570c44f9426a4673dba63850fab34 + languageName: node + linkType: hard + +"request-light@npm:^0.2.1": + version: 0.2.5 + resolution: "request-light@npm:0.2.5" + dependencies: + http-proxy-agent: ^2.1.0 + https-proxy-agent: ^2.2.3 + vscode-nls: ^4.1.1 + checksum: 42643da23cd6fe595653ce26b65ad1544d4d84ee587f9bb5bc904e36152e2dadc7b4c72eb900a35c6711f6d1566ee2df836fb05388f1f0cf5c2db9fb29d18dc1 + languageName: node + linkType: hard + +"request-light@npm:^0.5.7": + version: 0.5.8 + resolution: "request-light@npm:0.5.8" + checksum: 70cec43b32de465a0cd3dadf0931b8bfeeaa2cc1541739bdd0d6092987ddce0beadca3d2ce49e314fd54f19b43dc58835c66ca9a8efd07e47dafd4f3e0d82386 + languageName: node + linkType: hard + +"require-directory@npm:^2.1.1": + version: 2.1.1 + resolution: "require-directory@npm:2.1.1" + checksum: fb47e70bf0001fdeabdc0429d431863e9475e7e43ea5f94ad86503d918423c1543361cc5166d713eaa7029dd7a3d34775af04764bebff99ef413111a5af18c80 + languageName: node + linkType: hard + +"require-from-string@npm:^2.0.2": + version: 2.0.2 + resolution: "require-from-string@npm:2.0.2" + checksum: a03ef6895445f33a4015300c426699bc66b2b044ba7b670aa238610381b56d3f07c686251740d575e22f4c87531ba662d06937508f0f3c0f1ddc04db3130560b + languageName: node + linkType: hard + +"requires-port@npm:^1.0.0": + version: 1.0.0 + resolution: "requires-port@npm:1.0.0" + checksum: eee0e303adffb69be55d1a214e415cf42b7441ae858c76dfc5353148644f6fd6e698926fc4643f510d5c126d12a705e7c8ed7e38061113bdf37547ab356797ff + languageName: node + linkType: hard + +"resolve-cwd@npm:^3.0.0": + version: 3.0.0 + resolution: "resolve-cwd@npm:3.0.0" + dependencies: + resolve-from: ^5.0.0 + checksum: 546e0816012d65778e580ad62b29e975a642989108d9a3c5beabfb2304192fa3c9f9146fbdfe213563c6ff51975ae41bac1d3c6e047dd9572c94863a057b4d81 + languageName: node + linkType: hard + +"resolve-from@npm:5.0.0, resolve-from@npm:^5.0.0": + version: 5.0.0 + resolution: "resolve-from@npm:5.0.0" + checksum: 4ceeb9113e1b1372d0cd969f3468fa042daa1dd9527b1b6bb88acb6ab55d8b9cd65dbf18819f9f9ddf0db804990901dcdaade80a215e7b2c23daae38e64f5bdf + languageName: node + linkType: hard + +"resolve-from@npm:^3.0.0": + version: 3.0.0 + resolution: "resolve-from@npm:3.0.0" + checksum: fff9819254d2d62b57f74e5c2ca9c0bdd425ca47287c4d801bc15f947533148d858229ded7793b0f59e61e49e782fffd6722048add12996e1bd4333c29669062 + languageName: node + linkType: hard + +"resolve-from@npm:^4.0.0": + version: 4.0.0 + resolution: "resolve-from@npm:4.0.0" + checksum: f4ba0b8494846a5066328ad33ef8ac173801a51739eb4d63408c847da9a2e1c1de1e6cbbf72699211f3d13f8fc1325648b169bd15eb7da35688e30a5fb0e4a7f + languageName: node + linkType: hard + +"resolve.exports@npm:^2.0.0": + version: 2.0.2 + resolution: "resolve.exports@npm:2.0.2" + checksum: 1c7778ca1b86a94f8ab4055d196c7d87d1874b96df4d7c3e67bbf793140f0717fd506dcafd62785b079cd6086b9264424ad634fb904409764c3509c3df1653f2 + languageName: node + linkType: hard + +"resolve@npm:^1.10.0, resolve@npm:^1.14.2, resolve@npm:^1.20.0, resolve@npm:^1.22.0": + version: 1.22.1 + resolution: "resolve@npm:1.22.1" + dependencies: + is-core-module: ^2.9.0 + path-parse: ^1.0.7 + supports-preserve-symlinks-flag: ^1.0.0 + bin: + resolve: bin/resolve + checksum: 07af5fc1e81aa1d866cbc9e9460fbb67318a10fa3c4deadc35c3ad8a898ee9a71a86a65e4755ac3195e0ea0cfbe201eb323ebe655ce90526fd61917313a34e4e + languageName: node + linkType: hard + +"resolve@npm:^2.0.0-next.3": + version: 2.0.0-next.3 + resolution: "resolve@npm:2.0.0-next.3" + dependencies: + is-core-module: ^2.2.0 + path-parse: ^1.0.6 + checksum: f34b3b93ada77d64a6d590c06a83e198f3a827624c4ec972260905fa6c4d612164fbf0200d16d2beefea4ad1755b001f4a9a1293d8fc2322a8f7d6bf692c4ff5 + languageName: node + linkType: hard + +"resolve@patch:resolve@^1.10.0#~builtin, resolve@patch:resolve@^1.14.2#~builtin, resolve@patch:resolve@^1.20.0#~builtin, resolve@patch:resolve@^1.22.0#~builtin": + version: 1.22.1 + resolution: "resolve@patch:resolve@npm%3A1.22.1#~builtin::version=1.22.1&hash=c3c19d" + dependencies: + is-core-module: ^2.9.0 + path-parse: ^1.0.7 + supports-preserve-symlinks-flag: ^1.0.0 + bin: + resolve: bin/resolve + checksum: 5656f4d0bedcf8eb52685c1abdf8fbe73a1603bb1160a24d716e27a57f6cecbe2432ff9c89c2bd57542c3a7b9d14b1882b73bfe2e9d7849c9a4c0b8b39f02b8b + languageName: node + linkType: hard + +"resolve@patch:resolve@^2.0.0-next.3#~builtin": + version: 2.0.0-next.3 + resolution: "resolve@patch:resolve@npm%3A2.0.0-next.3#~builtin::version=2.0.0-next.3&hash=c3c19d" + dependencies: + is-core-module: ^2.2.0 + path-parse: ^1.0.6 + checksum: 21684b4d99a4877337cdbd5484311c811b3e8910edb5d868eec85c6e6550b0f570d911f9a384f9e176172d6713f2715bd0b0887fa512cb8c6aeece018de6a9f8 + languageName: node + linkType: hard + +"restore-cursor@npm:^2.0.0": + version: 2.0.0 + resolution: "restore-cursor@npm:2.0.0" + dependencies: + onetime: ^2.0.0 + signal-exit: ^3.0.2 + checksum: 482e13d02d834b6e5e3aa90304a8b5e840775d6f06916cc92a50038adf9f098dcc72405b567da8a37e137ae40ad3e31896fa3136ae62f7a426c2fbf53d036536 + languageName: node + linkType: hard + +"restore-cursor@npm:^3.1.0": + version: 3.1.0 + resolution: "restore-cursor@npm:3.1.0" + dependencies: + onetime: ^5.1.0 + signal-exit: ^3.0.2 + checksum: f877dd8741796b909f2a82454ec111afb84eb45890eb49ac947d87991379406b3b83ff9673a46012fca0d7844bb989f45cc5b788254cf1a39b6b5a9659de0630 + languageName: node + linkType: hard + +"retext-english@npm:^3.0.2": + version: 3.0.4 + resolution: "retext-english@npm:3.0.4" + dependencies: + parse-english: ^4.0.0 + unherit: ^1.0.4 + checksum: 0a8f164753eb187a4c02a4e55bf70bf72a3a41055a8d6e2b864fb7e601ceae20e31e726d14e8aca69b769e26056e6f15a76e36ac74c6ad24165ffe0d24f5c34c + languageName: node + linkType: hard + +"retext-latin@npm:^2.0.0": + version: 2.0.4 + resolution: "retext-latin@npm:2.0.4" + dependencies: + parse-latin: ^4.0.0 + unherit: ^1.0.4 + checksum: bd549099bcfa0b420e87ba985d2f53333f8aaff006ae0222b8cdfc87dd19f981495c07f90c5bca006ff34a515ccbdc862c21f9d2c2467363160d4adc5c8684dc + languageName: node + linkType: hard + +"retext-spell@npm:^2.4.0": + version: 2.4.1 + resolution: "retext-spell@npm:2.4.1" + dependencies: + lodash.includes: ^4.2.0 + nlcst-is-literal: ^1.0.0 + nlcst-to-string: ^2.0.0 + nspell: ^2.0.0 + quotation: ^1.1.0 + unist-util-visit: ^1.0.0 + checksum: 57196b65985fff16a2b767f8f19c796c033d6a3216190181ddb0195cc088b66d4bf09b1f503303d1a3f981a526bdadff544c5c6269bb0b153b0da596ac7abfde + languageName: node + linkType: hard + +"retext-stringify@npm:^2.0.0": + version: 2.0.4 + resolution: "retext-stringify@npm:2.0.4" + dependencies: + nlcst-to-string: ^2.0.0 + checksum: 20109430b74d1817d95c8eca6b426370d2659a327c0bd06ba48ed6f347f25a0c5669e7338e9eb58065c8a11e87a82a9f0b0af6d45dabcbe30a8cebd49246fd60 + languageName: node + linkType: hard + +"retext@npm:^6.0.1": + version: 6.0.2 + resolution: "retext@npm:6.0.2" + dependencies: + retext-latin: ^2.0.0 + retext-stringify: ^2.0.0 + unified: ^7.0.0 + checksum: fd01c077f729d3608386ce4a98bede63b3f0f1db1d901031524244427ca15d4c9a4c50cc7df95ecf314a4980df96249dea436ecaa6b9c8aa00c7af958aa1914f + languageName: node + linkType: hard + +"retry-request@npm:^4.2.2": + version: 4.2.2 + resolution: "retry-request@npm:4.2.2" + dependencies: + debug: ^4.1.1 + extend: ^3.0.2 + checksum: 392b6bcb3b5b15868cb67fbdf7cfa365ec9d4b5f2034f194598b1aa4f05bf815e5a331a5b58d70deef69b7d0d61803ea3c2733153be6262142e43523499e0135 + languageName: node + linkType: hard + +"retry@npm:^0.12.0": + version: 0.12.0 + resolution: "retry@npm:0.12.0" + checksum: 623bd7d2e5119467ba66202d733ec3c2e2e26568074923bc0585b6b99db14f357e79bdedb63cab56cec47491c4a0da7e6021a7465ca6dc4f481d3898fdd3158c + languageName: node + linkType: hard + +"reusify@npm:^1.0.4": + version: 1.0.4 + resolution: "reusify@npm:1.0.4" + checksum: c3076ebcc22a6bc252cb0b9c77561795256c22b757f40c0d8110b1300723f15ec0fc8685e8d4ea6d7666f36c79ccc793b1939c748bf36f18f542744a4e379fcc + languageName: node + linkType: hard + +"rfdc@npm:^1.3.0": + version: 1.3.0 + resolution: "rfdc@npm:1.3.0" + checksum: fb2ba8512e43519983b4c61bd3fa77c0f410eff6bae68b08614437bc3f35f91362215f7b4a73cbda6f67330b5746ce07db5dd9850ad3edc91271ad6deea0df32 + languageName: node + linkType: hard + +"rimraf@npm:^3.0.0, rimraf@npm:^3.0.2": + version: 3.0.2 + resolution: "rimraf@npm:3.0.2" + dependencies: + glob: ^7.1.3 + bin: + rimraf: bin.js + checksum: 87f4164e396f0171b0a3386cc1877a817f572148ee13a7e113b238e48e8a9f2f31d009a92ec38a591ff1567d9662c6b67fd8818a2dbbaed74bc26a87a2a4a9a0 + languageName: node + linkType: hard + +"root-workspace-0b6124@workspace:.": + version: 0.0.0-use.local + resolution: "root-workspace-0b6124@workspace:." + dependencies: + "@typescript-eslint/eslint-plugin": ^5.46.0 + "@typescript-eslint/parser": ^5.46.0 + bash-language-server: ^4.9.2 + dictionary-en: ^3.0.0 + dockerfile-language-server-nodejs: ^0.7.1 + eslint: ^8.29.0 + eslint-config-prettier: ^8.5.0 + eslint-plugin-import: ^2.26.0 + eslint-plugin-jest: ^27.1.6 + eslint-plugin-prettier: ^4.2.1 + eslint-plugin-react: ^7.31.11 + husky: ^3.0.9 + lerna: ~6.5.0 + npm-run-all: ^4.1.5 + precise-commits: ^1.0.2 + prettier: ^2.8.8 + pyright: ^1.1 + source-map-loader: ^4.0.1 + sql-language-server: ^1.2.1 + typescript: ~4.9.4 + typescript-language-server: ^0.6.4 + unified-language-server: ^0.3.0 + vscode-css-languageserver-bin: ^1.4.0 + vscode-html-languageserver-bin: ^1.4.0 + vscode-json-languageserver-bin: ^1.0.1 + vscode-json-languageservice: ^4.1.8 + yaml-language-server: ^1.0.0 + yarn-deduplicate: ^6.0.2 + languageName: unknown + linkType: soft + +"run-async@npm:^2.4.0": + version: 2.4.1 + resolution: "run-async@npm:2.4.1" + checksum: a2c88aa15df176f091a2878eb840e68d0bdee319d8d97bbb89112223259cebecb94bc0defd735662b83c2f7a30bed8cddb7d1674eb48ae7322dc602b22d03797 + languageName: node + linkType: hard + +"run-node@npm:^1.0.0": + version: 1.0.0 + resolution: "run-node@npm:1.0.0" + bin: + run-node: run-node + checksum: 99a0846de16d64c81e7cce487b8d7a77907d7ff69e229ad154cc7ee33ded6f82f71309f47de33cc4c206de6c7b7c37f641d7b6488bb85cc0bfe4da6d8b029242 + languageName: node + linkType: hard + +"run-parallel@npm:^1.1.9": + version: 1.2.0 + resolution: "run-parallel@npm:1.2.0" + dependencies: + queue-microtask: ^1.2.2 + checksum: cb4f97ad25a75ebc11a8ef4e33bb962f8af8516bb2001082ceabd8902e15b98f4b84b4f8a9b222e5d57fc3bd1379c483886ed4619367a7680dad65316993021d + languageName: node + linkType: hard + +"rxjs@npm:^7.5.5": + version: 7.5.6 + resolution: "rxjs@npm:7.5.6" + dependencies: + tslib: ^2.1.0 + checksum: fc05f01364a74dac57490fb3e07ea63b422af04017fae1db641a009073f902ef69f285c5daac31359620dc8d9aee7d81e42b370ca2a8573d1feae0b04329383b + languageName: node + linkType: hard + +"safe-buffer@npm:^5.0.1, safe-buffer@npm:^5.1.0, safe-buffer@npm:~5.1.0, safe-buffer@npm:~5.1.1": + version: 5.1.2 + resolution: "safe-buffer@npm:5.1.2" + checksum: f2f1f7943ca44a594893a852894055cf619c1fbcb611237fc39e461ae751187e7baf4dc391a72125e0ac4fb2d8c5c0b3c71529622e6a58f46b960211e704903c + languageName: node + linkType: hard + +"safe-regex-test@npm:^1.0.0": + version: 1.0.0 + resolution: "safe-regex-test@npm:1.0.0" + dependencies: + call-bind: ^1.0.2 + get-intrinsic: ^1.1.3 + is-regex: ^1.1.4 + checksum: bc566d8beb8b43c01b94e67de3f070fd2781685e835959bbbaaec91cc53381145ca91f69bd837ce6ec244817afa0a5e974fc4e40a2957f0aca68ac3add1ddd34 + languageName: node + linkType: hard + +"safer-buffer@npm:>= 2.1.2 < 3, safer-buffer@npm:>= 2.1.2 < 3.0.0, safer-buffer@npm:~2.1.0": + version: 2.1.2 + resolution: "safer-buffer@npm:2.1.2" + checksum: cab8f25ae6f1434abee8d80023d7e72b598cf1327164ddab31003c51215526801e40b66c5e65d658a0af1e9d6478cadcb4c745f4bd6751f97d8644786c0978b0 + languageName: node + linkType: hard + +"sanitize-html@npm:~2.7.3": + version: 2.7.3 + resolution: "sanitize-html@npm:2.7.3" + dependencies: + deepmerge: ^4.2.2 + escape-string-regexp: ^4.0.0 + htmlparser2: ^6.0.0 + is-plain-object: ^5.0.0 + parse-srcset: ^1.0.2 + postcss: ^8.3.11 + checksum: 2399d1fdbbc3a263fb413c1fe1971b3dc2b51abc6cc5cb49490624539d1c57a8fe31e2b21408c118e2a957f4e673e3169b1f9a5807654408f17b130a9d78aed7 + languageName: node + linkType: hard + +"saxes@npm:^6.0.0": + version: 6.0.0 + resolution: "saxes@npm:6.0.0" + dependencies: + xmlchars: ^2.2.0 + checksum: d3fa3e2aaf6c65ed52ee993aff1891fc47d5e47d515164b5449cbf5da2cbdc396137e55590472e64c5c436c14ae64a8a03c29b9e7389fc6f14035cf4e982ef3b + languageName: node + linkType: hard + +"scheduler@npm:^0.23.0": + version: 0.23.0 + resolution: "scheduler@npm:0.23.0" + dependencies: + loose-envify: ^1.1.0 + checksum: d79192eeaa12abef860c195ea45d37cbf2bbf5f66e3c4dcd16f54a7da53b17788a70d109ee3d3dde1a0fd50e6a8fc171f4300356c5aee4fc0171de526bf35f8a + languageName: node + linkType: hard + +"schema-utils@npm:^2.7.0": + version: 2.7.1 + resolution: "schema-utils@npm:2.7.1" + dependencies: + "@types/json-schema": ^7.0.5 + ajv: ^6.12.4 + ajv-keywords: ^3.5.2 + checksum: 32c62fc9e28edd101e1bd83453a4216eb9bd875cc4d3775e4452b541908fa8f61a7bbac8ffde57484f01d7096279d3ba0337078e85a918ecbeb72872fb09fb2b + languageName: node + linkType: hard + +"schema-utils@npm:^3.0.0, schema-utils@npm:^3.1.1, schema-utils@npm:^3.2.0": + version: 3.3.0 + resolution: "schema-utils@npm:3.3.0" + dependencies: + "@types/json-schema": ^7.0.8 + ajv: ^6.12.5 + ajv-keywords: ^3.5.2 + checksum: ea56971926fac2487f0757da939a871388891bc87c6a82220d125d587b388f1704788f3706e7f63a7b70e49fc2db974c41343528caea60444afd5ce0fe4b85c0 + languageName: node + linkType: hard + +"schema-utils@npm:^4.0.0": + version: 4.2.0 + resolution: "schema-utils@npm:4.2.0" + dependencies: + "@types/json-schema": ^7.0.9 + ajv: ^8.9.0 + ajv-formats: ^2.1.1 + ajv-keywords: ^5.1.0 + checksum: 26a0463d47683258106e6652e9aeb0823bf0b85843039e068b57da1892f7ae6b6b1094d48e9ed5ba5cbe9f7166469d880858b9d91abe8bd249421eb813850cde + languageName: node + linkType: hard + +"semver-compare@npm:^1.0.0": + version: 1.0.0 + resolution: "semver-compare@npm:1.0.0" + checksum: dd1d7e2909744cf2cf71864ac718efc990297f9de2913b68e41a214319e70174b1d1793ac16e31183b128c2b9812541300cb324db8168e6cf6b570703b171c68 + languageName: node + linkType: hard + +"semver@npm:2 || 3 || 4 || 5, semver@npm:^5.4.1, semver@npm:^5.5.0, semver@npm:^5.6.0": + version: 5.7.1 + resolution: "semver@npm:5.7.1" + bin: + semver: ./bin/semver + checksum: 57fd0acfd0bac382ee87cd52cd0aaa5af086a7dc8d60379dfe65fea491fb2489b6016400813930ecd61fd0952dae75c115287a1b16c234b1550887117744dfaf + languageName: node + linkType: hard + +"semver@npm:4.3.2": + version: 4.3.2 + resolution: "semver@npm:4.3.2" + bin: + semver: ./bin/semver + checksum: a0bc4015f01c1843a4f270b0a8e668bbc99e2847d239ae9103c7eb54ab6b5c426d8e857c8796025fefeb131984825da977b0c2bcfbb2179ac22dbb018f91acfd + languageName: node + linkType: hard + +"semver@npm:7.3.4": + version: 7.3.4 + resolution: "semver@npm:7.3.4" + dependencies: + lru-cache: ^6.0.0 + bin: + semver: bin/semver.js + checksum: 96451bfd7cba9b60ee87571959dc47e87c95b2fe58a9312a926340fee9907fc7bc062c352efdaf5bb24b2dff59c145e14faf7eb9d718a84b4751312531b39f43 + languageName: node + linkType: hard + +"semver@npm:7.x, 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.3.8, semver@npm:^7.5.0, semver@npm:^7.5.3": + version: 7.5.4 + resolution: "semver@npm:7.5.4" + dependencies: + lru-cache: ^6.0.0 + bin: + semver: bin/semver.js + checksum: 12d8ad952fa353b0995bf180cdac205a4068b759a140e5d3c608317098b3575ac2f1e09182206bf2eb26120e1c0ed8fb92c48c592f6099680de56bb071423ca3 + languageName: node + linkType: hard + +"semver@npm:^6.0.0, semver@npm:^6.1.1, semver@npm:^6.1.2, semver@npm:^6.3.0": + version: 6.3.0 + resolution: "semver@npm:6.3.0" + bin: + semver: ./bin/semver.js + checksum: 1b26ecf6db9e8292dd90df4e781d91875c0dcc1b1909e70f5d12959a23c7eebb8f01ea581c00783bbee72ceeaad9505797c381756326073850dc36ed284b21b9 + languageName: node + linkType: hard + +"seq-queue@npm:^0.0.5": + version: 0.0.5 + resolution: "seq-queue@npm:0.0.5" + checksum: f8695a6cb613e1b378b9686cde4ea626944091a412fc1c9d24c5039283d4351dd115f4505e4cf103d3a2e4a9a6a72fc7698fdce703839fb1fec9627aa4ce5563 + languageName: node + linkType: hard + +"serialize-javascript@npm:^6.0.1": + version: 6.0.1 + resolution: "serialize-javascript@npm:6.0.1" + dependencies: + randombytes: ^2.1.0 + checksum: 3c4f4cb61d0893b988415bdb67243637333f3f574e9e9cc9a006a2ced0b390b0b3b44aef8d51c951272a9002ec50885eefdc0298891bc27eb2fe7510ea87dc4f + languageName: node + linkType: hard + +"set-blocking@npm:^2.0.0": + version: 2.0.0 + resolution: "set-blocking@npm:2.0.0" + checksum: 6e65a05f7cf7ebdf8b7c75b101e18c0b7e3dff4940d480efed8aad3a36a4005140b660fa1d804cb8bce911cac290441dc728084a30504d3516ac2ff7ad607b02 + languageName: node + linkType: hard + +"shallow-clone@npm:^3.0.0": + version: 3.0.1 + resolution: "shallow-clone@npm:3.0.1" + dependencies: + kind-of: ^6.0.2 + checksum: 39b3dd9630a774aba288a680e7d2901f5c0eae7b8387fc5c8ea559918b29b3da144b7bdb990d7ccd9e11be05508ac9e459ce51d01fd65e583282f6ffafcba2e7 + languageName: node + linkType: hard + +"shebang-command@npm:^1.2.0": + version: 1.2.0 + resolution: "shebang-command@npm:1.2.0" + dependencies: + shebang-regex: ^1.0.0 + checksum: 9eed1750301e622961ba5d588af2212505e96770ec376a37ab678f965795e995ade7ed44910f5d3d3cb5e10165a1847f52d3348c64e146b8be922f7707958908 + languageName: node + linkType: hard + +"shebang-command@npm:^2.0.0": + version: 2.0.0 + resolution: "shebang-command@npm:2.0.0" + dependencies: + shebang-regex: ^3.0.0 + checksum: 6b52fe87271c12968f6a054e60f6bde5f0f3d2db483a1e5c3e12d657c488a15474121a1d55cd958f6df026a54374ec38a4a963988c213b7570e1d51575cea7fa + languageName: node + linkType: hard + +"shebang-regex@npm:^1.0.0": + version: 1.0.0 + resolution: "shebang-regex@npm:1.0.0" + checksum: 404c5a752cd40f94591dfd9346da40a735a05139dac890ffc229afba610854d8799aaa52f87f7e0c94c5007f2c6af55bdcaeb584b56691926c5eaf41dc8f1372 + languageName: node + linkType: hard + +"shebang-regex@npm:^3.0.0": + version: 3.0.0 + resolution: "shebang-regex@npm:3.0.0" + checksum: 1a2bcae50de99034fcd92ad4212d8e01eedf52c7ec7830eedcf886622804fe36884278f2be8be0ea5fde3fd1c23911643a4e0f726c8685b61871c8908af01222 + languageName: node + linkType: hard + +"shell-quote@npm:^1.6.1": + version: 1.7.3 + resolution: "shell-quote@npm:1.7.3" + checksum: aca58e73a3a5d933d02e0bdddedc53ee14f7c2ec264f97ac915b9d4482d077a38e422aa664631d60a672cd3cdb4054eb2e6c0303f54882453dacb6483e482d34 + languageName: node + linkType: hard + +"side-channel@npm:^1.0.4": + version: 1.0.4 + resolution: "side-channel@npm:1.0.4" + dependencies: + call-bind: ^1.0.0 + get-intrinsic: ^1.0.2 + object-inspect: ^1.9.0 + checksum: 351e41b947079c10bd0858364f32bb3a7379514c399edb64ab3dce683933483fc63fb5e4efe0a15a2e8a7e3c436b6a91736ddb8d8c6591b0460a24bb4a1ee245 + languageName: node + linkType: hard + +"signal-exit@npm:3.0.7, signal-exit@npm:^3.0.0, 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 + languageName: node + linkType: hard + +"signal-exit@npm:^4.0.1": + version: 4.0.2 + resolution: "signal-exit@npm:4.0.2" + checksum: 41f5928431cc6e91087bf0343db786a6313dd7c6fd7e551dbc141c95bb5fb26663444fd9df8ea47c5d7fc202f60aa7468c3162a9365cbb0615fc5e1b1328fe31 + languageName: node + linkType: hard + +"simulate-event@npm:~1.4.0": + version: 1.4.0 + resolution: "simulate-event@npm:1.4.0" + dependencies: + xtend: ^4.0.1 + checksum: d2cbb62f7a0c22aa1964e4df7a01b717c3c437df40dde70112fc06046cb8c7a03ca582571754653abc7c8c06df43d28c57b4f0bdf7a587094e4d6282357eb506 + 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, slash@npm:^3.0.0": + version: 3.0.0 + resolution: "slash@npm:3.0.0" + checksum: 94a93fff615f25a999ad4b83c9d5e257a7280c90a32a7cb8b4a87996e4babf322e469c42b7f649fd5796edd8687652f3fb452a86dc97a816f01113183393f11c + languageName: node + linkType: hard + +"sliced@npm:^1.0.1": + version: 1.0.1 + resolution: "sliced@npm:1.0.1" + checksum: 84528d23279985ead75809eeec5d601b0fb6bc28348c6627f4feb40747533a1e36a75e8bc60f9079528079b21c434890b397e8fc5c24a649165cc0bbe90b4d70 + languageName: node + linkType: hard + +"smart-buffer@npm:^4.2.0": + version: 4.2.0 + resolution: "smart-buffer@npm:4.2.0" + checksum: b5167a7142c1da704c0e3af85c402002b597081dd9575031a90b4f229ca5678e9a36e8a374f1814c8156a725d17008ae3bde63b92f9cfd132526379e580bec8b + languageName: node + linkType: hard + +"socks-proxy-agent@npm:^6.0.0": + version: 6.2.1 + resolution: "socks-proxy-agent@npm:6.2.1" + dependencies: + agent-base: ^6.0.2 + debug: ^4.3.3 + socks: ^2.6.2 + checksum: 9ca089d489e5ee84af06741135c4b0d2022977dad27ac8d649478a114cdce87849e8d82b7c22b51501a4116e231241592946fc7fae0afc93b65030ee57084f58 + 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: ^6.0.2 + debug: ^4.3.3 + socks: ^2.6.2 + checksum: 720554370154cbc979e2e9ce6a6ec6ced205d02757d8f5d93fe95adae454fc187a5cbfc6b022afab850a5ce9b4c7d73e0f98e381879cf45f66317a4895953846 + languageName: node + linkType: hard + +"socks@npm:^2.6.2": + version: 2.7.0 + resolution: "socks@npm:2.7.0" + dependencies: + ip: ^2.0.0 + smart-buffer: ^4.2.0 + checksum: 0b5d94e2b3c11e7937b40fc5dac1e80d8b92a330e68c51f1d271ce6980c70adca42a3f8cd47c4a5769956bada074823b53374f2dc5f2ea5c2121b222dec6eadf + languageName: node + linkType: hard + +"sort-keys@npm:^2.0.0": + version: 2.0.0 + resolution: "sort-keys@npm:2.0.0" + dependencies: + is-plain-obj: ^1.0.0 + checksum: f0fd827fa9f8f866e98588d2a38c35209afbf1e9a05bb0e4ceeeb8bbf31d923c8902b0a7e0f561590ddb65e58eba6a74f74b991c85360bcc52e83a3f0d1cffd7 + languageName: node + linkType: hard + +"source-list-map@npm:^2.0.0": + version: 2.0.1 + resolution: "source-list-map@npm:2.0.1" + checksum: 806efc6f75e7cd31e4815e7a3aaf75a45c704871ea4075cb2eb49882c6fca28998f44fc5ac91adb6de03b2882ee6fb02f951fdc85e6a22b338c32bfe19557938 + languageName: node + linkType: hard + +"source-map-js@npm:^1.0.2": + version: 1.0.2 + resolution: "source-map-js@npm:1.0.2" + checksum: c049a7fc4deb9a7e9b481ae3d424cc793cb4845daa690bc5a05d428bf41bf231ced49b4cf0c9e77f9d42fdb3d20d6187619fc586605f5eabe995a316da8d377c + languageName: node + linkType: hard + +"source-map-loader@npm:^4.0.1": + version: 4.0.1 + resolution: "source-map-loader@npm:4.0.1" + dependencies: + abab: ^2.0.6 + iconv-lite: ^0.6.3 + source-map-js: ^1.0.2 + peerDependencies: + webpack: ^5.72.1 + checksum: 4ddca8b03dc61f406effd4bffe70de4b87fef48bae6f737017b2dabcbc7d609133325be1e73838e9265331de28039111d729fcbb8bce88a6018a816bef510eb1 + languageName: node + linkType: hard + +"source-map-loader@npm:~1.0.2": + version: 1.0.2 + resolution: "source-map-loader@npm:1.0.2" + dependencies: + data-urls: ^2.0.0 + iconv-lite: ^0.6.2 + loader-utils: ^2.0.0 + schema-utils: ^2.7.0 + source-map: ^0.6.1 + peerDependencies: + webpack: ^4.0.0 || ^5.0.0 + checksum: 0360b536e904f8fea452d0e122b9199661765229dc62a4b8093cc9d14e985f2ddd146355ede6d11acdd0b9bf4639b364e2526afcf9d3218ed45af63aa5eb053f + languageName: node + linkType: hard + +"source-map-support@npm:0.5.13": + version: 0.5.13 + resolution: "source-map-support@npm:0.5.13" + dependencies: + buffer-from: ^1.0.0 + source-map: ^0.6.0 + checksum: 933550047b6c1a2328599a21d8b7666507427c0f5ef5eaadd56b5da0fd9505e239053c66fe181bf1df469a3b7af9d775778eee283cbb7ae16b902ddc09e93a97 + languageName: node + linkType: hard + +"source-map-support@npm:~0.5.20": + version: 0.5.21 + resolution: "source-map-support@npm:0.5.21" + dependencies: + buffer-from: ^1.0.0 + source-map: ^0.6.0 + checksum: 43e98d700d79af1d36f859bdb7318e601dfc918c7ba2e98456118ebc4c4872b327773e5a1df09b0524e9e5063bb18f0934538eace60cca2710d1fa687645d137 + languageName: node + linkType: hard + +"source-map@npm:^0.6.0, source-map@npm:^0.6.1, source-map@npm:~0.6.1": + version: 0.6.1 + resolution: "source-map@npm:0.6.1" + checksum: 59ce8640cf3f3124f64ac289012c2b8bd377c238e316fb323ea22fbfe83da07d81e000071d7242cad7a23cd91c7de98e4df8830ec3f133cb6133a5f6e9f67bc2 + 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: ^3.0.0 + spdx-license-ids: ^3.0.0 + checksum: e9ae98d22f69c88e7aff5b8778dc01c361ef635580e82d29e5c60a6533cc8f4d820803e67d7432581af0cc4fb49973125076ee3b90df191d153e223c004193b2 + languageName: node + linkType: hard + +"spdx-exceptions@npm:^2.1.0": + version: 2.3.0 + resolution: "spdx-exceptions@npm:2.3.0" + checksum: cb69a26fa3b46305637123cd37c85f75610e8c477b6476fa7354eb67c08128d159f1d36715f19be6f9daf4b680337deb8c65acdcae7f2608ba51931540687ac0 + 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: ^2.1.0 + spdx-license-ids: ^3.0.0 + checksum: a1c6e104a2cbada7a593eaa9f430bd5e148ef5290d4c0409899855ce8b1c39652bcc88a725259491a82601159d6dc790bedefc9016c7472f7de8de7361f8ccde + languageName: node + linkType: hard + +"spdx-license-ids@npm:^3.0.0": + version: 3.0.13 + resolution: "spdx-license-ids@npm:3.0.13" + checksum: 3469d85c65f3245a279fa11afc250c3dca96e9e847f2f79d57f466940c5bb8495da08a542646086d499b7f24a74b8d0b42f3fc0f95d50ff99af1f599f6360ad7 + languageName: node + linkType: hard + +"split2@npm:^3.0.0": + version: 3.2.2 + resolution: "split2@npm:3.2.2" + dependencies: + readable-stream: ^3.0.0 + checksum: 8127ddbedd0faf31f232c0e9192fede469913aa8982aa380752e0463b2e31c2359ef6962eb2d24c125bac59eeec76873678d723b1c7ff696216a1cd071e3994a + languageName: node + linkType: hard + +"split2@npm:^4.1.0": + version: 4.1.0 + resolution: "split2@npm:4.1.0" + checksum: ec581597cb74c13cdfb5e2047543dd40cb1e8e9803c7b1e0c29ede05f2b4f049b2d6e7f2788a225d544549375719658b8f38e9366364dec35dc7a12edfda5ee5 + languageName: node + linkType: hard + +"split@npm:^1.0.0": + version: 1.0.1 + resolution: "split@npm:1.0.1" + dependencies: + through: 2 + checksum: 12f4554a5792c7e98bb3e22b53c63bfa5ef89aa704353e1db608a55b51f5b12afaad6e4a8ecf7843c15f273f43cdadd67b3705cc43d48a75c2cf4641d51f7e7a + languageName: node + linkType: hard + +"sprintf-js@npm:~1.0.2": + version: 1.0.3 + resolution: "sprintf-js@npm:1.0.3" + checksum: 19d79aec211f09b99ec3099b5b2ae2f6e9cdefe50bc91ac4c69144b6d3928a640bb6ae5b3def70c2e85a2c3d9f5ec2719921e3a59d3ca3ef4b2fd1a4656a0df3 + languageName: node + linkType: hard + +"sql-language-server@npm:^1.2.1": + version: 1.2.1 + resolution: "sql-language-server@npm:1.2.1" + dependencies: + "@google-cloud/bigquery": ^5.9.0 + "@joe-re/sql-parser": ^1.2.1 + "@types/pg": ^7.4.10 + "@types/yargs": ^17.0.8 + cardinal: ^2.1.1 + jest: ^26.0.1 + log4js: ^6.2.1 + mysql2: ^2.3.0 + node-ssh-forward: ^0.6.3 + pg: ^7.4.3 + sqlint: ^1.2.1 + sqlite3: ^5.0.2 + vscode-languageclient: ^6.1.3 + vscode-languageserver: 8.0.0-next.8 + vscode-languageserver-protocol: ^3.15.3 + vscode-languageserver-textdocument: ^1.0.1 + yargs: ^17.3.1 + bin: + sql-language-server: npm_bin/cli.js + checksum: f45dcb8e4b2ad4c19afd868b5abc294bfff687d5b8e1db5b699c108db74250984ffabc8e49e80bacd5ed5a5ffedde7b02faf397d78bf28e968da84e04a8b1ae9 + languageName: node + linkType: hard + +"sqlint@npm:^1.2.1": + version: 1.2.1 + resolution: "sqlint@npm:1.2.1" + dependencies: + "@joe-re/sql-parser": ^1.2.1 + ajv: ^6.12.2 + chalk: ^4.0.0 + js-yaml: ^3.14.0 + yargs: ^17.3.1 + bin: + sqlint: bin/cli.js + checksum: ec0dd39bfe0879cf2c3480be59a976818a460981fb9ec844fd29d6466f53f4bd2e0f6f525a7e2110ddb81a5c538e033e56adefb7a35ad684c4f3cad72b4b8f89 + languageName: node + linkType: hard + +"sqlite3@npm:^5.0.2": + version: 5.1.5 + resolution: "sqlite3@npm:5.1.5" + dependencies: + "@mapbox/node-pre-gyp": ^1.0.0 + node-addon-api: ^4.2.0 + node-gyp: 8.x + tar: ^6.1.11 + peerDependencies: + node-gyp: 8.x + dependenciesMeta: + node-gyp: + optional: true + peerDependenciesMeta: + node-gyp: + optional: true + checksum: b7df68c8d4a16cd1d8d42e34035973c2e4cff33e0b917ff8830fa21c84e3bc0d16beaf51589a4a45df9c52e30bf0224122e6c67d0f17ff1d776be738d8706b02 + languageName: node + linkType: hard + +"sqlstring@npm:^2.3.2": + version: 2.3.3 + resolution: "sqlstring@npm:2.3.3" + checksum: 1e7e2d51c38a0cf7372e875408ca100b6e0c9a941ab7773975ea41fb36e5528e404dc787689be855780cf6d0a829ff71027964ae3a05a7446e91dce26672fda7 + languageName: node + linkType: hard + +"ssh2-streams@npm:~0.4.10": + version: 0.4.10 + resolution: "ssh2-streams@npm:0.4.10" + dependencies: + asn1: ~0.2.0 + bcrypt-pbkdf: ^1.0.2 + streamsearch: ~0.1.2 + checksum: dad86d7aa83c08a8f57feedfda26f4032a3f5e605a1d2018da835ced4ebb003739962aa416066f374a006d941067e4215f8b84a8ec81e888156c9274445ae5db + languageName: node + linkType: hard + +"ssh2@npm:^0.8.9": + version: 0.8.9 + resolution: "ssh2@npm:0.8.9" + dependencies: + ssh2-streams: ~0.4.10 + checksum: 3127497cb5570922b3c37daf93e1e49e24776ae3046c7e01c4af1323408653267ea7d9e506283adbdc8445cd20429318501e08db75f2101bbb0bdc49455da720 + languageName: node + linkType: hard + +"ssri@npm:9.0.1, ssri@npm:^9.0.0": + version: 9.0.1 + resolution: "ssri@npm:9.0.1" + dependencies: + minipass: ^3.1.1 + checksum: fb58f5e46b6923ae67b87ad5ef1c5ab6d427a17db0bead84570c2df3cd50b4ceb880ebdba2d60726588272890bae842a744e1ecce5bd2a2a582fccd5068309eb + languageName: node + linkType: hard + +"ssri@npm:^10.0.0": + version: 10.0.4 + resolution: "ssri@npm:10.0.4" + dependencies: + minipass: ^5.0.0 + checksum: fb14da9f8a72b04eab163eb13a9dda11d5962cd2317f85457c4e0b575e9a6e0e3a6a87b5bf122c75cb36565830cd5f263fb457571bf6f1587eb5f95d095d6165 + languageName: node + linkType: hard + +"ssri@npm:^8.0.0, ssri@npm:^8.0.1": + version: 8.0.1 + resolution: "ssri@npm:8.0.1" + dependencies: + minipass: ^3.1.1 + checksum: bc447f5af814fa9713aa201ec2522208ae0f4d8f3bda7a1f445a797c7b929a02720436ff7c478fb5edc4045adb02b1b88d2341b436a80798734e2494f1067b36 + languageName: node + linkType: hard + +"stack-utils@npm:^2.0.3": + version: 2.0.6 + resolution: "stack-utils@npm:2.0.6" + dependencies: + escape-string-regexp: ^2.0.0 + checksum: 052bf4d25bbf5f78e06c1d5e67de2e088b06871fa04107ca8d3f0e9d9263326e2942c8bedee3545795fc77d787d443a538345eef74db2f8e35db3558c6f91ff7 + languageName: node + linkType: hard + +"state-toggle@npm:^1.0.0": + version: 1.0.3 + resolution: "state-toggle@npm:1.0.3" + checksum: 17398af928413e8d8b866cf0c81fd1b1348bb7d65d8983126ff6ff2317a80d6ee023484fba0c54d8169f5aa544f125434a650ae3a71eddc935cae307d4692b4f + languageName: node + linkType: hard + +"stdin@npm:0.0.1": + version: 0.0.1 + resolution: "stdin@npm:0.0.1" + checksum: c991b430f68027c73456b5518e37585e4b3645cdd8185213bfa598a5b925463929cf0e1a125c78738fe285a52f515fd05f8c965ece9b5aeab5e86a3e3f7128f7 + languageName: node + linkType: hard + +"stream-events@npm:^1.0.5": + version: 1.0.5 + resolution: "stream-events@npm:1.0.5" + dependencies: + stubs: ^3.0.0 + checksum: 969ce82e34bfbef5734629cc06f9d7f3705a9ceb8fcd6a526332f9159f1f8bbfdb1a453f3ced0b728083454f7706adbbe8428bceb788a0287ca48ba2642dc3fc + languageName: node + linkType: hard + +"stream-shift@npm:^1.0.0": + version: 1.0.1 + resolution: "stream-shift@npm:1.0.1" + checksum: 59b82b44b29ec3699b5519a49b3cedcc6db58c72fb40c04e005525dfdcab1c75c4e0c180b923c380f204bed78211b9bad8faecc7b93dece4d004c3f6ec75737b + languageName: node + linkType: hard + +"streamroller@npm:^3.0.5": + version: 3.0.5 + resolution: "streamroller@npm:3.0.5" + dependencies: + date-format: ^4.0.5 + debug: ^4.3.3 + fs-extra: ^10.0.1 + checksum: 89d74b477c06cea19d9a9547575c22a704a68d9a85694f4e9caddc57585cce826bd9831547dac64522dac80bf4ac181c172297472953f343ecd54b927efdaedb + languageName: node + linkType: hard + +"streamsearch@npm:~0.1.2": + version: 0.1.2 + resolution: "streamsearch@npm:0.1.2" + checksum: d2db57cbfbf7947ab9c75a7b4c80a8ef8d24850cf0a1a24258bb6956c97317ce1eab7dbcbf9c5aba3e6198611af1053b02411057bbedb99bf9c64b8275248997 + languageName: node + linkType: hard + +"string-length@npm:^4.0.1": + version: 4.0.2 + resolution: "string-length@npm:4.0.2" + dependencies: + char-regex: ^1.0.2 + strip-ansi: ^6.0.0 + checksum: ce85533ef5113fcb7e522bcf9e62cb33871aa99b3729cec5595f4447f660b0cefd542ca6df4150c97a677d58b0cb727a3fe09ac1de94071d05526c73579bf505 + languageName: node + linkType: hard + +"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: + emoji-regex: ^8.0.0 + is-fullwidth-code-point: ^3.0.0 + strip-ansi: ^6.0.1 + checksum: e52c10dc3fbfcd6c3a15f159f54a90024241d0f149cf8aed2982a2d801d2e64df0bf1dc351cf8e95c3319323f9f220c16e740b06faecd53e2462df1d2b5443fb + languageName: node + linkType: hard + +"string-width@npm:^5.0.1, string-width@npm:^5.1.2": + version: 5.1.2 + resolution: "string-width@npm:5.1.2" + dependencies: + eastasianwidth: ^0.2.0 + emoji-regex: ^9.2.2 + strip-ansi: ^7.0.1 + checksum: 7369deaa29f21dda9a438686154b62c2c5f661f8dda60449088f9f980196f7908fc39fdd1803e3e01541970287cf5deae336798337e9319a7055af89dafa7193 + languageName: node + linkType: hard + +"string.prototype.matchall@npm:^4.0.8": + version: 4.0.8 + resolution: "string.prototype.matchall@npm:4.0.8" + dependencies: + call-bind: ^1.0.2 + define-properties: ^1.1.4 + es-abstract: ^1.20.4 + get-intrinsic: ^1.1.3 + has-symbols: ^1.0.3 + internal-slot: ^1.0.3 + regexp.prototype.flags: ^1.4.3 + side-channel: ^1.0.4 + checksum: 952da3a818de42ad1c10b576140a5e05b4de7b34b8d9dbf00c3ac8c1293e9c0f533613a39c5cda53e0a8221f2e710bc2150e730b1c2278d60004a8a35726efb6 + languageName: node + linkType: hard + +"string.prototype.padend@npm:^3.0.0": + version: 3.1.1 + resolution: "string.prototype.padend@npm:3.1.1" + dependencies: + call-bind: ^1.0.0 + define-properties: ^1.1.3 + es-abstract: ^1.18.0-next.1 + checksum: dba40ab6ccb276cdc4704589640ce6c23b21eebfa18836d4ae2b573c33cd4adaefde435bf0264a8444368ffddfda86d2b345e7ad00da42d89e0dfae3bdb9ded1 + languageName: node + linkType: hard + +"string.prototype.trimend@npm:^1.0.6": + version: 1.0.6 + resolution: "string.prototype.trimend@npm:1.0.6" + dependencies: + call-bind: ^1.0.2 + define-properties: ^1.1.4 + es-abstract: ^1.20.4 + checksum: 0fdc34645a639bd35179b5a08227a353b88dc089adf438f46be8a7c197fc3f22f8514c1c9be4629b3cd29c281582730a8cbbad6466c60f76b5f99cf2addb132e + languageName: node + linkType: hard + +"string.prototype.trimstart@npm:^1.0.6": + version: 1.0.6 + resolution: "string.prototype.trimstart@npm:1.0.6" + dependencies: + call-bind: ^1.0.2 + define-properties: ^1.1.4 + es-abstract: ^1.20.4 + checksum: 89080feef416621e6ef1279588994305477a7a91648d9436490d56010a1f7adc39167cddac7ce0b9884b8cdbef086987c4dcb2960209f2af8bac0d23ceff4f41 + languageName: node + linkType: hard + +"string_decoder@npm:^1.1.1, string_decoder@npm:~1.1.1": + version: 1.1.1 + resolution: "string_decoder@npm:1.1.1" + dependencies: + safe-buffer: ~5.1.0 + checksum: 9ab7e56f9d60a28f2be697419917c50cac19f3e8e6c28ef26ed5f4852289fe0de5d6997d29becf59028556f2c62983790c1d9ba1e2a3cc401768ca12d5183a5b + languageName: node + linkType: hard + +"strip-ansi-cjs@npm:strip-ansi@^6.0.1, strip-ansi@npm:^6.0.0, strip-ansi@npm:^6.0.1": + version: 6.0.1 + resolution: "strip-ansi@npm:6.0.1" + dependencies: + ansi-regex: ^5.0.1 + checksum: f3cd25890aef3ba6e1a74e20896c21a46f482e93df4a06567cebf2b57edabb15133f1f94e57434e0a958d61186087b1008e89c94875d019910a213181a14fc8c + languageName: node + linkType: hard + +"strip-ansi@npm:^7.0.1": + version: 7.1.0 + resolution: "strip-ansi@npm:7.1.0" + dependencies: + ansi-regex: ^6.0.1 + checksum: 859c73fcf27869c22a4e4d8c6acfe690064659e84bef9458aa6d13719d09ca88dcfd40cbf31fd0be63518ea1a643fe070b4827d353e09533a5b0b9fd4553d64d + languageName: node + linkType: hard + +"strip-bom@npm:^3.0.0": + version: 3.0.0 + resolution: "strip-bom@npm:3.0.0" + checksum: 8d50ff27b7ebe5ecc78f1fe1e00fcdff7af014e73cf724b46fb81ef889eeb1015fc5184b64e81a2efe002180f3ba431bdd77e300da5c6685d702780fbf0c8d5b + languageName: node + linkType: hard + +"strip-bom@npm:^4.0.0": + version: 4.0.0 + resolution: "strip-bom@npm:4.0.0" + checksum: 9dbcfbaf503c57c06af15fe2c8176fb1bf3af5ff65003851a102749f875a6dbe0ab3b30115eccf6e805e9d756830d3e40ec508b62b3f1ddf3761a20ebe29d3f3 + languageName: node + linkType: hard + +"strip-eof@npm:^1.0.0": + version: 1.0.0 + resolution: "strip-eof@npm:1.0.0" + checksum: 40bc8ddd7e072f8ba0c2d6d05267b4e0a4800898c3435b5fb5f5a21e6e47dfaff18467e7aa0d1844bb5d6274c3097246595841fbfeb317e541974ee992cac506 + 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 + languageName: node + linkType: hard + +"strip-indent@npm:^3.0.0": + version: 3.0.0 + resolution: "strip-indent@npm:3.0.0" + dependencies: + min-indent: ^1.0.0 + checksum: 18f045d57d9d0d90cd16f72b2313d6364fd2cb4bf85b9f593523ad431c8720011a4d5f08b6591c9d580f446e78855c5334a30fb91aa1560f5d9f95ed1b4a0530 + languageName: node + linkType: hard + +"strip-json-comments@npm:^3.1.0, strip-json-comments@npm:^3.1.1": + version: 3.1.1 + resolution: "strip-json-comments@npm:3.1.1" + checksum: 492f73e27268f9b1c122733f28ecb0e7e8d8a531a6662efbd08e22cccb3f9475e90a1b82cab06a392f6afae6d2de636f977e231296400d0ec5304ba70f166443 + languageName: node + linkType: hard + +"strong-log-transformer@npm:2.1.0, strong-log-transformer@npm:^2.1.0": + version: 2.1.0 + resolution: "strong-log-transformer@npm:2.1.0" + dependencies: + duplexer: ^0.1.1 + minimist: ^1.2.0 + through: ^2.3.4 + bin: + sl-log-transformer: bin/sl-log-transformer.js + checksum: abf9a4ac143118f26c3a0771b204b02f5cf4fa80384ae158f25e02bfbff761038accc44a7f65869ccd5a5995a7f2c16b1466b83149644ba6cecd3072a8927297 + languageName: node + linkType: hard + +"stubs@npm:^3.0.0": + version: 3.0.0 + resolution: "stubs@npm:3.0.0" + checksum: dec7b82186e3743317616235c59bfb53284acc312cb9f4c3e97e2205c67a5c158b0ca89db5927e52351582e90a2672822eeaec9db396e23e56893d2a8676e024 + languageName: node + linkType: hard + +"style-loader@npm:~3.3.1": + version: 3.3.3 + resolution: "style-loader@npm:3.3.3" + peerDependencies: + webpack: ^5.0.0 + checksum: f59c953f56f6a935bd6a1dfa409f1128fed2b66b48ce4a7a75b85862a7156e5e90ab163878962762f528ec4d510903d828da645e143fbffd26f055dc1c094078 + languageName: node + linkType: hard + +"style-mod@npm:^4.0.0": + version: 4.0.3 + resolution: "style-mod@npm:4.0.3" + checksum: 934556e720bd29026ff8fef43a1a35b58957813025b91f996d886e9405acf934ddb1934def4400b174bd7784c9263eb9c71f07ae83925af9271b7d921d546854 + languageName: node + linkType: hard + +"supports-color@npm:^5.3.0": + version: 5.5.0 + resolution: "supports-color@npm:5.5.0" + dependencies: + has-flag: ^3.0.0 + checksum: 95f6f4ba5afdf92f495b5a912d4abee8dcba766ae719b975c56c084f5004845f6f5a5f7769f52d53f40e21952a6d87411bafe34af4a01e65f9926002e38e1dac + languageName: node + linkType: hard + +"supports-color@npm:^7.1.0, supports-color@npm:^7.2.0": + version: 7.2.0 + resolution: "supports-color@npm:7.2.0" + dependencies: + has-flag: ^4.0.0 + checksum: 3dda818de06ebbe5b9653e07842d9479f3555ebc77e9a0280caf5a14fb877ffee9ed57007c3b78f5a6324b8dbeec648d9e97a24e2ed9fdb81ddc69ea07100f4a + languageName: node + linkType: hard + +"supports-color@npm:^8.0.0": + version: 8.1.1 + resolution: "supports-color@npm:8.1.1" + dependencies: + has-flag: ^4.0.0 + checksum: c052193a7e43c6cdc741eb7f378df605636e01ad434badf7324f17fb60c69a880d8d8fcdcb562cf94c2350e57b937d7425ab5b8326c67c2adc48f7c87c1db406 + 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: 53b1e247e68e05db7b3808b99b892bd36fb096e6fba213a06da7fab22045e97597db425c724f2bbd6c99a3c295e1e73f3e4de78592289f38431049e1277ca0ae + languageName: node + linkType: hard + +"symbol-tree@npm:^3.2.4": + version: 3.2.4 + resolution: "symbol-tree@npm:3.2.4" + checksum: 6e8fc7e1486b8b54bea91199d9535bb72f10842e40c79e882fc94fb7b14b89866adf2fd79efa5ebb5b658bc07fb459ccce5ac0e99ef3d72f474e74aaf284029d + 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: 3b7a1b4d86fa940aad46d9e73d1e8739335efd4c48322cb37d073eb6f80f5281889bf0320c6d8ffcfa1a0dd5bfdbd0f9d037e252ef972aca595330538aac4d51 + languageName: node + linkType: hard + +"tar-stream@npm:~2.2.0": + version: 2.2.0 + resolution: "tar-stream@npm:2.2.0" + dependencies: + bl: ^4.0.3 + end-of-stream: ^1.4.1 + fs-constants: ^1.0.0 + inherits: ^2.0.3 + readable-stream: ^3.1.1 + checksum: 699831a8b97666ef50021c767f84924cfee21c142c2eb0e79c63254e140e6408d6d55a065a2992548e72b06de39237ef2b802b99e3ece93ca3904a37622a66f3 + languageName: node + linkType: hard + +"tar@npm:6.1.11, tar@npm:^6.0.2, tar@npm:^6.1.11, tar@npm:^6.1.2": + version: 6.1.11 + resolution: "tar@npm:6.1.11" + 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 + checksum: a04c07bb9e2d8f46776517d4618f2406fb977a74d914ad98b264fc3db0fe8224da5bec11e5f8902c5b9bcb8ace22d95fbe3c7b36b8593b7dfc8391a25898f32f + languageName: node + linkType: hard + +"teeny-request@npm:^7.0.0": + version: 7.1.3 + resolution: "teeny-request@npm:7.1.3" + dependencies: + http-proxy-agent: ^5.0.0 + https-proxy-agent: ^5.0.0 + node-fetch: ^2.6.1 + stream-events: ^1.0.5 + uuid: ^8.0.0 + checksum: 81f27b1ebe4672e355871b5b1012dacdf06bd441523fe91eb8f8492f1ef3aa367ec9e9df079218504e0648b059357cd8fd0f1b432e12a12e95a474f7d1df3a89 + languageName: node + linkType: hard + +"temp-dir@npm:1.0.0": + version: 1.0.0 + resolution: "temp-dir@npm:1.0.0" + checksum: cb2b58ddfb12efa83e939091386ad73b425c9a8487ea0095fe4653192a40d49184a771a1beba99045fbd011e389fd563122d79f54f82be86a55620667e08a6b2 + languageName: node + linkType: hard + +"temp-dir@npm:^2.0.0": + version: 2.0.0 + resolution: "temp-dir@npm:2.0.0" + checksum: cc4f0404bf8d6ae1a166e0e64f3f409b423f4d1274d8c02814a59a5529f07db6cd070a749664141b992b2c1af337fa9bb451a460a43bb9bcddc49f235d3115aa + languageName: node + linkType: hard + +"tempy@npm:^1.0.1": + version: 1.0.1 + resolution: "tempy@npm:1.0.1" + dependencies: + del: ^6.0.0 + is-stream: ^2.0.0 + temp-dir: ^2.0.0 + type-fest: ^0.16.0 + unique-string: ^2.0.0 + checksum: e77ca4440af18e42dc64d8903b7ed0be673455b76680ff94a7d7c6ee7c16f7604bdcdee3c39436342b1082c23eda010dbe48f6094e836e0bd53c8b1aa63e5b95 + languageName: node + linkType: hard + +"terser-webpack-plugin@npm:^5.3.7": + version: 5.3.9 + resolution: "terser-webpack-plugin@npm:5.3.9" + dependencies: + "@jridgewell/trace-mapping": ^0.3.17 + jest-worker: ^27.4.5 + schema-utils: ^3.1.1 + serialize-javascript: ^6.0.1 + terser: ^5.16.8 + peerDependencies: + webpack: ^5.1.0 + peerDependenciesMeta: + "@swc/core": + optional: true + esbuild: + optional: true + uglify-js: + optional: true + checksum: 41705713d6f9cb83287936b21e27c658891c78c4392159f5148b5623f0e8c48559869779619b058382a4c9758e7820ea034695e57dc7c474b4962b79f553bc5f + languageName: node + linkType: hard + +"terser@npm:^5.16.8": + version: 5.18.0 + resolution: "terser@npm:5.18.0" + dependencies: + "@jridgewell/source-map": ^0.3.3 + acorn: ^8.8.2 + commander: ^2.20.0 + source-map-support: ~0.5.20 + bin: + terser: bin/terser + checksum: d01eb9805a978b3338b68fd2d9e35c1cd4cad78ea093dc92c7b3c38965232f0af0f95e0c6d90920ecf600a74135c608aebae26302c036c01393a590e1918bb90 + languageName: node + linkType: hard + +"test-exclude@npm:^6.0.0": + version: 6.0.0 + resolution: "test-exclude@npm:6.0.0" + dependencies: + "@istanbuljs/schema": ^0.1.2 + glob: ^7.1.4 + minimatch: ^3.0.4 + checksum: 3b34a3d77165a2cb82b34014b3aba93b1c4637a5011807557dc2f3da826c59975a5ccad765721c4648b39817e3472789f9b0fa98fc854c5c1c7a1e632aacdc28 + languageName: node + linkType: hard + +"text-extensions@npm:^1.0.0": + version: 1.9.0 + resolution: "text-extensions@npm:1.9.0" + checksum: 56a9962c1b62d39b2bcb369b7558ca85c1b55e554b38dfd725edcc0a1babe5815782a60c17ff6b839093b163dfebb92b804208aaaea616ec7571c8059ae0cf44 + languageName: node + linkType: hard + +"text-table@npm:^0.2.0": + version: 0.2.0 + resolution: "text-table@npm:0.2.0" + checksum: b6937a38c80c7f84d9c11dd75e49d5c44f71d95e810a3250bd1f1797fc7117c57698204adf676b71497acc205d769d65c16ae8fa10afad832ae1322630aef10a + languageName: node + linkType: hard + +"thenify-all@npm:^1.0.0": + version: 1.6.0 + resolution: "thenify-all@npm:1.6.0" + dependencies: + thenify: ">= 3.1.0 < 4" + checksum: dba7cc8a23a154cdcb6acb7f51d61511c37a6b077ec5ab5da6e8b874272015937788402fd271fdfc5f187f8cb0948e38d0a42dcc89d554d731652ab458f5343e + languageName: node + linkType: hard + +"thenify@npm:>= 3.1.0 < 4": + version: 3.3.1 + resolution: "thenify@npm:3.3.1" + dependencies: + any-promise: ^1.0.0 + checksum: 84e1b804bfec49f3531215f17b4a6e50fd4397b5f7c1bccc427b9c656e1ecfb13ea79d899930184f78bc2f57285c54d9a50a590c8868f4f0cef5c1d9f898b05e + languageName: node + linkType: hard + +"through2@npm:^2.0.0": + version: 2.0.5 + resolution: "through2@npm:2.0.5" + dependencies: + readable-stream: ~2.3.6 + xtend: ~4.0.1 + checksum: beb0f338aa2931e5660ec7bf3ad949e6d2e068c31f4737b9525e5201b824ac40cac6a337224856b56bd1ddd866334bbfb92a9f57cd6f66bc3f18d3d86fc0fe50 + languageName: node + linkType: hard + +"through2@npm:^4.0.0": + version: 4.0.2 + resolution: "through2@npm:4.0.2" + dependencies: + readable-stream: 3 + checksum: ac7430bd54ccb7920fd094b1c7ff3e1ad6edd94202e5528331253e5fde0cc56ceaa690e8df9895de2e073148c52dfbe6c4db74cacae812477a35660090960cc0 + languageName: node + linkType: hard + +"through@npm:2, through@npm:>=2.2.7 <3, through@npm:^2.3.4, through@npm:^2.3.6": + version: 2.3.8 + resolution: "through@npm:2.3.8" + checksum: a38c3e059853c494af95d50c072b83f8b676a9ba2818dcc5b108ef252230735c54e0185437618596c790bbba8fcdaef5b290405981ffa09dce67b1f1bf190cbd + languageName: node + linkType: hard + +"timers-ext@npm:^0.1.5": + version: 0.1.7 + resolution: "timers-ext@npm:0.1.7" + dependencies: + es5-ext: ~0.10.46 + next-tick: 1 + checksum: ef3f27a0702a88d885bcbb0317c3e3ecd094ce644da52e7f7d362394a125d9e3578292a8f8966071a980d8abbc3395725333b1856f3ae93835b46589f700d938 + languageName: node + linkType: hard + +"tmp@npm:^0.0.33": + version: 0.0.33 + resolution: "tmp@npm:0.0.33" + dependencies: + os-tmpdir: ~1.0.2 + checksum: 902d7aceb74453ea02abbf58c203f4a8fc1cead89b60b31e354f74ed5b3fb09ea817f94fb310f884a5d16987dd9fa5a735412a7c2dd088dd3d415aa819ae3a28 + languageName: node + linkType: hard + +"tmp@npm:~0.2.1": + version: 0.2.1 + resolution: "tmp@npm:0.2.1" + dependencies: + rimraf: ^3.0.0 + checksum: 8b1214654182575124498c87ca986ac53dc76ff36e8f0e0b67139a8d221eaecfdec108c0e6ec54d76f49f1f72ab9325500b246f562b926f85bcdfca8bf35df9e + languageName: node + linkType: hard + +"tmpl@npm:1.0.5": + version: 1.0.5 + resolution: "tmpl@npm:1.0.5" + checksum: cd922d9b853c00fe414c5a774817be65b058d54a2d01ebb415840960406c669a0fc632f66df885e24cb022ec812739199ccbdb8d1164c3e513f85bfca5ab2873 + 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 + languageName: node + linkType: hard + +"to-regex-range@npm:^5.0.1": + version: 5.0.1 + resolution: "to-regex-range@npm:5.0.1" + dependencies: + is-number: ^7.0.0 + checksum: f76fa01b3d5be85db6a2a143e24df9f60dd047d151062d0ba3df62953f2f697b16fe5dad9b0ac6191c7efc7b1d9dcaa4b768174b7b29da89d4428e64bc0a20ed + languageName: node + linkType: hard + +"tough-cookie@npm:^4.1.2": + version: 4.1.3 + resolution: "tough-cookie@npm:4.1.3" + dependencies: + psl: ^1.1.33 + punycode: ^2.1.1 + universalify: ^0.2.0 + url-parse: ^1.5.3 + checksum: c9226afff36492a52118432611af083d1d8493a53ff41ec4ea48e5b583aec744b989e4280bcf476c910ec1525a89a4a0f1cae81c08b18fb2ec3a9b3a72b91dcc + languageName: node + linkType: hard + +"tr46@npm:^2.1.0": + version: 2.1.0 + resolution: "tr46@npm:2.1.0" + dependencies: + punycode: ^2.1.1 + checksum: ffe6049b9dca3ae329b059aada7f515b0f0064c611b39b51ff6b53897e954650f6f63d9319c6c008d36ead477c7b55e5f64c9dc60588ddc91ff720d64eb710b3 + languageName: node + linkType: hard + +"tr46@npm:^3.0.0": + version: 3.0.0 + resolution: "tr46@npm:3.0.0" + dependencies: + punycode: ^2.1.1 + checksum: 44c3cc6767fb800490e6e9fd64fd49041aa4e49e1f6a012b34a75de739cc9ed3a6405296072c1df8b6389ae139c5e7c6496f659cfe13a04a4bff3a1422981270 + languageName: node + linkType: hard + +"tr46@npm:~0.0.3": + version: 0.0.3 + resolution: "tr46@npm:0.0.3" + checksum: 726321c5eaf41b5002e17ffbd1fb7245999a073e8979085dacd47c4b4e8068ff5777142fc6726d6ca1fd2ff16921b48788b87225cbc57c72636f6efa8efbffe3 + languageName: node + linkType: hard + +"treeverse@npm:^2.0.0": + version: 2.0.0 + resolution: "treeverse@npm:2.0.0" + checksum: 3c6b2b890975a4d42c86b9a0f1eb932b4450db3fa874be5c301c4f5e306fd76330c6a490cf334b0937b3a44b049787ba5d98c88bc7b140f34fdb3ab1f83e5269 + languageName: node + linkType: hard + +"trim-newlines@npm:^3.0.0": + version: 3.0.1 + resolution: "trim-newlines@npm:3.0.1" + checksum: b530f3fadf78e570cf3c761fb74fef655beff6b0f84b29209bac6c9622db75ad1417f4a7b5d54c96605dcd72734ad44526fef9f396807b90839449eb543c6206 + languageName: node + linkType: hard + +"trim-trailing-lines@npm:^1.0.0": + version: 1.1.4 + resolution: "trim-trailing-lines@npm:1.1.4" + checksum: 5d39d21c0d4b258667012fcd784f73129e148ea1c213b1851d8904f80499fc91df6710c94c7dd49a486a32da2b9cb86020dda79f285a9a2586cfa622f80490c2 + languageName: node + linkType: hard + +"trim@npm:0.0.1": + version: 0.0.1 + resolution: "trim@npm:0.0.1" + checksum: 2b4646dff99a222e8e1526edd4e3a43bbd925af0b8e837c340455d250157e7deefaa4da49bb891ab841e5c27b1afc5e9e32d4b57afb875d2dfcabf4e319b8f7f + languageName: node + linkType: hard + +"trough@npm:^1.0.0": + version: 1.0.5 + resolution: "trough@npm:1.0.5" + checksum: d6c8564903ed00e5258bab92134b020724dbbe83148dc72e4bf6306c03ed8843efa1bcc773fa62410dd89161ecb067432dd5916501793508a9506cacbc408e25 + languageName: node + linkType: hard + +"ts-jest@npm:^29.1.0": + version: 29.1.0 + resolution: "ts-jest@npm:29.1.0" + dependencies: + bs-logger: 0.x + fast-json-stable-stringify: 2.x + jest-util: ^29.0.0 + json5: ^2.2.3 + lodash.memoize: 4.x + make-error: 1.x + semver: 7.x + yargs-parser: ^21.0.1 + peerDependencies: + "@babel/core": ">=7.0.0-beta.0 <8" + "@jest/types": ^29.0.0 + babel-jest: ^29.0.0 + jest: ^29.0.0 + typescript: ">=4.3 <6" + peerDependenciesMeta: + "@babel/core": + optional: true + "@jest/types": + optional: true + babel-jest: + optional: true + esbuild: + optional: true + bin: + ts-jest: cli.js + checksum: 535dc42ad523cbe1e387701fb2e448518419b515c082f09b25411f0b3dd0b854cf3e8141c316d6f4b99883aeb4a4f94159cbb1edfb06d7f77ea6229fadb2e1bf + languageName: node + linkType: hard + +"tsconfig-paths@npm:^3.14.1": + version: 3.14.1 + resolution: "tsconfig-paths@npm:3.14.1" + dependencies: + "@types/json5": ^0.0.29 + json5: ^1.0.1 + minimist: ^1.2.6 + strip-bom: ^3.0.0 + checksum: 8afa01c673ebb4782ba53d3a12df97fa837ce524f8ad38ee4e2b2fd57f5ac79abc21c574e9e9eb014d93efe7fe8214001b96233b5c6ea75bd1ea82afe17a4c6d + languageName: node + linkType: hard + +"tsconfig-paths@npm:^4.1.2": + version: 4.2.0 + resolution: "tsconfig-paths@npm:4.2.0" + dependencies: + json5: ^2.2.2 + minimist: ^1.2.6 + strip-bom: ^3.0.0 + checksum: 28c5f7bbbcabc9dabd4117e8fdc61483f6872a1c6b02a4b1c4d68c5b79d06896c3cc9547610c4c3ba64658531caa2de13ead1ea1bf321c7b53e969c4752b98c7 + languageName: node + linkType: hard + +"tslib@npm:^1.8.1": + version: 1.14.1 + resolution: "tslib@npm:1.14.1" + checksum: dbe628ef87f66691d5d2959b3e41b9ca0045c3ee3c7c7b906cc1e328b39f199bb1ad9e671c39025bd56122ac57dfbf7385a94843b1cc07c60a4db74795829acd + languageName: node + linkType: hard + +"tslib@npm:^2.1.0, tslib@npm:^2.3.0, tslib@npm:^2.4.0": + version: 2.4.1 + resolution: "tslib@npm:2.4.1" + checksum: 19480d6e0313292bd6505d4efe096a6b31c70e21cf08b5febf4da62e95c265c8f571f7b36fcc3d1a17e068032f59c269fab3459d6cd3ed6949eafecf64315fca + languageName: node + linkType: hard + +"tslib@npm:^2.5.0": + version: 2.6.2 + resolution: "tslib@npm:2.6.2" + checksum: 329ea56123005922f39642318e3d1f0f8265d1e7fcb92c633e0809521da75eeaca28d2cf96d7248229deb40e5c19adf408259f4b9640afd20d13aecc1430f3ad + languageName: node + linkType: hard + +"tsutils@npm:^3.21.0": + version: 3.21.0 + resolution: "tsutils@npm:3.21.0" + dependencies: + tslib: ^1.8.1 + 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" + checksum: 1843f4c1b2e0f975e08c4c21caa4af4f7f65a12ac1b81b3b8489366826259323feb3fc7a243123453d2d1a02314205a7634e048d4a8009921da19f99755cdc48 + languageName: node + linkType: hard + +"turndown@npm:7.1.2": + version: 7.1.2 + resolution: "turndown@npm:7.1.2" + dependencies: + domino: ^2.1.6 + checksum: 4779580c3439d0385e7dd71144bf0f72884cf7fb492bd2f5600ff256fa7c9ae9663ef284507021de90d54d62885fc027d740d578a3e11a1ae83e84a107eedd38 + languageName: node + linkType: hard + +"tweetnacl@npm:^0.14.3": + version: 0.14.5 + resolution: "tweetnacl@npm:0.14.5" + checksum: 6061daba1724f59473d99a7bb82e13f211cdf6e31315510ae9656fefd4779851cb927adad90f3b488c8ed77c106adc0421ea8055f6f976ff21b27c5c4e918487 + languageName: node + linkType: hard + +"type-check@npm:^0.4.0, type-check@npm:~0.4.0": + version: 0.4.0 + resolution: "type-check@npm:0.4.0" + dependencies: + prelude-ls: ^1.2.1 + checksum: ec688ebfc9c45d0c30412e41ca9c0cdbd704580eb3a9ccf07b9b576094d7b86a012baebc95681999dd38f4f444afd28504cb3a89f2ef16b31d4ab61a0739025a + languageName: node + linkType: hard + +"type-check@npm:~0.3.2": + version: 0.3.2 + resolution: "type-check@npm:0.3.2" + dependencies: + prelude-ls: ~1.1.2 + checksum: dd3b1495642731bc0e1fc40abe5e977e0263005551ac83342ecb6f4f89551d106b368ec32ad3fb2da19b3bd7b2d1f64330da2ea9176d8ddbfe389fb286eb5124 + languageName: node + linkType: hard + +"type-detect@npm:4.0.8": + version: 4.0.8 + resolution: "type-detect@npm:4.0.8" + checksum: 62b5628bff67c0eb0b66afa371bd73e230399a8d2ad30d852716efcc4656a7516904570cd8631a49a3ce57c10225adf5d0cbdcb47f6b0255fe6557c453925a15 + languageName: node + linkType: hard + +"type-fest@npm:^0.16.0": + version: 0.16.0 + resolution: "type-fest@npm:0.16.0" + checksum: 1a4102c06dc109db00418c753062e206cab65befd469d000ece4452ee649bf2a9cf57686d96fb42326bc9d918d9a194d4452897b486dcc41989e5c99e4e87094 + languageName: node + linkType: hard + +"type-fest@npm:^0.18.0": + version: 0.18.1 + resolution: "type-fest@npm:0.18.1" + checksum: e96dcee18abe50ec82dab6cbc4751b3a82046da54c52e3b2d035b3c519732c0b3dd7a2fa9df24efd1a38d953d8d4813c50985f215f1957ee5e4f26b0fe0da395 + languageName: node + linkType: hard + +"type-fest@npm:^0.20.2": + version: 0.20.2 + resolution: "type-fest@npm:0.20.2" + checksum: 4fb3272df21ad1c552486f8a2f8e115c09a521ad7a8db3d56d53718d0c907b62c6e9141ba5f584af3f6830d0872c521357e512381f24f7c44acae583ad517d73 + languageName: node + linkType: hard + +"type-fest@npm:^0.21.3": + version: 0.21.3 + resolution: "type-fest@npm:0.21.3" + checksum: e6b32a3b3877f04339bae01c193b273c62ba7bfc9e325b8703c4ee1b32dc8fe4ef5dfa54bf78265e069f7667d058e360ae0f37be5af9f153b22382cd55a9afe0 + languageName: node + linkType: hard + +"type-fest@npm:^0.4.1": + version: 0.4.1 + resolution: "type-fest@npm:0.4.1" + checksum: 25f882d9cc2f24af7a0a529157f96dead157894c456bfbad16d48f990c43b470dfb79848e8d9c03fe1be72a7d169e44f6f3135b54628393c66a6189c5dc077f7 + languageName: node + linkType: hard + +"type-fest@npm:^0.6.0": + version: 0.6.0 + resolution: "type-fest@npm:0.6.0" + checksum: b2188e6e4b21557f6e92960ec496d28a51d68658018cba8b597bd3ef757721d1db309f120ae987abeeda874511d14b776157ff809f23c6d1ce8f83b9b2b7d60f + languageName: node + linkType: hard + +"type-fest@npm:^0.8.1": + version: 0.8.1 + resolution: "type-fest@npm:0.8.1" + checksum: d61c4b2eba24009033ae4500d7d818a94fd6d1b481a8111612ee141400d5f1db46f199c014766b9fa9b31a6a7374d96fc748c6d688a78a3ce5a33123839becb7 + languageName: node + linkType: hard + +"type@npm:^1.0.1": + version: 1.2.0 + resolution: "type@npm:1.2.0" + checksum: dae8c64f82c648b985caf321e9dd6e8b7f4f2e2d4f846fc6fd2c8e9dc7769382d8a52369ddbaccd59aeeceb0df7f52fb339c465be5f2e543e81e810e413451ee + languageName: node + linkType: hard + +"type@npm:^2.5.0": + version: 2.7.2 + resolution: "type@npm:2.7.2" + checksum: 0f42379a8adb67fe529add238a3e3d16699d95b42d01adfe7b9a7c5da297f5c1ba93de39265ba30ffeb37dfd0afb3fb66ae09f58d6515da442219c086219f6f4 + languageName: node + linkType: hard + +"typedarray@npm:^0.0.6": + version: 0.0.6 + resolution: "typedarray@npm:0.0.6" + checksum: 33b39f3d0e8463985eeaeeacc3cb2e28bc3dfaf2a5ed219628c0b629d5d7b810b0eb2165f9f607c34871d5daa92ba1dc69f49051cf7d578b4cbd26c340b9d1b1 + languageName: node + linkType: hard + +"typescript-language-server@npm:^0.6.4": + version: 0.6.5 + resolution: "typescript-language-server@npm:0.6.5" + dependencies: + command-exists: ^1.2.6 + commander: ^7.2.0 + fs-extra: ^10.0.0 + p-debounce: ^2.1.0 + tempy: ^1.0.1 + vscode-languageserver: ^7.0.0 + vscode-languageserver-protocol: ^3.16.0 + vscode-languageserver-textdocument: ^1.0.1 + vscode-uri: ^1.0.5 + bin: + typescript-language-server: lib/cli.js + checksum: cb809f46fa979270ad707b45243af5690c72fb080c6cbccdcf3fa1e26c83556493368b91853577391286aa5c3ce5c2a5269e371c225917255fd720e177b84c99 + languageName: node + linkType: hard + +"typescript@npm:~4.9.4": + version: 4.9.4 + resolution: "typescript@npm:4.9.4" + bin: + tsc: bin/tsc + tsserver: bin/tsserver + checksum: e782fb9e0031cb258a80000f6c13530288c6d63f1177ed43f770533fdc15740d271554cdae86701c1dd2c83b082cea808b07e97fd68b38a172a83dbf9e0d0ef9 + languageName: node + linkType: hard + +"typescript@patch:typescript@npm%3A~4.9.4#~builtin": + version: 4.9.4 + resolution: "typescript@patch:typescript@npm%3A4.9.4#~builtin::version=4.9.4&hash=23ec76" + bin: + tsc: bin/tsc + tsserver: bin/tsserver + checksum: 3e2ab0772908676d9b9cb83398c70003a3b08e1c6b3b122409df9f4b520f2fdaefa20c3d7d57dce283fed760ac94b3ce94d4a7fa875127b67852904425a1f0dc + languageName: node + linkType: hard + +"typestyle@npm:^2.0.4": + version: 2.4.0 + resolution: "typestyle@npm:2.4.0" + dependencies: + csstype: 3.0.10 + free-style: 3.1.0 + checksum: 8b4f02c24f67b594f98507b15a753dabd4db5eb0af007e1d310527c64030e11e9464b25b5a6bc65fb5eec9a4459a8336050121ecc29063ac87b8b47a6d698893 + languageName: node + linkType: hard + +"uglify-js@npm:^3.1.4": + version: 3.4.10 + resolution: "uglify-js@npm:3.4.10" + dependencies: + commander: ~2.19.0 + source-map: ~0.6.1 + bin: + uglifyjs: bin/uglifyjs + checksum: dfc61c85b0660216432e021aac6a5f3ea0331720003d4d929b95f297daceb73bc9615875ca150516b49bc57ab60d3cf32415fc006cccf20f275c806f6686da0d + languageName: node + linkType: hard + +"unbox-primitive@npm:^1.0.2": + version: 1.0.2 + resolution: "unbox-primitive@npm:1.0.2" + dependencies: + call-bind: ^1.0.2 + has-bigints: ^1.0.2 + has-symbols: ^1.0.3 + which-boxed-primitive: ^1.0.2 + checksum: b7a1cf5862b5e4b5deb091672ffa579aa274f648410009c81cca63fed3b62b610c4f3b773f912ce545bb4e31edc3138975b5bc777fc6e4817dca51affb6380e9 + languageName: node + linkType: hard + +"unherit@npm:^1.0.4": + version: 1.1.3 + resolution: "unherit@npm:1.1.3" + dependencies: + inherits: ^2.0.0 + xtend: ^4.0.0 + checksum: fd7922f84fc0bfb7c4df6d1f5a50b5b94a0218e3cda98a54dbbd209226ddd4072d742d3df44d0e295ab08d5ccfd304a1e193dfe31a86d2a91b7cb9fdac093194 + languageName: node + linkType: hard + +"unicode-canonical-property-names-ecmascript@npm:^2.0.0": + version: 2.0.0 + resolution: "unicode-canonical-property-names-ecmascript@npm:2.0.0" + checksum: 39be078afd014c14dcd957a7a46a60061bc37c4508ba146517f85f60361acf4c7539552645ece25de840e17e293baa5556268d091ca6762747fdd0c705001a45 + languageName: node + linkType: hard + +"unicode-match-property-ecmascript@npm:^2.0.0": + version: 2.0.0 + resolution: "unicode-match-property-ecmascript@npm:2.0.0" + dependencies: + unicode-canonical-property-names-ecmascript: ^2.0.0 + unicode-property-aliases-ecmascript: ^2.0.0 + checksum: 1f34a7434a23df4885b5890ac36c5b2161a809887000be560f56ad4b11126d433c0c1c39baf1016bdabed4ec54829a6190ee37aa24919aa116dc1a5a8a62965a + languageName: node + linkType: hard + +"unicode-match-property-value-ecmascript@npm:^2.1.0": + version: 2.1.0 + resolution: "unicode-match-property-value-ecmascript@npm:2.1.0" + checksum: 8d6f5f586b9ce1ed0e84a37df6b42fdba1317a05b5df0c249962bd5da89528771e2d149837cad11aa26bcb84c35355cb9f58a10c3d41fa3b899181ece6c85220 + languageName: node + linkType: hard + +"unicode-property-aliases-ecmascript@npm:^2.0.0": + version: 2.0.0 + resolution: "unicode-property-aliases-ecmascript@npm:2.0.0" + checksum: dda4d39128cbbede2ac60fbb85493d979ec65913b8a486bf7cb7a375a2346fa48cbf9dc6f1ae23376e7e8e684c2b411434891e151e865a661b40a85407db51d0 + languageName: node + linkType: hard + +"unified-language-server@npm:^0.3.0": + version: 0.3.0 + resolution: "unified-language-server@npm:0.3.0" + dependencies: + dictionary-en-gb: ^2.0.0 + parse-latin: ^4.1.1 + remark-parse: ^6.0.3 + remark-preset-lint-markdown-style-guide: ^2.1.2 + remark-retext: ^3.1.2 + retext: ^6.0.1 + retext-english: ^3.0.2 + retext-spell: ^2.4.0 + unified: ^7.1.0 + vscode-languageserver: ^5.2.1 + bin: + unified-language-server: ./src/server.js + checksum: cecebd06b9663d43db5df8d0641858e8ffd348dbe63459fc589e84e0bfea478905897882bccd0c28fa0838c72d19df4ddf7e7bd505887a8b0b7205f12707e85b + languageName: node + linkType: hard + +"unified-lint-rule@npm:^1.0.0": + version: 1.0.6 + resolution: "unified-lint-rule@npm:1.0.6" + dependencies: + wrapped: ^1.0.1 + checksum: fb3fa8a08bab260e8200a40de48180d422cc7beb118cd74352490a6e8e42346ffbaed47e43593df4b5519eead0f67d71d1e4031b1b100a9aaf5f42d7b6135d54 + languageName: node + linkType: hard + +"unified-message-control@npm:^1.0.0": + version: 1.0.4 + resolution: "unified-message-control@npm:1.0.4" + dependencies: + trim: 0.0.1 + unist-util-visit: ^1.0.0 + vfile-location: ^2.0.0 + checksum: edfdc66b9380bbe84b5769adad5a7425ec735ab9ce2c0038ae6ebfc12d12c5a6b7be8642d2ddb41514ec42d977794bfe97613ec7d62213307c6cdcc2fa4e9cc7 + languageName: node + linkType: hard + +"unified@npm:^7.0.0, unified@npm:^7.1.0": + version: 7.1.0 + resolution: "unified@npm:7.1.0" + dependencies: + "@types/unist": ^2.0.0 + "@types/vfile": ^3.0.0 + bail: ^1.0.0 + extend: ^3.0.0 + is-plain-obj: ^1.1.0 + trough: ^1.0.0 + vfile: ^3.0.0 + x-is-string: ^0.1.0 + checksum: cbe9ed45340b9db206af45b966fff01bf89df0d2805852a90943e14aba0cfce9116091514b95ef5e9fbeadbc13a3798638e1a2b7087eb534304bc7de3e8353da + languageName: node + linkType: hard + +"unique-filename@npm:^1.1.1": + version: 1.1.1 + resolution: "unique-filename@npm:1.1.1" + dependencies: + unique-slug: ^2.0.0 + checksum: cf4998c9228cc7647ba7814e255dec51be43673903897b1786eff2ac2d670f54d4d733357eb08dea969aa5e6875d0e1bd391d668fbdb5a179744e7c7551a6f80 + languageName: node + linkType: hard + +"unique-filename@npm:^2.0.0": + version: 2.0.1 + resolution: "unique-filename@npm:2.0.1" + dependencies: + unique-slug: ^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" + dependencies: + unique-slug: ^4.0.0 + checksum: 8e2f59b356cb2e54aab14ff98a51ac6c45781d15ceaab6d4f1c2228b780193dc70fae4463ce9e1df4479cb9d3304d7c2043a3fb905bdeca71cc7e8ce27e063df + languageName: node + linkType: hard + +"unique-slug@npm:^2.0.0": + version: 2.0.2 + resolution: "unique-slug@npm:2.0.2" + dependencies: + imurmurhash: ^0.1.4 + checksum: 5b6876a645da08d505dedb970d1571f6cebdf87044cb6b740c8dbb24f0d6e1dc8bdbf46825fd09f994d7cf50760e6f6e063cfa197d51c5902c00a861702eb75a + languageName: node + linkType: hard + +"unique-slug@npm:^3.0.0": + version: 3.0.0 + resolution: "unique-slug@npm:3.0.0" + dependencies: + imurmurhash: ^0.1.4 + checksum: 49f8d915ba7f0101801b922062ee46b7953256c93ceca74303bd8e6413ae10aa7e8216556b54dc5382895e8221d04f1efaf75f945c2e4a515b4139f77aa6640c + languageName: node + linkType: hard + +"unique-slug@npm:^4.0.0": + version: 4.0.0 + resolution: "unique-slug@npm:4.0.0" + dependencies: + imurmurhash: ^0.1.4 + checksum: 0884b58365af59f89739e6f71e3feacb5b1b41f2df2d842d0757933620e6de08eff347d27e9d499b43c40476cbaf7988638d3acb2ffbcb9d35fd035591adfd15 + languageName: node + linkType: hard + +"unique-string@npm:^2.0.0": + version: 2.0.0 + resolution: "unique-string@npm:2.0.0" + dependencies: + crypto-random-string: ^2.0.0 + checksum: ef68f639136bcfe040cf7e3cd7a8dff076a665288122855148a6f7134092e6ed33bf83a7f3a9185e46c98dddc445a0da6ac25612afa1a7c38b8b654d6c02498e + languageName: node + linkType: hard + +"unist-util-generated@npm:^1.1.0": + version: 1.1.6 + resolution: "unist-util-generated@npm:1.1.6" + checksum: 86239ff88a08800d52198f2f0e15911f05bab2dad17cef95550f7c2728f15ebb0344694fcc3101d05762d88adaf86cb85aa7a3300fedabd0b6d7d00b41cdcb7f + languageName: node + linkType: hard + +"unist-util-is@npm:^3.0.0": + version: 3.0.0 + resolution: "unist-util-is@npm:3.0.0" + checksum: d24a5dd80c670f763b2ae608651cf062317456aa81be51f66f45cbd7d440a2ab18356e4f48aeac6b5e3d391c69d3c3452ade5fe5aa9574bec4a2de0b10122ed5 + languageName: node + linkType: hard + +"unist-util-modify-children@npm:^2.0.0": + version: 2.0.0 + resolution: "unist-util-modify-children@npm:2.0.0" + dependencies: + array-iterate: ^1.0.0 + checksum: 7c8e11c320e2c8f8e0f7ab32a0d5a88317a8ed40c30ef0dca1038252eae9ca31db7e24f3c77799ae086bf1f73ee8cc34056e12334b05da304287e3a5b8700034 + languageName: node + linkType: hard + +"unist-util-position@npm:^3.0.0": + version: 3.1.0 + resolution: "unist-util-position@npm:3.1.0" + checksum: 10b3952e32a1ffabbecad41c3946237f7059f5bb6436796da05531a285f50b97e4f37cfc2f7164676d041063f40fe1ad92fbb8ca38d3ae8747328ebe738d738f + languageName: node + linkType: hard + +"unist-util-remove-position@npm:^1.0.0": + version: 1.1.4 + resolution: "unist-util-remove-position@npm:1.1.4" + dependencies: + unist-util-visit: ^1.1.0 + checksum: 74be7078d135601e9d295f392ef2768efc2c0bdb8720480c36fa608df6290cb85d324e82d4bdfc2f38303c466ffbba4f0fa4f9acb25fff45d23926259bdafcf6 + languageName: node + linkType: hard + +"unist-util-stringify-position@npm:^1.0.0, unist-util-stringify-position@npm:^1.1.1": + version: 1.1.2 + resolution: "unist-util-stringify-position@npm:1.1.2" + checksum: a8742a66cd0c1f5905b7d14345ef9bf2abf74acd68d419dbbfb284e6005629288dbbbc2a78df190c3939d6fb1031b0bb8f94025689c44209d48a1f2ff2ff54a0 + languageName: node + linkType: hard + +"unist-util-stringify-position@npm:^2.0.0": + version: 2.0.3 + resolution: "unist-util-stringify-position@npm:2.0.3" + dependencies: + "@types/unist": ^2.0.2 + checksum: f755cadc959f9074fe999578a1a242761296705a7fe87f333a37c00044de74ab4b184b3812989a57d4cd12211f0b14ad397b327c3a594c7af84361b1c25a7f09 + languageName: node + linkType: hard + +"unist-util-visit-children@npm:^1.0.0": + version: 1.1.4 + resolution: "unist-util-visit-children@npm:1.1.4" + checksum: df41bf79851781ea1b19de854e2cfc78c9a63098f0387b32eb74b7860eb1f59bb7d12cce7ef53536baf14eea055d201e8b8268176b849a681c5a678b4d2de293 + languageName: node + linkType: hard + +"unist-util-visit-parents@npm:^2.0.0": + version: 2.1.2 + resolution: "unist-util-visit-parents@npm:2.1.2" + dependencies: + unist-util-is: ^3.0.0 + checksum: 048edbb590a8c4bc0043eec9f50d3fe76faa58f1ac663a7e6dee5e895ddd0ce8bc52f2cfe2e633849fa93671e8de021070667acb1518e3d40220768c7f70a3d3 + languageName: node + linkType: hard + +"unist-util-visit@npm:^1.0.0, unist-util-visit@npm:^1.1.0, unist-util-visit@npm:^1.1.1, unist-util-visit@npm:^1.4.0": + version: 1.4.1 + resolution: "unist-util-visit@npm:1.4.1" + dependencies: + unist-util-visit-parents: ^2.0.0 + checksum: e9395205b6908c8d0fe71bc44e65d89d4781d1bb2d453a33cb67ed4124bad0b89d6b1d526ebaecb82a7c48e211bdf6f24351449b8cc115327b345f4617c18728 + languageName: node + linkType: hard + +"universal-user-agent@npm:^6.0.0": + version: 6.0.0 + resolution: "universal-user-agent@npm:6.0.0" + checksum: 5092bbc80dd0d583cef0b62c17df0043193b74f425112ea6c1f69bc5eda21eeec7a08d8c4f793a277eb2202ffe9b44bec852fa3faff971234cd209874d1b79ef + languageName: node + linkType: hard + +"universalify@npm:^0.2.0": + version: 0.2.0 + resolution: "universalify@npm:0.2.0" + checksum: e86134cb12919d177c2353196a4cc09981524ee87abf621f7bc8d249dbbbebaec5e7d1314b96061497981350df786e4c5128dbf442eba104d6e765bc260678b5 + languageName: node + linkType: hard + +"universalify@npm:^2.0.0": + version: 2.0.0 + resolution: "universalify@npm:2.0.0" + checksum: 2406a4edf4a8830aa6813278bab1f953a8e40f2f63a37873ffa9a3bc8f9745d06cc8e88f3572cb899b7e509013f7f6fcc3e37e8a6d914167a5381d8440518c44 + languageName: node + linkType: hard + +"upath@npm:^2.0.1": + version: 2.0.1 + resolution: "upath@npm:2.0.1" + checksum: 2db04f24a03ef72204c7b969d6991abec9e2cb06fb4c13a1fd1c59bc33b46526b16c3325e55930a11ff86a77a8cbbcda8f6399bf914087028c5beae21ecdb33c + languageName: node + linkType: hard + +"update-browserslist-db@npm:^1.0.11": + version: 1.0.11 + resolution: "update-browserslist-db@npm:1.0.11" + dependencies: + escalade: ^3.1.1 + picocolors: ^1.0.0 + peerDependencies: + browserslist: ">= 4.21.0" + bin: + update-browserslist-db: cli.js + checksum: b98327518f9a345c7cad5437afae4d2ae7d865f9779554baf2a200fdf4bac4969076b679b1115434bd6557376bdd37ca7583d0f9b8f8e302d7d4cc1e91b5f231 + languageName: node + linkType: hard + +"uri-js@npm:^4.2.2": + version: 4.4.1 + resolution: "uri-js@npm:4.4.1" + dependencies: + punycode: ^2.1.0 + checksum: 7167432de6817fe8e9e0c9684f1d2de2bb688c94388f7569f7dbdb1587c9f4ca2a77962f134ec90be0cc4d004c939ff0d05acc9f34a0db39a3c797dada262633 + languageName: node + linkType: hard + +"url-parse@npm:^1.5.3, url-parse@npm:~1.5.4": + version: 1.5.10 + resolution: "url-parse@npm:1.5.10" + dependencies: + querystringify: ^2.1.1 + requires-port: ^1.0.0 + checksum: fbdba6b1d83336aca2216bbdc38ba658d9cfb8fc7f665eb8b17852de638ff7d1a162c198a8e4ed66001ddbf6c9888d41e4798912c62b4fd777a31657989f7bdf + languageName: node + linkType: hard + +"util-deprecate@npm:^1.0.1, util-deprecate@npm:^1.0.2, util-deprecate@npm:~1.0.1": + version: 1.0.2 + resolution: "util-deprecate@npm:1.0.2" + checksum: 474acf1146cb2701fe3b074892217553dfcf9a031280919ba1b8d651a068c9b15d863b7303cb15bd00a862b498e6cf4ad7b4a08fb134edd5a6f7641681cb54a2 + languageName: node + linkType: hard + +"uuid@npm:8.3.2, uuid@npm:^8.0.0, uuid@npm:^8.3.2": + version: 8.3.2 + resolution: "uuid@npm:8.3.2" + bin: + uuid: dist/bin/uuid + checksum: 5575a8a75c13120e2f10e6ddc801b2c7ed7d8f3c8ac22c7ed0c7b2ba6383ec0abda88c905085d630e251719e0777045ae3236f04c812184b7c765f63a70e58df + languageName: node + linkType: hard + +"v8-compile-cache@npm:2.3.0": + version: 2.3.0 + resolution: "v8-compile-cache@npm:2.3.0" + checksum: adb0a271eaa2297f2f4c536acbfee872d0dd26ec2d76f66921aa7fc437319132773483344207bdbeee169225f4739016d8d2dbf0553913a52bb34da6d0334f8e + languageName: node + linkType: hard + +"v8-to-istanbul@npm:^9.0.1": + version: 9.1.0 + resolution: "v8-to-istanbul@npm:9.1.0" + dependencies: + "@jridgewell/trace-mapping": ^0.3.12 + "@types/istanbul-lib-coverage": ^2.0.1 + convert-source-map: ^1.6.0 + checksum: 2069d59ee46cf8d83b4adfd8a5c1a90834caffa9f675e4360f1157ffc8578ef0f763c8f32d128334424159bb6b01f3876acd39cd13297b2769405a9da241f8d1 + languageName: node + linkType: hard + +"validate-npm-package-license@npm:3.0.4, validate-npm-package-license@npm:^3.0.1, validate-npm-package-license@npm:^3.0.4": + version: 3.0.4 + resolution: "validate-npm-package-license@npm:3.0.4" + dependencies: + spdx-correct: ^3.0.0 + spdx-expression-parse: ^3.0.0 + checksum: 35703ac889d419cf2aceef63daeadbe4e77227c39ab6287eeb6c1b36a746b364f50ba22e88591f5d017bc54685d8137bc2d328d0a896e4d3fd22093c0f32a9ad + languageName: node + linkType: hard + +"validate-npm-package-name@npm:4.0.0, validate-npm-package-name@npm:^4.0.0": + version: 4.0.0 + resolution: "validate-npm-package-name@npm:4.0.0" + dependencies: + builtins: ^5.0.0 + checksum: a32fd537bad17fcb59cfd58ae95a414d443866020d448ec3b22e8d40550cb585026582a57efbe1f132b882eea4da8ac38ee35f7be0dd72988a3cb55d305a20c1 + languageName: node + linkType: hard + +"validate-npm-package-name@npm:^3.0.0": + version: 3.0.0 + resolution: "validate-npm-package-name@npm:3.0.0" + dependencies: + builtins: ^1.0.3 + checksum: ce4c68207abfb22c05eedb09ff97adbcedc80304a235a0844f5344f1fd5086aa80e4dbec5684d6094e26e35065277b765c1caef68bcea66b9056761eddb22967 + languageName: node + linkType: hard + +"validate.io-array@npm:^1.0.3": + version: 1.0.6 + resolution: "validate.io-array@npm:1.0.6" + checksum: 54eca83ebc702e3e46499f9d9e77287a95ae25c4e727cd2fafee29c7333b3a36cca0c5d8f090b9406262786de80750fba85e7e7ef41e20bf8cc67d5570de449b + languageName: node + linkType: hard + +"validate.io-function@npm:^1.0.2": + version: 1.0.2 + resolution: "validate.io-function@npm:1.0.2" + checksum: e4cce2479a20cb7c42e8630c777fb107059c27bc32925f769e3a73ca5fd62b4892d897b3c80227e14d5fcd1c5b7d05544e0579d63e59f14034c0052cda7f7c44 + languageName: node + linkType: hard + +"validate.io-integer-array@npm:^1.0.0": + version: 1.0.0 + resolution: "validate.io-integer-array@npm:1.0.0" + dependencies: + validate.io-array: ^1.0.3 + validate.io-integer: ^1.0.4 + checksum: 5f6d7fab8df7d2bf546a05e830201768464605539c75a2c2417b632b4411a00df84b462f81eac75e1be95303e7e0ac92f244c137424739f4e15cd21c2eb52c7f + languageName: node + linkType: hard + +"validate.io-integer@npm:^1.0.4": + version: 1.0.5 + resolution: "validate.io-integer@npm:1.0.5" + dependencies: + validate.io-number: ^1.0.3 + checksum: 88b3f8bb5a5277a95305d64abbfc437079220ce4f57a148cc6113e7ccec03dd86b10a69d413982602aa90a62b8d516148a78716f550dcd3aff863ac1c2a7a5e6 + languageName: node + linkType: hard + +"validate.io-number@npm:^1.0.3": + version: 1.0.3 + resolution: "validate.io-number@npm:1.0.3" + checksum: 42418aeb6c969efa745475154fe576809b02eccd0961aad0421b090d6e7a12d23a3e28b0d5dddd2c6347c1a6bdccb82bba5048c716131cd20207244d50e07282 + languageName: node + linkType: hard + +"vfile-location@npm:^2.0.0, vfile-location@npm:^2.0.1": + version: 2.0.6 + resolution: "vfile-location@npm:2.0.6" + checksum: ca0da908fdcd86f3df749a328ff777cf8994240eb333da7e6ee270b4fec09058d7b64f174ce9e31a9c591bb9ed01b45c223186a31036860d9f463eca059c058e + languageName: node + linkType: hard + +"vfile-message@npm:*, vfile-message@npm:^1.0.0": + version: 1.1.1 + resolution: "vfile-message@npm:1.1.1" + dependencies: + unist-util-stringify-position: ^1.1.1 + checksum: 0be85d2c9bf00aa3e065cd284a705c4143fe65004d2927d20e3f06aa7ff77038008a38704c6f60519362e3a413c9fe86e4c770e3ecf3bff6b7d604ade9ecf4ff + languageName: node + linkType: hard + +"vfile@npm:^3.0.0": + version: 3.0.1 + resolution: "vfile@npm:3.0.1" + dependencies: + is-buffer: ^2.0.0 + replace-ext: 1.0.0 + unist-util-stringify-position: ^1.0.0 + vfile-message: ^1.0.0 + checksum: d0a0caf7eca8478b2caa93e72bc3b37a2bf77916a195d8937b173d7fe0ded9a0146503de269afabf2a0465fa6b4c009d1486a4e5dd070f6d5fd225eb4ed25343 + languageName: node + linkType: hard + +"vscode-css-languageserver-bin@npm:^1.4.0": + version: 1.4.0 + resolution: "vscode-css-languageserver-bin@npm:1.4.0" + dependencies: + vscode-css-languageservice: ^3.0.9-next.18 + vscode-languageserver: ^4.1.3 + vscode-languageserver-protocol-foldingprovider: ^2.0.1 + bin: + css-languageserver: cssServerMain.js + checksum: d9b1591c5130df0ad52804170db78245348ec04da362e8512b43a568e4e3cf6f7bc05553c30c3b9430830aa4d7d19372d3614d808d91658355f9927670d74c33 + languageName: node + linkType: hard + +"vscode-css-languageservice@npm:^3.0.9-next.18": + version: 3.0.13 + resolution: "vscode-css-languageservice@npm:3.0.13" + dependencies: + vscode-languageserver-types: ^3.13.0 + vscode-nls: ^4.0.0 + checksum: 246c6774721163f70575c8c858756d70d85901228a7fdd0cbe4c88de3914bc41f2ff3b0a7a39580c7db28d6b58dd123be4cb0996c0d52280df644c3b6639522a + languageName: node + linkType: hard + +"vscode-html-languageserver-bin@npm:^1.4.0": + version: 1.4.0 + resolution: "vscode-html-languageserver-bin@npm:1.4.0" + dependencies: + typescript: ^2.9.1 + vscode-css-languageservice: ^3.0.9-next.18 + vscode-html-languageservice: ^2.1.3-next.5 + vscode-languageserver: ^4.1.3 + vscode-languageserver-protocol-foldingprovider: ^2.0.1 + vscode-languageserver-types: ^3.7.2 + vscode-nls: ^3.2.2 + vscode-uri: ^1.0.3 + bin: + html-languageserver: htmlServerMain.js + checksum: 58505ba72cce225ea0f7f8cf5171f291098450e04e9ca64d2a213cef87d3669892100e0cebc0d03e95f94e203f5795d2cd1a509625c6919ab2eb783b0e022b4d + languageName: node + linkType: hard + +"vscode-html-languageservice@npm:^2.1.3-next.5": + version: 2.1.12 + resolution: "vscode-html-languageservice@npm:2.1.12" + dependencies: + vscode-languageserver-types: ^3.13.0 + vscode-nls: ^4.0.0 + vscode-uri: ^1.0.6 + checksum: 1c61d3ec897d3698b9818f14c4db027b4b3637e15bee36c47698a986d8ff26fa6177c66f6dabf6e56edf69b90b68061bc8c1097bb84644960e6a45501c654272 + languageName: node + linkType: hard + +"vscode-json-languageserver-bin@npm:^1.0.1": + version: 1.0.1 + resolution: "vscode-json-languageserver-bin@npm:1.0.1" + dependencies: + jsonc-parser: ^1.0.0 + request-light: ^0.2.1 + vscode-json-languageservice: ^3.0.1 + vscode-languageserver: ^3.5.0 + vscode-nls: ^2.0.2 + vscode-uri: ^1.0.1 + bin: + json-languageserver: jsonServerMain.js + checksum: 9755a8d4fb309c8620bb3345b4dbb3b6752ef4f26c63e98657f2f4b0b9a66bd302f404eae2fc883c4c150f24eb55b0b2b1acc9b3ef201ae40c8d8594e383943d + languageName: node + linkType: hard + +"vscode-json-languageservice@npm:4.1.8, vscode-json-languageservice@npm:^4.1.8": + version: 4.1.8 + resolution: "vscode-json-languageservice@npm:4.1.8" + dependencies: + jsonc-parser: ^3.0.0 + vscode-languageserver-textdocument: ^1.0.1 + vscode-languageserver-types: ^3.16.0 + vscode-nls: ^5.0.0 + vscode-uri: ^3.0.2 + checksum: bbf8eb7dbe70acbf2f056173c21b985e9005260abf3242e52274009f8b700ba11346e215136f37ae37d6b5552eafdd9dfadbaf3e43b23e17a3d4d9919e8ad5a2 + languageName: node + linkType: hard + +"vscode-json-languageservice@npm:^3.0.1": + version: 3.10.0 + resolution: "vscode-json-languageservice@npm:3.10.0" + dependencies: + jsonc-parser: ^2.3.1 + vscode-languageserver-textdocument: ^1.0.1 + vscode-languageserver-types: 3.16.0-next.2 + vscode-nls: ^5.0.0 + vscode-uri: ^2.1.2 + checksum: e2a762382cdf601bfb429f4b7aea7d1dd8c08537ef9d9b1807eabab42639138a3cbad82003f31013a3ad7030cd3a94b00c2e5dd3622ef742f13981837a8c3b46 + languageName: node + linkType: hard + +"vscode-jsonrpc@npm:3.5.0": + version: 3.5.0 + resolution: "vscode-jsonrpc@npm:3.5.0" + checksum: 6d85c26a9356ce3815e5de214f99949c4ace7fdfdce41b050d213bbd56465ad31eb30e6e69c7df936d5c941e1a3c3bb7f39cc47b447cebfbe47debe15e1c0fda + languageName: node + linkType: hard + +"vscode-jsonrpc@npm:6.0.0, vscode-jsonrpc@npm:^6.0.0": + version: 6.0.0 + resolution: "vscode-jsonrpc@npm:6.0.0" + checksum: 3a67a56f287e8c449f2d9752eedf91e704dc7b9a326f47fb56ac07667631deb45ca52192e9bccb2ab108764e48409d70fa64b930d46fc3822f75270b111c5f53 + languageName: node + linkType: hard + +"vscode-jsonrpc@npm:8.0.0-next.6": + version: 8.0.0-next.6 + resolution: "vscode-jsonrpc@npm:8.0.0-next.6" + checksum: 062311b547a525eab0f8158f147fbb86ca2edb6afcf94233845a2d9f96d28776b172882a3e21551b47b0804cdf636d954f83bab42bf59684e132de8f03752f98 + languageName: node + linkType: hard + +"vscode-jsonrpc@npm:8.0.2, vscode-jsonrpc@npm:^8.0.2": + version: 8.0.2 + resolution: "vscode-jsonrpc@npm:8.0.2" + checksum: 9d055fd4c87ef1093b0eecb5370bfaf3402179b6639149b6d0f7e0bde60cf580091c7e07b0caff868f10f90331b17e7383c087217c077fdd1b5ae7bc23b72f77 + languageName: node + linkType: hard + +"vscode-jsonrpc@npm:^4.0.0": + version: 4.0.0 + resolution: "vscode-jsonrpc@npm:4.0.0" + checksum: e68f8aa59b87aee9eaaf570bcfb8d743f51ef390c69c4651429020ba2ce769acf1cd69f93f2478928cb1365e7d2e12b3a1f4e37e99e32b0fdaca971d97b8ec44 + languageName: node + linkType: hard + +"vscode-jsonrpc@npm:^5.0.1": + version: 5.0.1 + resolution: "vscode-jsonrpc@npm:5.0.1" + checksum: a9188774d8d9ceb4e0d2215aa71bd85bb9f4e1129d5decfda74587e791c6a2b532b2e0026931b45c52087c328429be6510ef841e203293ede7ed4114bb596cd0 + languageName: node + linkType: hard + +"vscode-languageclient@npm:^6.1.3": + version: 6.1.4 + resolution: "vscode-languageclient@npm:6.1.4" + dependencies: + semver: ^6.3.0 + vscode-languageserver-protocol: 3.15.3 + checksum: 21460400755d2cf0e7ec2bfa143e0a8d56ca012b522ed9928579eeb3896e6653790ad7c47b44be14286cfae1bf5fbfb37855528241e67eab8145ff36de49fad3 + languageName: node + linkType: hard + +"vscode-languageserver-protocol-foldingprovider@npm:^2.0.1": + version: 2.0.1 + resolution: "vscode-languageserver-protocol-foldingprovider@npm:2.0.1" + dependencies: + vscode-languageserver-protocol: ^3.7.2 + vscode-languageserver-types: ^3.7.2 + checksum: 68159bbc748b8a6307563e30220be848a51df6059f350e479b714ec2b9d0c1705fbb27b0d58886ba091980a13c501cf35ec83e3c8745e85bcfd146be493eac7e + languageName: node + linkType: hard + +"vscode-languageserver-protocol@npm:3.14.1": + version: 3.14.1 + resolution: "vscode-languageserver-protocol@npm:3.14.1" + dependencies: + vscode-jsonrpc: ^4.0.0 + vscode-languageserver-types: 3.14.0 + checksum: 2f68c08efd6afe90bb4990ea83f06ede197aba317419b783d59884df75b764b858ac687adc7d997aa1b21d9437b72bbfa7c87314693efaeb3afa31ea7c02d0fb + languageName: node + linkType: hard + +"vscode-languageserver-protocol@npm:3.15.3": + version: 3.15.3 + resolution: "vscode-languageserver-protocol@npm:3.15.3" + dependencies: + vscode-jsonrpc: ^5.0.1 + vscode-languageserver-types: 3.15.1 + checksum: 9344f2d8b5855c4b09cbb59eef8366b750ec02212eb365af1772dd6dba970de0aac7b75332d90466bc29ce878b3f79a55a78b39cab6451ebf690f616918a9d3e + languageName: node + linkType: hard + +"vscode-languageserver-protocol@npm:3.16.0": + version: 3.16.0 + resolution: "vscode-languageserver-protocol@npm:3.16.0" + dependencies: + vscode-jsonrpc: 6.0.0 + vscode-languageserver-types: 3.16.0 + checksum: ac30cbe4b778344f7b93defbaa1332dcb5a5a3a0afda6b88618a9ed44093c1ae1d2f11548bdcff42a73bb46943df025d4fe721559144dd7bf25ae60663aabe06 + languageName: node + linkType: hard + +"vscode-languageserver-protocol@npm:3.17.0-next.14": + version: 3.17.0-next.14 + resolution: "vscode-languageserver-protocol@npm:3.17.0-next.14" + dependencies: + vscode-jsonrpc: 8.0.0-next.6 + vscode-languageserver-types: 3.17.0-next.7 + checksum: 4df56bd117fc6dfc79cdda5d261b98d152504e5a59874718ec81b59a4e5bb4781d4abf7b9dfa0940c2dcf7c3f117132d9792e1bc88eca1d547bea88465882c2f + languageName: node + linkType: hard + +"vscode-languageserver-protocol@npm:3.17.2, vscode-languageserver-protocol@npm:^3.10.3, vscode-languageserver-protocol@npm:^3.15.3, vscode-languageserver-protocol@npm:^3.16.0, vscode-languageserver-protocol@npm:^3.17.0, vscode-languageserver-protocol@npm:^3.7.2": + version: 3.17.2 + resolution: "vscode-languageserver-protocol@npm:3.17.2" + dependencies: + vscode-jsonrpc: 8.0.2 + vscode-languageserver-types: 3.17.2 + checksum: f4a05d3a631af315a32a3700953c2117fa4e5c44bc03764154c6605da9cbbcb50a1b01b46f11b2f6948916d01b4948bebf1a84c135fc73b27fa839c58d0847ab + languageName: node + linkType: hard + +"vscode-languageserver-protocol@npm:3.5.1": + version: 3.5.1 + resolution: "vscode-languageserver-protocol@npm:3.5.1" + dependencies: + vscode-jsonrpc: 3.5.0 + vscode-languageserver-types: 3.5.0 + checksum: b0659122b320de9d3d11ab09c5f381034b9775a56fb0e14cbfa0d7e3d44527454b1a101831505978a5a461c8c2f260f889e98574096538dc5a7ca0b0b8d529d1 + languageName: node + linkType: hard + +"vscode-languageserver-textdocument@npm:1.0.8, vscode-languageserver-textdocument@npm:^1.0.1": + version: 1.0.8 + resolution: "vscode-languageserver-textdocument@npm:1.0.8" + checksum: d6b685456ceca2736793d7fc1924d78a8483997c96c6ec4900d90e64115730da6c0c03e3fbc2c5d031a4592f2acd9cca2ca58a651b696c4f40b8690a48538c06 + languageName: node + linkType: hard + +"vscode-languageserver-types@npm:3.14.0": + version: 3.14.0 + resolution: "vscode-languageserver-types@npm:3.14.0" + checksum: 6e912505816883dcbc19caf96f5fdfbb53286bd2db51f541764bf16bca3d73284ec68279e1cdd6d880f15fc3d67a7e3905e3d3ace39022871e8d24199ec848cc + languageName: node + linkType: hard + +"vscode-languageserver-types@npm:3.15.1": + version: 3.15.1 + resolution: "vscode-languageserver-types@npm:3.15.1" + checksum: 28c1cb0d5b7ad7c719015a6eb5f774c000fe68c41bbd4a3fd0cbe6d862f27eec075d6bfb14c9d86c22d0e8711c2df8194295bf1e7d6ac0c359cab348c5e14887 + languageName: node + linkType: hard + +"vscode-languageserver-types@npm:3.16.0": + version: 3.16.0 + resolution: "vscode-languageserver-types@npm:3.16.0" + checksum: 7a44fb10b9fbeb9529f832337b7f0430fc6275d62945b86851d425a950e22da3917ef5f6c552688191769dd1eae047c6ee9ec3d9f2280498353007c2dfe0725c + languageName: node + linkType: hard + +"vscode-languageserver-types@npm:3.16.0-next.2": + version: 3.16.0-next.2 + resolution: "vscode-languageserver-types@npm:3.16.0-next.2" + checksum: e7c30204082cd41847b7487b61f3c7375a1ab824cd5c74dfd511a3d68171128c88074071c7cc439faa949352b4dd5524b82a824d49a6af02b4e5c127f60f9712 + languageName: node + linkType: hard + +"vscode-languageserver-types@npm:3.17.0-next.3": + version: 3.17.0-next.3 + resolution: "vscode-languageserver-types@npm:3.17.0-next.3" + checksum: 84c8e52a8e1583e92ab6414b505b5fe5e660d22deb06adbb094b06c5da1329fcbf84e54dd5283fc4bc4c92b50afc199850da1c7333bca5c4175111876844e7b2 + languageName: node + linkType: hard + +"vscode-languageserver-types@npm:3.17.0-next.7": + version: 3.17.0-next.7 + resolution: "vscode-languageserver-types@npm:3.17.0-next.7" + checksum: afbd467c726caf1770a74737408cada9752949cb6789742b048fcdab51eca33aee90b982d19b06bc11ff4fdc914678a27691b2969c619aa1c67fe76951f15fc7 + languageName: node + linkType: hard + +"vscode-languageserver-types@npm:3.17.2, vscode-languageserver-types@npm:^3.13.0, vscode-languageserver-types@npm:^3.16.0, vscode-languageserver-types@npm:^3.17.0-next.3, vscode-languageserver-types@npm:^3.7.2": + version: 3.17.2 + resolution: "vscode-languageserver-types@npm:3.17.2" + checksum: ef2d862d22f622b64de0f428773d50a5928ec6cdd485960a7564ebe4fd4a3c8bcd956f29eb15bc45a0f353846e62f39f6c764d2ab85ce774b8724411ba84342f + languageName: node + linkType: hard + +"vscode-languageserver-types@npm:3.5.0": + version: 3.5.0 + resolution: "vscode-languageserver-types@npm:3.5.0" + checksum: 44c859700cfda71b5d3ff1224b5a1df093b39ec6755c8beb12fc76d1fbdb1a4948f55c3a97768356a1cbfb4e3ce66c5e4380e25f66bafcbd2db50277f68ee989 + languageName: node + linkType: hard + +"vscode-languageserver@npm:8.0.0-next.8": + version: 8.0.0-next.8 + resolution: "vscode-languageserver@npm:8.0.0-next.8" + dependencies: + vscode-languageserver-protocol: 3.17.0-next.14 + bin: + installServerIntoExtension: bin/installServerIntoExtension + checksum: 5c00715f556e37a0957cf3d504b3dfa62c57dee7a39f0c8fb348923213fa654fde86267a098f5ce8c67f0435f0bfeb3ae198d813a42bf38650aefb0d7bd9ac2e + languageName: node + linkType: hard + +"vscode-languageserver@npm:8.0.2, vscode-languageserver@npm:^8.0.0-next.2": + version: 8.0.2 + resolution: "vscode-languageserver@npm:8.0.2" + dependencies: + vscode-languageserver-protocol: 3.17.2 + bin: + installServerIntoExtension: bin/installServerIntoExtension + checksum: f564417bf08f5400e8381b6d0defb4e7242a04525696b1728b05524b89932047af625fac07715b4d36307e1de599cbef54d240c15101fe831aaface431f21e1b + languageName: node + linkType: hard + +"vscode-languageserver@npm:^3.5.0": + version: 3.5.1 + resolution: "vscode-languageserver@npm:3.5.1" + dependencies: + vscode-languageserver-protocol: 3.5.1 + vscode-uri: ^1.0.1 + bin: + installServerIntoExtension: ./bin/installServerIntoExtension + checksum: ab25f9595325eded0f980a1c12b945a51d751b8dab562384a8f1c51a7d22242ee26e949c16b31e18cc6ddd0b156f6d8d63ab7eacbaaa27f72de4bc6685c20bdb + languageName: node + linkType: hard + +"vscode-languageserver@npm:^4.1.3": + version: 4.4.2 + resolution: "vscode-languageserver@npm:4.4.2" + dependencies: + vscode-languageserver-protocol: ^3.10.3 + vscode-uri: ^1.0.5 + bin: + installServerIntoExtension: ./bin/installServerIntoExtension + checksum: 4be157ce30d19b9bbc1e1339d1649d293f967f393337ad0f38b42eed9e06fe909ab490e94507c7491afebf0ac4b51e223a6b36713018e560243fa95f1092f2d1 + languageName: node + linkType: hard + +"vscode-languageserver@npm:^5.2.1": + version: 5.2.1 + resolution: "vscode-languageserver@npm:5.2.1" + dependencies: + vscode-languageserver-protocol: 3.14.1 + vscode-uri: ^1.0.6 + bin: + installServerIntoExtension: ./bin/installServerIntoExtension + checksum: 0317b941affecaa06382da0cd503b5be1463b76a3c9f5b256bc7006eaad556e2d1b4b6264c22295e991bd8ec775fb39c81d2b73314a51020d8e4feaed3a32761 + languageName: node + linkType: hard + +"vscode-languageserver@npm:^7.0.0": + version: 7.0.0 + resolution: "vscode-languageserver@npm:7.0.0" + dependencies: + vscode-languageserver-protocol: 3.16.0 + bin: + installServerIntoExtension: bin/installServerIntoExtension + checksum: 80cfbd5f8f0869c5369d1a61fe86b3210ee941cb646eb31b672045670ef3ce213dc1fd3bcd4cef6ef8bc7c5025f98e4a70dad645d97a0bd4708962bbd921683a + languageName: node + linkType: hard + +"vscode-nls@npm:^2.0.2": + version: 2.0.2 + resolution: "vscode-nls@npm:2.0.2" + checksum: cb740c60b5e3990ce6e9fc42aa3b26b4a994aeca817e88c4cade86a707ced45a9c979eb05e7399bb07cb63760aa961d8c217f02da874975e53c60c97971df9ae + languageName: node + linkType: hard + +"vscode-nls@npm:^3.2.2": + version: 3.2.5 + resolution: "vscode-nls@npm:3.2.5" + checksum: 1d0cdbe526a7437b065f0191008cb6947284e8467b5ed73b6a2808935bc1d44635f113faf21fd55c8bc7f9a21a37b7ce7c39ebba4337c7d2d295ecb2d84225e1 + languageName: node + linkType: hard + +"vscode-nls@npm:^4.0.0, vscode-nls@npm:^4.1.1": + version: 4.1.2 + resolution: "vscode-nls@npm:4.1.2" + checksum: ad2059d732bd8964210a205158614986d278ecd86c44f610d0f962471961db43b9f5dd1f0962d28ac9f8347f679f3d0a5d6d8ea4e90a7fccf45bfbf9ccc4ab3c + languageName: node + linkType: hard + +"vscode-nls@npm:^5.0.0": + version: 5.1.0 + resolution: "vscode-nls@npm:5.1.0" + checksum: ec9d80b329824a7f73583fc265335b2fab5ee336d75bc835fd2bf804bd7759b60bbcfa7881289e1f915d9833ac94425c37a33b8e2445b26a5b63a031e8440fd9 + languageName: node + linkType: hard + +"vscode-uri@npm:^1.0.1, vscode-uri@npm:^1.0.3, vscode-uri@npm:^1.0.5, vscode-uri@npm:^1.0.6": + version: 1.0.8 + resolution: "vscode-uri@npm:1.0.8" + checksum: 3246d9375e27ca0324d4c685b1a6ad8c14e0afc01b5a556534afb8711b49bb289e8d81ca73fc163fe239e2b07c9b311b29497d86fdac531230cf0535fcdf4798 + languageName: node + linkType: hard + +"vscode-uri@npm:^2.1.2": + version: 2.1.2 + resolution: "vscode-uri@npm:2.1.2" + checksum: 58c2d21018b86825b5a7f65f8879f837828a367bbf31d07ed59268fb2b56c9621a6996547d5e8f966d6ac05f0f921a7005f4541927007f788c2e4c6e5d6735e0 + languageName: node + linkType: hard + +"vscode-uri@npm:^3.0.2": + version: 3.0.3 + resolution: "vscode-uri@npm:3.0.3" + checksum: 683bf9de835c3cef0b51c104a4949bf746148ded7c2287ebafcc506d20aa0e90b99385a972dba8132903420dba67fc33a5e146e30212c4a6b3ca5d74d1f95702 + languageName: node + linkType: hard + +"vscode-ws-jsonrpc@npm:~1.0.2": + version: 1.0.2 + resolution: "vscode-ws-jsonrpc@npm:1.0.2" + dependencies: + vscode-jsonrpc: ^8.0.2 + checksum: eb2fdb5c96f124326505f06564dfc6584318b748fd6e39b4c0ba16a0d383d13ba0e9433596abdb841428dfc2a5501994c3206723d1cb38c6af5fcac1faf4be26 + languageName: node + linkType: hard + +"w3c-keyname@npm:^2.2.4": + version: 2.2.8 + resolution: "w3c-keyname@npm:2.2.8" + checksum: 95bafa4c04fa2f685a86ca1000069c1ec43ace1f8776c10f226a73296caeddd83f893db885c2c220ebeb6c52d424e3b54d7c0c1e963bbf204038ff1a944fbb07 + languageName: node + linkType: hard + +"w3c-xmlserializer@npm:^4.0.0": + version: 4.0.0 + resolution: "w3c-xmlserializer@npm:4.0.0" + dependencies: + xml-name-validator: ^4.0.0 + checksum: eba070e78deb408ae8defa4d36b429f084b2b47a4741c4a9be3f27a0a3d1845e277e3072b04391a138f7e43776842627d1334e448ff13ff90ad9fb1214ee7091 + languageName: node + linkType: hard + +"walk-up-path@npm:^1.0.0": + version: 1.0.0 + resolution: "walk-up-path@npm:1.0.0" + checksum: b8019ac4fb9ba1576839ec66d2217f62ab773c1cc4c704bfd1c79b1359fef5366f1382d3ab230a66a14c3adb1bf0fe102d1fdaa3437881e69154dfd1432abd32 + languageName: node + linkType: hard + +"walker@npm:^1.0.8": + version: 1.0.8 + resolution: "walker@npm:1.0.8" + dependencies: + makeerror: 1.0.12 + checksum: ad7a257ea1e662e57ef2e018f97b3c02a7240ad5093c392186ce0bcf1f1a60bbadd520d073b9beb921ed99f64f065efb63dfc8eec689a80e569f93c1c5d5e16c + languageName: node + linkType: hard + +"watchpack@npm:^2.4.0": + version: 2.4.0 + resolution: "watchpack@npm:2.4.0" + dependencies: + glob-to-regexp: ^0.4.1 + graceful-fs: ^4.1.2 + checksum: 23d4bc58634dbe13b86093e01c6a68d8096028b664ab7139d58f0c37d962d549a940e98f2f201cecdabd6f9c340338dc73ef8bf094a2249ef582f35183d1a131 + languageName: node + linkType: hard + +"wcwidth@npm:^1.0.0, wcwidth@npm:^1.0.1": + version: 1.0.1 + resolution: "wcwidth@npm:1.0.1" + dependencies: + defaults: ^1.0.3 + checksum: 814e9d1ddcc9798f7377ffa448a5a3892232b9275ebb30a41b529607691c0491de47cba426e917a4d08ded3ee7e9ba2f3fe32e62ee3cd9c7d3bafb7754bd553c + languageName: node + linkType: hard + +"web-tree-sitter@npm:0.20.8": + version: 0.20.8 + resolution: "web-tree-sitter@npm:0.20.8" + checksum: 300c8daf438422ff92f46b3d9768d7af84c1d680331f19ce109e48b5e4e137f1be8f9e446f13fae65afabbc61b62ed1d87f942ca1ab49d1a1aa7740817f98874 + languageName: node + linkType: hard + +"webidl-conversions@npm:^3.0.0": + version: 3.0.1 + resolution: "webidl-conversions@npm:3.0.1" + checksum: c92a0a6ab95314bde9c32e1d0a6dfac83b578f8fa5f21e675bc2706ed6981bc26b7eb7e6a1fab158e5ce4adf9caa4a0aee49a52505d4d13c7be545f15021b17c + languageName: node + linkType: hard + +"webidl-conversions@npm:^6.1.0": + version: 6.1.0 + resolution: "webidl-conversions@npm:6.1.0" + checksum: 1f526507aa491f972a0c1409d07f8444e1d28778dfa269a9971f2e157182f3d496dc33296e4ed45b157fdb3bf535bb90c90bf10c50dcf1dd6caacb2a34cc84fb + languageName: node + linkType: hard + +"webidl-conversions@npm:^7.0.0": + version: 7.0.0 + resolution: "webidl-conversions@npm:7.0.0" + checksum: f05588567a2a76428515333eff87200fae6c83c3948a7482ebb109562971e77ef6dc49749afa58abb993391227c5697b3ecca52018793e0cb4620a48f10bd21b + languageName: node + linkType: hard + +"webpack-cli@npm:^5.0.1": + version: 5.1.4 + resolution: "webpack-cli@npm:5.1.4" + dependencies: + "@discoveryjs/json-ext": ^0.5.0 + "@webpack-cli/configtest": ^2.1.1 + "@webpack-cli/info": ^2.0.2 + "@webpack-cli/serve": ^2.0.5 + colorette: ^2.0.14 + commander: ^10.0.1 + cross-spawn: ^7.0.3 + envinfo: ^7.7.3 + fastest-levenshtein: ^1.0.12 + import-local: ^3.0.2 + interpret: ^3.1.1 + rechoir: ^0.8.0 + webpack-merge: ^5.7.3 + peerDependencies: + webpack: 5.x.x + peerDependenciesMeta: + "@webpack-cli/generators": + optional: true + webpack-bundle-analyzer: + optional: true + webpack-dev-server: + optional: true + bin: + webpack-cli: bin/cli.js + checksum: 3a4ad0d0342a6815c850ee4633cc2a8a5dae04f918e7847f180bf24ab400803cf8a8943707ffbed03eb20fe6ce647f996f60a2aade87b0b4a9954da3da172ce0 + languageName: node + linkType: hard + +"webpack-merge@npm:^5.7.3, webpack-merge@npm:^5.8.0": + version: 5.9.0 + resolution: "webpack-merge@npm:5.9.0" + dependencies: + clone-deep: ^4.0.1 + wildcard: ^2.0.0 + checksum: 64fe2c23aacc5f19684452a0e84ec02c46b990423aee6fcc5c18d7d471155bd14e9a6adb02bd3656eb3e0ac2532c8e97d69412ad14c97eeafe32fa6d10050872 + languageName: node + linkType: hard + +"webpack-sources@npm:^1.2.0": + version: 1.4.3 + resolution: "webpack-sources@npm:1.4.3" + dependencies: + source-list-map: ^2.0.0 + source-map: ~0.6.1 + checksum: 37463dad8d08114930f4bc4882a9602941f07c9f0efa9b6bc78738cd936275b990a596d801ef450d022bb005b109b9f451dd087db2f3c9baf53e8e22cf388f79 + languageName: node + linkType: hard + +"webpack-sources@npm:^3.2.3": + version: 3.2.3 + resolution: "webpack-sources@npm:3.2.3" + checksum: 989e401b9fe3536529e2a99dac8c1bdc50e3a0a2c8669cbafad31271eadd994bc9405f88a3039cd2e29db5e6d9d0926ceb7a1a4e7409ece021fe79c37d9c4607 + languageName: node + linkType: hard + +"webpack@npm:^5.76.1": + version: 5.87.0 + resolution: "webpack@npm:5.87.0" + dependencies: + "@types/eslint-scope": ^3.7.3 + "@types/estree": ^1.0.0 + "@webassemblyjs/ast": ^1.11.5 + "@webassemblyjs/wasm-edit": ^1.11.5 + "@webassemblyjs/wasm-parser": ^1.11.5 + acorn: ^8.7.1 + acorn-import-assertions: ^1.9.0 + browserslist: ^4.14.5 + chrome-trace-event: ^1.0.2 + enhanced-resolve: ^5.15.0 + es-module-lexer: ^1.2.1 + eslint-scope: 5.1.1 + events: ^3.2.0 + glob-to-regexp: ^0.4.1 + graceful-fs: ^4.2.9 + json-parse-even-better-errors: ^2.3.1 + loader-runner: ^4.2.0 + mime-types: ^2.1.27 + neo-async: ^2.6.2 + schema-utils: ^3.2.0 + tapable: ^2.1.1 + terser-webpack-plugin: ^5.3.7 + watchpack: ^2.4.0 + webpack-sources: ^3.2.3 + peerDependenciesMeta: + webpack-cli: + optional: true + bin: + webpack: bin/webpack.js + checksum: b7d0e390f9d30627e303d54b17cb87b62f49ecffe2d35481f830679904993bae208e23748ffe0e6091b6dd4810562b2f2e88bb0f23b96515d74fb1e3c2898210 + languageName: node + linkType: hard + +"whatwg-encoding@npm:^2.0.0": + version: 2.0.0 + resolution: "whatwg-encoding@npm:2.0.0" + dependencies: + iconv-lite: 0.6.3 + checksum: 7087810c410aa9b689cbd6af8773341a53cdc1f3aae2a882c163bd5522ec8ca4cdfc269aef417a5792f411807d5d77d50df4c24e3abb00bb60192858a40cc675 + languageName: node + linkType: hard + +"whatwg-mimetype@npm:^2.3.0": + version: 2.3.0 + resolution: "whatwg-mimetype@npm:2.3.0" + checksum: 23eb885940bcbcca4ff841c40a78e9cbb893ec42743993a42bf7aed16085b048b44b06f3402018931687153550f9a32d259dfa524e4f03577ab898b6965e5383 + languageName: node + linkType: hard + +"whatwg-mimetype@npm:^3.0.0": + version: 3.0.0 + resolution: "whatwg-mimetype@npm:3.0.0" + checksum: ce08bbb36b6aaf64f3a84da89707e3e6a31e5ab1c1a2379fd68df79ba712a4ab090904f0b50e6693b0dafc8e6343a6157e40bf18fdffd26e513cf95ee2a59824 + languageName: node + linkType: hard + +"whatwg-url@npm:^11.0.0": + version: 11.0.0 + resolution: "whatwg-url@npm:11.0.0" + dependencies: + tr46: ^3.0.0 + webidl-conversions: ^7.0.0 + checksum: ed4826aaa57e66bb3488a4b25c9cd476c46ba96052747388b5801f137dd740b73fde91ad207d96baf9f17fbcc80fc1a477ad65181b5eb5fa718d27c69501d7af + languageName: node + linkType: hard + +"whatwg-url@npm:^5.0.0": + version: 5.0.0 + resolution: "whatwg-url@npm:5.0.0" + dependencies: + tr46: ~0.0.3 + webidl-conversions: ^3.0.0 + checksum: b8daed4ad3356cc4899048a15b2c143a9aed0dfae1f611ebd55073310c7b910f522ad75d727346ad64203d7e6c79ef25eafd465f4d12775ca44b90fa82ed9e2c + languageName: node + linkType: hard + +"whatwg-url@npm:^8.0.0": + version: 8.7.0 + resolution: "whatwg-url@npm:8.7.0" + dependencies: + lodash: ^4.7.0 + tr46: ^2.1.0 + webidl-conversions: ^6.1.0 + checksum: a87abcc6cefcece5311eb642858c8fdb234e51ec74196bfacf8def2edae1bfbffdf6acb251646ed6301f8cee44262642d8769c707256125a91387e33f405dd1e + languageName: node + linkType: hard + +"which-boxed-primitive@npm:^1.0.2": + version: 1.0.2 + resolution: "which-boxed-primitive@npm:1.0.2" + dependencies: + is-bigint: ^1.0.1 + is-boolean-object: ^1.1.0 + is-number-object: ^1.0.4 + is-string: ^1.0.5 + is-symbol: ^1.0.3 + checksum: 53ce774c7379071729533922adcca47220228405e1895f26673bbd71bdf7fb09bee38c1d6399395927c6289476b5ae0629863427fd151491b71c4b6cb04f3a5e + languageName: node + linkType: hard + +"which@npm:^1.2.9": + version: 1.3.1 + resolution: "which@npm:1.3.1" + dependencies: + isexe: ^2.0.0 + bin: + which: ./bin/which + checksum: f2e185c6242244b8426c9df1510e86629192d93c1a986a7d2a591f2c24869e7ffd03d6dac07ca863b2e4c06f59a4cc9916c585b72ee9fa1aa609d0124df15e04 + languageName: node + linkType: hard + +"which@npm:^2.0.1, which@npm:^2.0.2": + version: 2.0.2 + resolution: "which@npm:2.0.2" + dependencies: + isexe: ^2.0.0 + bin: + node-which: ./bin/node-which + checksum: 1a5c563d3c1b52d5f893c8b61afe11abc3bab4afac492e8da5bde69d550de701cf9806235f20a47b5c8fa8a1d6a9135841de2596535e998027a54589000e66d1 + languageName: node + linkType: hard + +"wide-align@npm:^1.1.2, wide-align@npm:^1.1.5": + version: 1.1.5 + resolution: "wide-align@npm:1.1.5" + dependencies: + string-width: ^1.0.2 || 2 || 3 || 4 + checksum: d5fc37cd561f9daee3c80e03b92ed3e84d80dde3365a8767263d03dacfc8fa06b065ffe1df00d8c2a09f731482fcacae745abfbb478d4af36d0a891fad4834d3 + languageName: node + linkType: hard + +"wildcard@npm:^2.0.0": + version: 2.0.0 + resolution: "wildcard@npm:2.0.0" + checksum: 1f4fe4c03dfc492777c60f795bbba597ac78794f1b650d68f398fbee9adb765367c516ebd4220889b6a81e9626e7228bbe0d66237abb311573c2ee1f4902a5ad + languageName: node + linkType: hard + +"word-wrap@npm:^1.2.3, word-wrap@npm:~1.2.3": + version: 1.2.3 + resolution: "word-wrap@npm:1.2.3" + checksum: 30b48f91fcf12106ed3186ae4fa86a6a1842416df425be7b60485de14bec665a54a68e4b5156647dec3a70f25e84d270ca8bc8cd23182ed095f5c7206a938c1f + languageName: node + linkType: hard + +"wordwrap@npm:^1.0.0": + version: 1.0.0 + resolution: "wordwrap@npm:1.0.0" + checksum: 2a44b2788165d0a3de71fd517d4880a8e20ea3a82c080ce46e294f0b68b69a2e49cff5f99c600e275c698a90d12c5ea32aff06c311f0db2eb3f1201f3e7b2a04 + languageName: node + linkType: hard + +"worker-loader@npm:^3.0.2": + version: 3.0.8 + resolution: "worker-loader@npm:3.0.8" + dependencies: + loader-utils: ^2.0.0 + schema-utils: ^3.0.0 + peerDependencies: + webpack: ^4.0.0 || ^5.0.0 + checksum: 84f4a7eeb2a1d8b9704425837e017c91eedfae67ac89e0b866a2dcf283323c1dcabe0258196278b7d5fd0041392da895c8a0c59ddf3a94f1b2e003df68ddfec3 + languageName: node + linkType: hard + +"wrap-ansi-cjs@npm:wrap-ansi@^7.0.0, wrap-ansi@npm:^7.0.0": + version: 7.0.0 + resolution: "wrap-ansi@npm:7.0.0" + dependencies: + ansi-styles: ^4.0.0 + string-width: ^4.1.0 + strip-ansi: ^6.0.0 + checksum: a790b846fd4505de962ba728a21aaeda189b8ee1c7568ca5e817d85930e06ef8d1689d49dbf0e881e8ef84436af3a88bc49115c2e2788d841ff1b8b5b51a608b + languageName: node + linkType: hard + +"wrap-ansi@npm:^8.1.0": + version: 8.1.0 + resolution: "wrap-ansi@npm:8.1.0" + dependencies: + ansi-styles: ^6.1.0 + string-width: ^5.0.1 + strip-ansi: ^7.0.1 + checksum: 371733296dc2d616900ce15a0049dca0ef67597d6394c57347ba334393599e800bab03c41d4d45221b6bc967b8c453ec3ae4749eff3894202d16800fdfe0e238 + languageName: node + linkType: hard + +"wrapped@npm:^1.0.1": + version: 1.0.1 + resolution: "wrapped@npm:1.0.1" + dependencies: + co: 3.1.0 + sliced: ^1.0.1 + checksum: 549d3a0dae46f97eae15f749dc9c512cbbb0db716e1f2bc48e3e134123c941750ed008bb2799d154406154e69fb3b2e504964d9bd8e3c63e99ac4991cfd00ae8 + languageName: node + linkType: hard + +"wrappy@npm:1": + version: 1.0.2 + resolution: "wrappy@npm:1.0.2" + checksum: 159da4805f7e84a3d003d8841557196034155008f817172d4e986bd591f74aa82aa7db55929a54222309e01079a65a92a9e6414da5a6aa4b01ee44a511ac3ee5 + languageName: node + linkType: hard + +"write-file-atomic@npm:4.0.1": + version: 4.0.1 + resolution: "write-file-atomic@npm:4.0.1" + dependencies: + imurmurhash: ^0.1.4 + signal-exit: ^3.0.7 + checksum: 8f780232533ca6223c63c9b9c01c4386ca8c625ebe5017a9ed17d037aec19462ae17109e0aa155bff5966ee4ae7a27b67a99f55caf3f32ffd84155e9da3929fc + languageName: node + linkType: hard + +"write-file-atomic@npm:^2.4.2": + version: 2.4.3 + resolution: "write-file-atomic@npm:2.4.3" + dependencies: + graceful-fs: ^4.1.11 + imurmurhash: ^0.1.4 + signal-exit: ^3.0.2 + checksum: 2db81f92ae974fd87ab4a5e7932feacaca626679a7c98fcc73ad8fcea5a1950eab32fa831f79e9391ac99b562ca091ad49be37a79045bd65f595efbb8f4596ae + languageName: node + linkType: hard + +"write-file-atomic@npm:^4.0.0, write-file-atomic@npm:^4.0.2": + version: 4.0.2 + resolution: "write-file-atomic@npm:4.0.2" + dependencies: + imurmurhash: ^0.1.4 + signal-exit: ^3.0.7 + checksum: 5da60bd4eeeb935eec97ead3df6e28e5917a6bd317478e4a85a5285e8480b8ed96032bbcc6ecd07b236142a24f3ca871c924ec4a6575e623ec1b11bf8c1c253c + languageName: node + linkType: hard + +"write-json-file@npm:^3.2.0": + version: 3.2.0 + resolution: "write-json-file@npm:3.2.0" + dependencies: + detect-indent: ^5.0.0 + graceful-fs: ^4.1.15 + make-dir: ^2.1.0 + pify: ^4.0.1 + sort-keys: ^2.0.0 + write-file-atomic: ^2.4.2 + checksum: 2b97ce2027d53c28a33e4a8e7b0d565faf785988b3776f9e0c68d36477c1fb12639fd0d70877d92a861820707966c62ea9c5f7a36a165d615fd47ca8e24c8371 + languageName: node + linkType: hard + +"write-pkg@npm:4.0.0": + version: 4.0.0 + resolution: "write-pkg@npm:4.0.0" + dependencies: + sort-keys: ^2.0.0 + type-fest: ^0.4.1 + write-json-file: ^3.2.0 + checksum: 7864d44370f42a6761f6898d07ee2818c7a2faad45116580cf779f3adaf94e4bea5557612533a6c421c32323253ecb63b50615094960a637aeaef5df0fd2d6cd + languageName: node + linkType: hard + +"ws@npm:^8.11.0": + version: 8.13.0 + resolution: "ws@npm:8.13.0" + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: ">=5.0.2" + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + checksum: 53e991bbf928faf5dc6efac9b8eb9ab6497c69feeb94f963d648b7a3530a720b19ec2e0ec037344257e05a4f35bd9ad04d9de6f289615ffb133282031b18c61c + languageName: node + linkType: hard + +"x-is-string@npm:^0.1.0": + version: 0.1.0 + resolution: "x-is-string@npm:0.1.0" + checksum: 38acefe5ae2dd48339996f732c55f55d4b1c1d3f65c02116639989d8a49dd06daca3e907accfc56aac84f23372c88b83af0efc849cc62e702c81aae4de44c0d6 + languageName: node + linkType: hard + +"xml-name-validator@npm:^4.0.0": + version: 4.0.0 + resolution: "xml-name-validator@npm:4.0.0" + checksum: af100b79c29804f05fa35aa3683e29a321db9b9685d5e5febda3fa1e40f13f85abc40f45a6b2bf7bee33f68a1dc5e8eaef4cec100a304a9db565e6061d4cb5ad + languageName: node + linkType: hard + +"xml@npm:^1.0.1": + version: 1.0.1 + resolution: "xml@npm:1.0.1" + checksum: 11b5545ef3f8fec3fa29ce251f50ad7b6c97c103ed4d851306ec23366f5fa4699dd6a942262df52313a0cd1840ab26256da253c023bad3309d8ce46fe6020ca0 + languageName: node + linkType: hard + +"xmlchars@npm:^2.2.0": + version: 2.2.0 + resolution: "xmlchars@npm:2.2.0" + checksum: 8c70ac94070ccca03f47a81fcce3b271bd1f37a591bf5424e787ae313fcb9c212f5f6786e1fa82076a2c632c0141552babcd85698c437506dfa6ae2d58723062 + languageName: node + linkType: hard + +"xtend@npm:^4.0.0, xtend@npm:^4.0.1, xtend@npm:~4.0.1": + version: 4.0.2 + resolution: "xtend@npm:4.0.2" + checksum: ac5dfa738b21f6e7f0dd6e65e1b3155036d68104e67e5d5d1bde74892e327d7e5636a076f625599dc394330a731861e87343ff184b0047fef1360a7ec0a5a36a + languageName: node + linkType: hard + +"y-protocols@npm:^1.0.5": + version: 1.0.5 + resolution: "y-protocols@npm:1.0.5" + dependencies: + lib0: ^0.2.42 + checksum: d19404a4ebafcf3761c28b881abe8c32ab6e457db0e5ffc7dbb749cbc2c3bb98e003a43f3e8eba7f245b2698c76f2c4cdd1c2db869f8ec0c6ef94736d9a88652 + languageName: node + linkType: hard + +"y18n@npm:^5.0.5": + version: 5.0.8 + resolution: "y18n@npm:5.0.8" + checksum: 54f0fb95621ee60898a38c572c515659e51cc9d9f787fb109cef6fde4befbe1c4602dc999d30110feee37456ad0f1660fa2edcfde6a9a740f86a290999550d30 + languageName: node + linkType: hard + +"yallist@npm:^2.1.2": + version: 2.1.2 + resolution: "yallist@npm:2.1.2" + checksum: 9ba99409209f485b6fcb970330908a6d41fa1c933f75e08250316cce19383179a6b70a7e0721b89672ebb6199cc377bf3e432f55100da6a7d6e11902b0a642cb + languageName: node + linkType: hard + +"yallist@npm:^3.0.2": + version: 3.1.1 + resolution: "yallist@npm:3.1.1" + checksum: 48f7bb00dc19fc635a13a39fe547f527b10c9290e7b3e836b9a8f1ca04d4d342e85714416b3c2ab74949c9c66f9cebb0473e6bc353b79035356103b47641285d + languageName: node + linkType: hard + +"yallist@npm:^4.0.0": + version: 4.0.0 + resolution: "yallist@npm:4.0.0" + checksum: 343617202af32df2a15a3be36a5a8c0c8545208f3d3dfbc6bb7c3e3b7e8c6f8e7485432e4f3b88da3031a6e20afa7c711eded32ddfb122896ac5d914e75848d5 + languageName: node + linkType: hard + +"yaml-language-server@npm:^1.0.0": + version: 1.9.0 + resolution: "yaml-language-server@npm:1.9.0" + dependencies: + ajv: ^8.11.0 + prettier: 2.0.5 + request-light: ^0.5.7 + vscode-json-languageservice: 4.1.8 + vscode-languageserver: ^7.0.0 + vscode-languageserver-textdocument: ^1.0.1 + vscode-languageserver-types: ^3.16.0 + vscode-nls: ^5.0.0 + vscode-uri: ^3.0.2 + yaml: 2.0.0-11 + dependenciesMeta: + prettier: + optional: true + bin: + yaml-language-server: bin/yaml-language-server + checksum: 9c6b2a35734ca11b439c6d8fc402baba21fcd74972ea7ee2ce0cdf33a78eafac193135ad582a166b44a738ea9a67518c77429c89e27f344a76a665e3f2c77e6e + languageName: node + linkType: hard + +"yaml@npm:2.0.0-11": + version: 2.0.0-11 + resolution: "yaml@npm:2.0.0-11" + checksum: 0ac71874182034605aa7bf8ab8b18d6b664f7939b3571d0d8c7ed91af15ee24ec3277460e9a663008cab58fb455e2d4dfb038885a15c7228965d0a7a57a504b6 + languageName: node + linkType: hard + +"yaml@npm:^1.10.0": + version: 1.10.2 + resolution: "yaml@npm:1.10.2" + checksum: ce4ada136e8a78a0b08dc10b4b900936912d15de59905b2bf415b4d33c63df1d555d23acb2a41b23cf9fb5da41c256441afca3d6509de7247daa062fd2c5ea5f + languageName: node + linkType: hard + +"yargs-parser@npm:20.2.4, yargs-parser@npm:^20.2.2, yargs-parser@npm:^20.2.3": + version: 20.2.4 + resolution: "yargs-parser@npm:20.2.4" + checksum: d251998a374b2743a20271c2fd752b9fbef24eb881d53a3b99a7caa5e8227fcafd9abf1f345ac5de46435821be25ec12189a11030c12ee6481fef6863ed8b924 + languageName: node + linkType: hard + +"yargs-parser@npm:21.1.1, yargs-parser@npm:^21.0.1, yargs-parser@npm:^21.1.1": + version: 21.1.1 + resolution: "yargs-parser@npm:21.1.1" + checksum: ed2d96a616a9e3e1cc7d204c62ecc61f7aaab633dcbfab2c6df50f7f87b393993fe6640d017759fe112d0cb1e0119f2b4150a87305cc873fd90831c6a58ccf1c + languageName: node + linkType: hard + +"yargs@npm:16.2.0, yargs@npm:^16.2.0": + version: 16.2.0 + resolution: "yargs@npm: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 + checksum: b14afbb51e3251a204d81937c86a7e9d4bdbf9a2bcee38226c900d00f522969ab675703bee2a6f99f8e20103f608382936034e64d921b74df82b63c07c5e8f59 + languageName: node + linkType: hard + +"yargs@npm:^17.3.1, yargs@npm:^17.6.2": + version: 17.6.2 + resolution: "yargs@npm:17.6.2" + dependencies: + cliui: ^8.0.1 + escalade: ^3.1.1 + get-caller-file: ^2.0.5 + require-directory: ^2.1.1 + string-width: ^4.2.3 + y18n: ^5.0.5 + yargs-parser: ^21.1.1 + checksum: 47da1b0d854fa16d45a3ded57b716b013b2179022352a5f7467409da5a04a1eef5b3b3d97a2dfc13e8bbe5f2ffc0afe3bc6a4a72f8254e60f5a4bd7947138643 + languageName: node + linkType: hard + +"yarn-deduplicate@npm:^6.0.2": + version: 6.0.2 + resolution: "yarn-deduplicate@npm:6.0.2" + dependencies: + "@yarnpkg/lockfile": ^1.1.0 + commander: ^10.0.1 + semver: ^7.5.0 + tslib: ^2.5.0 + bin: + yarn-deduplicate: dist/cli.js + checksum: 2f6c38deaa1139f3a099069dc946a3800e5ba64410d1c45f516dc381e4b1619f0d4f7ad3b38a617e3a85d629ce42e5592105de7089a0da4d0198881ee5390947 + languageName: node + linkType: hard + +"yjs@npm:^13.5.40": + version: 13.5.50 + resolution: "yjs@npm:13.5.50" + dependencies: + lib0: ^0.2.49 + checksum: 1c636eadcb4191adec1b31819c8f97f90f3d9f5300856f612ec0b7313ac1ed867810c8dc16b39ddc1bba73abe247b1d2ceae70699589a384318c0b0f3dd14124 + languageName: node + linkType: hard + +"yocto-queue@npm:^0.1.0": + version: 0.1.0 + resolution: "yocto-queue@npm:0.1.0" + checksum: f77b3d8d00310def622123df93d4ee654fc6a0096182af8bd60679ddcdfb3474c56c6c7190817c84a2785648cdee9d721c0154eb45698c62176c322fb46fc700 + languageName: node + linkType: hard + +"zod@npm:3.21.4": + version: 3.21.4 + resolution: "zod@npm:3.21.4" + checksum: f185ba87342ff16f7a06686767c2b2a7af41110c7edf7c1974095d8db7a73792696bcb4a00853de0d2edeb34a5b2ea6a55871bc864227dace682a0a28de33e1f + languageName: node + linkType: hard