From 7f43a247be6e569615afb6de08ba96e7bedecf3a Mon Sep 17 00:00:00 2001 From: e111077 <5981958+e111077@users.noreply.github.com> Date: Sat, 26 Mar 2022 04:33:19 -0700 Subject: [PATCH 01/10] [extension] lit.dev tutorial editor --- .gitignore | 2 + .../.vscode/launch.json | 34 + .../.vscode/settings.json | 11 + .../.vscode/tasks.json | 20 + .../lit-dev-tutorial-plugin/.vscodeignore | 9 + packages/lit-dev-tutorial-plugin/README.md | 27 + .../lit-dev-tutorial-plugin/package-lock.json | 3538 +++++++++++++++++ packages/lit-dev-tutorial-plugin/package.json | 175 + .../lit-dev-tutorial-plugin/src/extension.ts | 66 + .../lit-dev-tutorial-plugin/src/fs-helpers.ts | 108 + .../src/test/runTest.ts | 29 + .../src/test/suite/extension.test.ts | 21 + .../src/test/suite/index.ts | 44 + .../src/tree-items/before-after-dir.ts | 116 + .../src/tree-items/generic-file.ts | 77 + .../src/tree-items/playground-file.ts | 132 + .../src/tree-items/tutorial-step.ts | 220 + .../src/tree-items/tutorial.ts | 310 ++ .../src/tree-provider.ts | 243 ++ packages/lit-dev-tutorial-plugin/src/types.ts | 26 + .../lit-dev-tutorial-plugin/tsconfig.json | 18 + 21 files changed, 5226 insertions(+) create mode 100644 packages/lit-dev-tutorial-plugin/.vscode/launch.json create mode 100644 packages/lit-dev-tutorial-plugin/.vscode/settings.json create mode 100644 packages/lit-dev-tutorial-plugin/.vscode/tasks.json create mode 100644 packages/lit-dev-tutorial-plugin/.vscodeignore create mode 100644 packages/lit-dev-tutorial-plugin/README.md create mode 100644 packages/lit-dev-tutorial-plugin/package-lock.json create mode 100644 packages/lit-dev-tutorial-plugin/package.json create mode 100644 packages/lit-dev-tutorial-plugin/src/extension.ts create mode 100644 packages/lit-dev-tutorial-plugin/src/fs-helpers.ts create mode 100644 packages/lit-dev-tutorial-plugin/src/test/runTest.ts create mode 100644 packages/lit-dev-tutorial-plugin/src/test/suite/extension.test.ts create mode 100644 packages/lit-dev-tutorial-plugin/src/test/suite/index.ts create mode 100644 packages/lit-dev-tutorial-plugin/src/tree-items/before-after-dir.ts create mode 100644 packages/lit-dev-tutorial-plugin/src/tree-items/generic-file.ts create mode 100644 packages/lit-dev-tutorial-plugin/src/tree-items/playground-file.ts create mode 100644 packages/lit-dev-tutorial-plugin/src/tree-items/tutorial-step.ts create mode 100644 packages/lit-dev-tutorial-plugin/src/tree-items/tutorial.ts create mode 100644 packages/lit-dev-tutorial-plugin/src/tree-provider.ts create mode 100644 packages/lit-dev-tutorial-plugin/src/types.ts create mode 100644 packages/lit-dev-tutorial-plugin/tsconfig.json diff --git a/.gitignore b/.gitignore index 1e9ffad7c..b127cb328 100644 --- a/.gitignore +++ b/.gitignore @@ -19,6 +19,8 @@ packages/lit-dev-content/site/docs/unversioned packages/lit-dev-api/api-data/*/repo/ packages/lit-dev-api/api-data/*/INSTALLED +packages/lit-dev-tutorial-plugin/out + # We only want to keep '-linux' screenshots which are tested by Github Actions. packages/lit-dev-tests/src/playwright/**/*.png !packages/lit-dev-tests/src/playwright/**/*-linux.png diff --git a/packages/lit-dev-tutorial-plugin/.vscode/launch.json b/packages/lit-dev-tutorial-plugin/.vscode/launch.json new file mode 100644 index 000000000..670d6e66c --- /dev/null +++ b/packages/lit-dev-tutorial-plugin/.vscode/launch.json @@ -0,0 +1,34 @@ +// A launch configuration that compiles the extension and then opens it inside a new window +// Use IntelliSense to learn about possible attributes. +// Hover to view descriptions of existing attributes. +// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 +{ + "version": "0.2.0", + "configurations": [ + { + "name": "Run Extension", + "type": "extensionHost", + "request": "launch", + "args": [ + "--extensionDevelopmentPath=${workspaceFolder}" + ], + "outFiles": [ + "${workspaceFolder}/out/**/*.js" + ], + "preLaunchTask": "${defaultBuildTask}" + }, + { + "name": "Extension Tests", + "type": "extensionHost", + "request": "launch", + "args": [ + "--extensionDevelopmentPath=${workspaceFolder}", + "--extensionTestsPath=${workspaceFolder}/out/test/suite/index" + ], + "outFiles": [ + "${workspaceFolder}/out/test/**/*.js" + ], + "preLaunchTask": "${defaultBuildTask}" + } + ] +} diff --git a/packages/lit-dev-tutorial-plugin/.vscode/settings.json b/packages/lit-dev-tutorial-plugin/.vscode/settings.json new file mode 100644 index 000000000..30bf8c2d3 --- /dev/null +++ b/packages/lit-dev-tutorial-plugin/.vscode/settings.json @@ -0,0 +1,11 @@ +// Place your settings in this file to overwrite default and user settings. +{ + "files.exclude": { + "out": false // set this to true to hide the "out" folder with the compiled JS files + }, + "search.exclude": { + "out": true // set this to false to include "out" folder in search results + }, + // Turn off tsc task auto detection since we have the necessary tasks as npm scripts + "typescript.tsc.autoDetect": "off" +} \ No newline at end of file diff --git a/packages/lit-dev-tutorial-plugin/.vscode/tasks.json b/packages/lit-dev-tutorial-plugin/.vscode/tasks.json new file mode 100644 index 000000000..3b17e53b6 --- /dev/null +++ b/packages/lit-dev-tutorial-plugin/.vscode/tasks.json @@ -0,0 +1,20 @@ +// See https://go.microsoft.com/fwlink/?LinkId=733558 +// for the documentation about the tasks.json format +{ + "version": "2.0.0", + "tasks": [ + { + "type": "npm", + "script": "watch", + "problemMatcher": "$tsc-watch", + "isBackground": true, + "presentation": { + "reveal": "never" + }, + "group": { + "kind": "build", + "isDefault": true + } + } + ] +} diff --git a/packages/lit-dev-tutorial-plugin/.vscodeignore b/packages/lit-dev-tutorial-plugin/.vscodeignore new file mode 100644 index 000000000..95280df30 --- /dev/null +++ b/packages/lit-dev-tutorial-plugin/.vscodeignore @@ -0,0 +1,9 @@ +.vscode/** +.vscode-test/** +src/** +.gitignore +.yarnrc +vsc-extension-quickstart.md +**/tsconfig.json +**/*.map +**/*.ts diff --git a/packages/lit-dev-tutorial-plugin/README.md b/packages/lit-dev-tutorial-plugin/README.md new file mode 100644 index 000000000..b7b83bff6 --- /dev/null +++ b/packages/lit-dev-tutorial-plugin/README.md @@ -0,0 +1,27 @@ +# lit.dev Tutorial Editor README + +This extension provides an editor for tutorials on lit.dev. + +## Features + +- File centralization +- Tutorial creation +- Tutorial deletion +- Step creation +- Step deletion +- Playground file creation +- Playground file deletion +- Step re-arrangement +- Reveal File in Sidebar +- "After" step creation +- "After" step deletion +- Automatic tutorial.json management +- Automatic project.json management + +## Requirements + +You must be in the `lit.dev` root workspace or `lit.dev/packages/lit-dev-content` directory. + +## Known Issues + +It does not handle empty directories or malformed tutorial projects well. diff --git a/packages/lit-dev-tutorial-plugin/package-lock.json b/packages/lit-dev-tutorial-plugin/package-lock.json new file mode 100644 index 000000000..d0857b022 --- /dev/null +++ b/packages/lit-dev-tutorial-plugin/package-lock.json @@ -0,0 +1,3538 @@ +{ + "name": "lit-dev-tutorial-editor", + "version": "0.0.1", + "lockfileVersion": 2, + "requires": true, + "packages": { + "": { + "name": "lit-dev-tutorial-editor", + "version": "0.0.1", + "devDependencies": { + "@types/glob": "^7.2.0", + "@types/mocha": "^9.1.0", + "@types/node": "14.x", + "@types/vscode": "^1.65.0", + "@vscode/test-electron": "^2.1.2", + "glob": "^7.2.0", + "mocha": "^9.2.1", + "playground-elements": "^0.15.2", + "typescript": "^4.5.5" + }, + "engines": { + "vscode": "^1.65.0" + } + }, + "node_modules/@lit/reactive-element": { + "version": "1.0.0-rc.4", + "resolved": "https://registry.npmjs.org/@lit/reactive-element/-/reactive-element-1.0.0-rc.4.tgz", + "integrity": "sha512-dJMha+4NFYdpnUJzRrWTFV5Hdp9QHWFuPnaoqonrKl4lGJVnYez9mu8ev9F/5KM47tjAjh22DuRHrdFDHfOijA==", + "dev": true + }, + "node_modules/@material/animation": { + "version": "14.0.0-canary.261f2db59.0", + "resolved": "https://registry.npmjs.org/@material/animation/-/animation-14.0.0-canary.261f2db59.0.tgz", + "integrity": "sha512-OjxWJYSRNs4vnPe8NclaNn+TsNc8TR/wHusGtezF5F+wl+5mh+K69BMXAmURtq3idoRg4XaOSC/Ohk1ovD1fMQ==", + "dev": true, + "dependencies": { + "tslib": "^2.1.0" + } + }, + "node_modules/@material/base": { + "version": "14.0.0-canary.261f2db59.0", + "resolved": "https://registry.npmjs.org/@material/base/-/base-14.0.0-canary.261f2db59.0.tgz", + "integrity": "sha512-vy5SQt+jcwwdRFfBvtpVdpULUBujecVUKOXcopaQoi2XIzI5EBHuR4gPN0cd1yfmVEucD6p2fvVv2FJ3Ngr61w==", + "dev": true, + "dependencies": { + "tslib": "^2.1.0" + } + }, + "node_modules/@material/density": { + "version": "14.0.0-canary.261f2db59.0", + "resolved": "https://registry.npmjs.org/@material/density/-/density-14.0.0-canary.261f2db59.0.tgz", + "integrity": "sha512-zOR5wISqPVr8KS/ERNC1jdRV9O832lzclyS9Ea20rDrWfuOiYsQ9bbIk12xWlxpgsn7r9fxQJyd1O2SURoHdRA==", + "dev": true, + "dependencies": { + "tslib": "^2.1.0" + } + }, + "node_modules/@material/dom": { + "version": "14.0.0-canary.261f2db59.0", + "resolved": "https://registry.npmjs.org/@material/dom/-/dom-14.0.0-canary.261f2db59.0.tgz", + "integrity": "sha512-iUpZG6Bb2l/PfNV2Fb/pXfG1p4Bz4PC9A7ATPlKfcU5HioObcnYVc/+Hrtaw8eu28BNIc+VVROtbfpqG/YgKSQ==", + "dev": true, + "dependencies": { + "@material/feature-targeting": "14.0.0-canary.261f2db59.0", + "tslib": "^2.1.0" + } + }, + "node_modules/@material/elevation": { + "version": "14.0.0-canary.261f2db59.0", + "resolved": "https://registry.npmjs.org/@material/elevation/-/elevation-14.0.0-canary.261f2db59.0.tgz", + "integrity": "sha512-AqN/tsTGGyBzZ7CtoSMBY9bDYvCuUt98EUfiGjZGXcf4HgoHV3Cn/JSLrhru5Cq8Nx6HF6AmHh3dQCfNCQduew==", + "dev": true, + "dependencies": { + "@material/animation": "14.0.0-canary.261f2db59.0", + "@material/base": "14.0.0-canary.261f2db59.0", + "@material/feature-targeting": "14.0.0-canary.261f2db59.0", + "@material/rtl": "14.0.0-canary.261f2db59.0", + "@material/theme": "14.0.0-canary.261f2db59.0", + "tslib": "^2.1.0" + } + }, + "node_modules/@material/feature-targeting": { + "version": "14.0.0-canary.261f2db59.0", + "resolved": "https://registry.npmjs.org/@material/feature-targeting/-/feature-targeting-14.0.0-canary.261f2db59.0.tgz", + "integrity": "sha512-CrVoGNu0ym52OPEKy3kgeNL2oSWOCBYbYxSH3GhERxCq5FwGBN+XmK/ZDLFVQlHYy3v8x4TqVEwXviCeumNTxQ==", + "dev": true, + "dependencies": { + "tslib": "^2.1.0" + } + }, + "node_modules/@material/floating-label": { + "version": "14.0.0-canary.261f2db59.0", + "resolved": "https://registry.npmjs.org/@material/floating-label/-/floating-label-14.0.0-canary.261f2db59.0.tgz", + "integrity": "sha512-Cp0/LngkW6/uZWbEDTe3Ox143V4kYtxl9twiM3XLKd6a67JHCzneQWFzC0qSg90b3r5O+1zOkT3ZMF2Pbu2Vwg==", + "dev": true, + "dependencies": { + "@material/animation": "14.0.0-canary.261f2db59.0", + "@material/base": "14.0.0-canary.261f2db59.0", + "@material/dom": "14.0.0-canary.261f2db59.0", + "@material/feature-targeting": "14.0.0-canary.261f2db59.0", + "@material/rtl": "14.0.0-canary.261f2db59.0", + "@material/theme": "14.0.0-canary.261f2db59.0", + "@material/typography": "14.0.0-canary.261f2db59.0", + "tslib": "^2.1.0" + } + }, + "node_modules/@material/line-ripple": { + "version": "14.0.0-canary.261f2db59.0", + "resolved": "https://registry.npmjs.org/@material/line-ripple/-/line-ripple-14.0.0-canary.261f2db59.0.tgz", + "integrity": "sha512-LlyiyxpHNlFt0PZ8Q2tvOPbjNcgm3L7tUebXsM7iGyoKXfj0HwyDI31S0KgtU3Vs5DIK4U4mnRWtoAxtBW6Jfg==", + "dev": true, + "dependencies": { + "@material/animation": "14.0.0-canary.261f2db59.0", + "@material/base": "14.0.0-canary.261f2db59.0", + "@material/feature-targeting": "14.0.0-canary.261f2db59.0", + "@material/theme": "14.0.0-canary.261f2db59.0", + "tslib": "^2.1.0" + } + }, + "node_modules/@material/linear-progress": { + "version": "14.0.0-canary.261f2db59.0", + "resolved": "https://registry.npmjs.org/@material/linear-progress/-/linear-progress-14.0.0-canary.261f2db59.0.tgz", + "integrity": "sha512-qP/iI4CT7i7HhXuUiNWL5pDN6tyTJ4uLl8e9QImz4mcQLUMU3xrNBIsutS+I5GnBE8FwLDozZFccfCxHh+pvzw==", + "dev": true, + "dependencies": { + "@material/animation": "14.0.0-canary.261f2db59.0", + "@material/base": "14.0.0-canary.261f2db59.0", + "@material/feature-targeting": "14.0.0-canary.261f2db59.0", + "@material/progress-indicator": "14.0.0-canary.261f2db59.0", + "@material/rtl": "14.0.0-canary.261f2db59.0", + "@material/theme": "14.0.0-canary.261f2db59.0", + "tslib": "^2.1.0" + } + }, + "node_modules/@material/list": { + "version": "14.0.0-canary.261f2db59.0", + "resolved": "https://registry.npmjs.org/@material/list/-/list-14.0.0-canary.261f2db59.0.tgz", + "integrity": "sha512-bjHXXk2ZeWxAFs4cJxy5J5A5ClUd3FGjRv/LwCYpsh7Dm7e8kSe8Lw2MWb6FXyF3mDJM6xqN3xXQWOh6UEu5wA==", + "dev": true, + "dependencies": { + "@material/base": "14.0.0-canary.261f2db59.0", + "@material/density": "14.0.0-canary.261f2db59.0", + "@material/dom": "14.0.0-canary.261f2db59.0", + "@material/feature-targeting": "14.0.0-canary.261f2db59.0", + "@material/ripple": "14.0.0-canary.261f2db59.0", + "@material/rtl": "14.0.0-canary.261f2db59.0", + "@material/shape": "14.0.0-canary.261f2db59.0", + "@material/theme": "14.0.0-canary.261f2db59.0", + "@material/typography": "14.0.0-canary.261f2db59.0", + "tslib": "^2.1.0" + } + }, + "node_modules/@material/menu": { + "version": "14.0.0-canary.261f2db59.0", + "resolved": "https://registry.npmjs.org/@material/menu/-/menu-14.0.0-canary.261f2db59.0.tgz", + "integrity": "sha512-x59UHoTLvEsPKjFdffrKTgEyc0T4W3m58RsizAmapXr59Uthq8+PTFOkAv9R1PV/ZCzxay7Vx+QcekC4qOr40A==", + "dev": true, + "dependencies": { + "@material/base": "14.0.0-canary.261f2db59.0", + "@material/dom": "14.0.0-canary.261f2db59.0", + "@material/elevation": "14.0.0-canary.261f2db59.0", + "@material/feature-targeting": "14.0.0-canary.261f2db59.0", + "@material/list": "14.0.0-canary.261f2db59.0", + "@material/menu-surface": "14.0.0-canary.261f2db59.0", + "@material/ripple": "14.0.0-canary.261f2db59.0", + "@material/rtl": "14.0.0-canary.261f2db59.0", + "@material/theme": "14.0.0-canary.261f2db59.0", + "tslib": "^2.1.0" + } + }, + "node_modules/@material/menu-surface": { + "version": "14.0.0-canary.261f2db59.0", + "resolved": "https://registry.npmjs.org/@material/menu-surface/-/menu-surface-14.0.0-canary.261f2db59.0.tgz", + "integrity": "sha512-zv/fv/W3zdSb+c/p6GNcOqA3+wAc/r8MOtV53WJPLlvZZSpGoTwHUp+GPiNeovfbsTSxN95XOXuVQBEfKEb8vA==", + "dev": true, + "dependencies": { + "@material/animation": "14.0.0-canary.261f2db59.0", + "@material/base": "14.0.0-canary.261f2db59.0", + "@material/elevation": "14.0.0-canary.261f2db59.0", + "@material/feature-targeting": "14.0.0-canary.261f2db59.0", + "@material/rtl": "14.0.0-canary.261f2db59.0", + "@material/shape": "14.0.0-canary.261f2db59.0", + "@material/theme": "14.0.0-canary.261f2db59.0", + "tslib": "^2.1.0" + } + }, + "node_modules/@material/mwc-base": { + "version": "0.25.3", + "resolved": "https://registry.npmjs.org/@material/mwc-base/-/mwc-base-0.25.3.tgz", + "integrity": "sha512-4wvxZ9dhPr0O4jjOHPmFyn77pafe+h1gHPlT9sbQ+ly8NY/fSn/TXn7/PbxgL8g4ZHxMvD3o7PJopg+6cbHp8Q==", + "dev": true, + "dependencies": { + "@lit/reactive-element": "1.0.0-rc.4", + "@material/base": "=14.0.0-canary.261f2db59.0", + "@material/dom": "=14.0.0-canary.261f2db59.0", + "lit": "^2.0.0", + "tslib": "^2.0.1" + } + }, + "node_modules/@material/mwc-button": { + "version": "0.25.3", + "resolved": "https://registry.npmjs.org/@material/mwc-button/-/mwc-button-0.25.3.tgz", + "integrity": "sha512-usHEKchj9hqetY7n0yebTz1Pk9Z+9W/sNZheFoSaiWQCv9XhtCdKkHH0MXTv8SpwxWuEKUf/XjtyvikGIcIn7w==", + "dev": true, + "dependencies": { + "@material/mwc-icon": "^0.25.3", + "@material/mwc-ripple": "^0.25.3", + "lit": "^2.0.0", + "tslib": "^2.0.1" + } + }, + "node_modules/@material/mwc-checkbox": { + "version": "0.25.3", + "resolved": "https://registry.npmjs.org/@material/mwc-checkbox/-/mwc-checkbox-0.25.3.tgz", + "integrity": "sha512-PSh9IAgQK4XiDzBwgclheejkA4cbZ3K9V1JTTl/YVRDD/OLLM+Bh8tbnAg/1kGVlPWOUfDrYCcZ0gg472ca7gw==", + "dev": true, + "dependencies": { + "@material/mwc-base": "^0.25.3", + "@material/mwc-ripple": "^0.25.3", + "lit": "^2.0.0", + "tslib": "^2.0.1" + } + }, + "node_modules/@material/mwc-floating-label": { + "version": "0.25.3", + "resolved": "https://registry.npmjs.org/@material/mwc-floating-label/-/mwc-floating-label-0.25.3.tgz", + "integrity": "sha512-3uFMi8Y680P0nzP5zih4YuOZJLl/C6Ux9G810Unwo44zblG/ckgJlFiM+T+oR+OH5KM8LbfNlV0ypo7FT5zYJA==", + "dev": true, + "dependencies": { + "@material/floating-label": "=14.0.0-canary.261f2db59.0", + "lit": "^2.0.0", + "tslib": "^2.0.1" + } + }, + "node_modules/@material/mwc-icon": { + "version": "0.25.3", + "resolved": "https://registry.npmjs.org/@material/mwc-icon/-/mwc-icon-0.25.3.tgz", + "integrity": "sha512-36076AWZIRSr8qYOLjuDDkxej/HA0XAosrj7TS1ZeLlUBnLUtbDtvc1S7KSa0hqez7ouzOqGaWK24yoNnTa2OA==", + "dev": true, + "dependencies": { + "lit": "^2.0.0", + "tslib": "^2.0.1" + } + }, + "node_modules/@material/mwc-icon-button": { + "version": "0.25.3", + "resolved": "https://registry.npmjs.org/@material/mwc-icon-button/-/mwc-icon-button-0.25.3.tgz", + "integrity": "sha512-FexkMpK3ZSHh7NF+PIqvVhvAbBOgFDYPck/lqnxIDC3VGJ0rjD/1MqevDy2fY6IcHGlc8Ai7VuYbdQ6Cvw8WcQ==", + "dev": true, + "dependencies": { + "@material/mwc-ripple": "^0.25.3", + "lit": "^2.0.0", + "tslib": "^2.0.1" + } + }, + "node_modules/@material/mwc-line-ripple": { + "version": "0.25.3", + "resolved": "https://registry.npmjs.org/@material/mwc-line-ripple/-/mwc-line-ripple-0.25.3.tgz", + "integrity": "sha512-ANJzSyumb+shBVTIhqF1+YByPU/EpFXxI9CS26qThFqlUDpYXg5xcoZpkMSmZv3Wv/loF1rs2mJfFWOcC6nFnw==", + "dev": true, + "dependencies": { + "@material/line-ripple": "=14.0.0-canary.261f2db59.0", + "lit": "^2.0.0", + "tslib": "^2.0.1" + } + }, + "node_modules/@material/mwc-linear-progress": { + "version": "0.25.3", + "resolved": "https://registry.npmjs.org/@material/mwc-linear-progress/-/mwc-linear-progress-0.25.3.tgz", + "integrity": "sha512-iAsM5zo78rYXXzwEg1RT0+jShxkUjOEUK0Yj6KxqxbXy1VKPTZ4HRB5Fy6wChWQi/Xl8wFlfI6nNAQtH7pakeA==", + "dev": true, + "dependencies": { + "@material/linear-progress": "=14.0.0-canary.261f2db59.0", + "@material/mwc-base": "^0.25.3", + "@material/theme": "=14.0.0-canary.261f2db59.0", + "lit": "^2.0.0", + "tslib": "^2.0.1" + } + }, + "node_modules/@material/mwc-list": { + "version": "0.25.3", + "resolved": "https://registry.npmjs.org/@material/mwc-list/-/mwc-list-0.25.3.tgz", + "integrity": "sha512-2T297qVaQsKv+QDNP2ag9g04RLKO1tm2F6BwwqvdbXTsY+LKYOJe2/aSe0kX2tQLayX4ydy2RnTevo9Ld+c+4g==", + "dev": true, + "dependencies": { + "@material/base": "=14.0.0-canary.261f2db59.0", + "@material/dom": "=14.0.0-canary.261f2db59.0", + "@material/list": "=14.0.0-canary.261f2db59.0", + "@material/mwc-base": "^0.25.3", + "@material/mwc-checkbox": "^0.25.3", + "@material/mwc-radio": "^0.25.3", + "@material/mwc-ripple": "^0.25.3", + "lit": "^2.0.0", + "tslib": "^2.0.1" + } + }, + "node_modules/@material/mwc-menu": { + "version": "0.25.3", + "resolved": "https://registry.npmjs.org/@material/mwc-menu/-/mwc-menu-0.25.3.tgz", + "integrity": "sha512-jr5R61BfqrJC0lsAI63y4BsEM2eY3n6kiCy2ZnwinmxrfFrS709T/zuSUUW/xG9b9inSku4WjjSkDhPzQrmS3g==", + "dev": true, + "dependencies": { + "@material/menu": "=14.0.0-canary.261f2db59.0", + "@material/menu-surface": "=14.0.0-canary.261f2db59.0", + "@material/mwc-base": "^0.25.3", + "@material/mwc-list": "^0.25.3", + "@material/shape": "=14.0.0-canary.261f2db59.0", + "@material/theme": "=14.0.0-canary.261f2db59.0", + "lit": "^2.0.0", + "tslib": "^2.0.1" + } + }, + "node_modules/@material/mwc-notched-outline": { + "version": "0.25.3", + "resolved": "https://registry.npmjs.org/@material/mwc-notched-outline/-/mwc-notched-outline-0.25.3.tgz", + "integrity": "sha512-8jvU8GD0Pke+pfTQ0PdXpZmkU3XIHhMVY6AHM/2IQrXHkVZmAm9kbwL7ne3Ao+6f5n+DeXDGd+SG9U6ZZjD7gw==", + "dev": true, + "dependencies": { + "@material/mwc-base": "^0.25.3", + "@material/notched-outline": "=14.0.0-canary.261f2db59.0", + "lit": "^2.0.0", + "tslib": "^2.0.1" + } + }, + "node_modules/@material/mwc-radio": { + "version": "0.25.3", + "resolved": "https://registry.npmjs.org/@material/mwc-radio/-/mwc-radio-0.25.3.tgz", + "integrity": "sha512-SXpVDrsQnz7+2w/kfBxcOJ4P+uJ0RxBd9mCLE7wVyN53gDLkNHqA0npdl2PNpRaaMavVrt27L8wWo5QIT+7zWA==", + "dev": true, + "dependencies": { + "@material/mwc-base": "^0.25.3", + "@material/mwc-ripple": "^0.25.3", + "@material/radio": "=14.0.0-canary.261f2db59.0", + "lit": "^2.0.0", + "tslib": "^2.0.1" + } + }, + "node_modules/@material/mwc-ripple": { + "version": "0.25.3", + "resolved": "https://registry.npmjs.org/@material/mwc-ripple/-/mwc-ripple-0.25.3.tgz", + "integrity": "sha512-G/gt/csxgME6/sAku3GiuB0O2LLvoPWsRTLq/9iABpaGLJjqaKHvNg/IVzNDdF3YZT7EORgR9cBWWl7umA4i4Q==", + "dev": true, + "dependencies": { + "@material/dom": "=14.0.0-canary.261f2db59.0", + "@material/mwc-base": "^0.25.3", + "@material/ripple": "=14.0.0-canary.261f2db59.0", + "lit": "^2.0.0", + "tslib": "^2.0.1" + } + }, + "node_modules/@material/mwc-textfield": { + "version": "0.25.3", + "resolved": "https://registry.npmjs.org/@material/mwc-textfield/-/mwc-textfield-0.25.3.tgz", + "integrity": "sha512-stpZ8sEyo2Mb9fG2XCoTc1Kom8oRXZiVI5rU88GtfcBU7nH0em8S4grq9X1mVfUG6Cfi1G/T+avCSIhzbYtr0w==", + "dev": true, + "dependencies": { + "@material/floating-label": "=14.0.0-canary.261f2db59.0", + "@material/line-ripple": "=14.0.0-canary.261f2db59.0", + "@material/mwc-base": "^0.25.3", + "@material/mwc-floating-label": "^0.25.3", + "@material/mwc-line-ripple": "^0.25.3", + "@material/mwc-notched-outline": "^0.25.3", + "@material/textfield": "=14.0.0-canary.261f2db59.0", + "lit": "^2.0.0", + "tslib": "^2.0.1" + } + }, + "node_modules/@material/notched-outline": { + "version": "14.0.0-canary.261f2db59.0", + "resolved": "https://registry.npmjs.org/@material/notched-outline/-/notched-outline-14.0.0-canary.261f2db59.0.tgz", + "integrity": "sha512-gtn+IKAiX2rbfbX3a9aDlfUoKCEYrlAPOZifKXUaZ4UJYMNLzZuAqy7l5Ds30emtqUE22mySTEWqhzK6dePKsA==", + "dev": true, + "dependencies": { + "@material/base": "14.0.0-canary.261f2db59.0", + "@material/feature-targeting": "14.0.0-canary.261f2db59.0", + "@material/floating-label": "14.0.0-canary.261f2db59.0", + "@material/rtl": "14.0.0-canary.261f2db59.0", + "@material/shape": "14.0.0-canary.261f2db59.0", + "@material/theme": "14.0.0-canary.261f2db59.0", + "tslib": "^2.1.0" + } + }, + "node_modules/@material/progress-indicator": { + "version": "14.0.0-canary.261f2db59.0", + "resolved": "https://registry.npmjs.org/@material/progress-indicator/-/progress-indicator-14.0.0-canary.261f2db59.0.tgz", + "integrity": "sha512-qm+zUMvFYhHuVB2OdgWTO/Dv1hMFEdIT3loX5OJMpvQ66l6rez/3F7blwHkm6W4mfuxRS3zdDdYbP5QdFcuHuA==", + "dev": true, + "dependencies": { + "tslib": "^2.1.0" + } + }, + "node_modules/@material/radio": { + "version": "14.0.0-canary.261f2db59.0", + "resolved": "https://registry.npmjs.org/@material/radio/-/radio-14.0.0-canary.261f2db59.0.tgz", + "integrity": "sha512-AvrsOqhP8UZ5d58RWgaTmQVlWQRULwk2BXhsEhtxz56CmTsyVM49thNbaNnc/TzuY9Ssxv/L2wYVbR2B3BX9Yw==", + "dev": true, + "dependencies": { + "@material/animation": "14.0.0-canary.261f2db59.0", + "@material/base": "14.0.0-canary.261f2db59.0", + "@material/density": "14.0.0-canary.261f2db59.0", + "@material/dom": "14.0.0-canary.261f2db59.0", + "@material/feature-targeting": "14.0.0-canary.261f2db59.0", + "@material/ripple": "14.0.0-canary.261f2db59.0", + "@material/theme": "14.0.0-canary.261f2db59.0", + "@material/touch-target": "14.0.0-canary.261f2db59.0", + "tslib": "^2.1.0" + } + }, + "node_modules/@material/ripple": { + "version": "14.0.0-canary.261f2db59.0", + "resolved": "https://registry.npmjs.org/@material/ripple/-/ripple-14.0.0-canary.261f2db59.0.tgz", + "integrity": "sha512-3FLCLj8X7KrFfuYBHJg1b7Odb3V/AW7fxk3m1i1zhDnygKmlQ/abVucH1s2qbX3Y+JIiq+5/C5407h9BFtOf+A==", + "dev": true, + "dependencies": { + "@material/animation": "14.0.0-canary.261f2db59.0", + "@material/base": "14.0.0-canary.261f2db59.0", + "@material/dom": "14.0.0-canary.261f2db59.0", + "@material/feature-targeting": "14.0.0-canary.261f2db59.0", + "@material/rtl": "14.0.0-canary.261f2db59.0", + "@material/theme": "14.0.0-canary.261f2db59.0", + "tslib": "^2.1.0" + } + }, + "node_modules/@material/rtl": { + "version": "14.0.0-canary.261f2db59.0", + "resolved": "https://registry.npmjs.org/@material/rtl/-/rtl-14.0.0-canary.261f2db59.0.tgz", + "integrity": "sha512-bVnXBbUsHs57+EXdeFbcwaKy3lT/itI/qTLmJ88ar0qaGEujO1GmESHm3ioqkeo4kQpTfDhBwQGeEi1aDaTdFg==", + "dev": true, + "dependencies": { + "@material/theme": "14.0.0-canary.261f2db59.0", + "tslib": "^2.1.0" + } + }, + "node_modules/@material/shape": { + "version": "14.0.0-canary.261f2db59.0", + "resolved": "https://registry.npmjs.org/@material/shape/-/shape-14.0.0-canary.261f2db59.0.tgz", + "integrity": "sha512-VjcQltd1uF9ugvLExMy00SMISjy/370o8lsZlb1T+xHyhXHL3UxeuWYLW5Amq6mbx65+c9Df9WmlXXOdebpEkw==", + "dev": true, + "dependencies": { + "@material/feature-targeting": "14.0.0-canary.261f2db59.0", + "@material/rtl": "14.0.0-canary.261f2db59.0", + "@material/theme": "14.0.0-canary.261f2db59.0", + "tslib": "^2.1.0" + } + }, + "node_modules/@material/textfield": { + "version": "14.0.0-canary.261f2db59.0", + "resolved": "https://registry.npmjs.org/@material/textfield/-/textfield-14.0.0-canary.261f2db59.0.tgz", + "integrity": "sha512-KBPgpvvVFBfLx9nc6+wWOS2hJ40JVwh5KBjMoYbiOEFLf0O7SgCAVREHaFAXrPsC8AeTyUipx6TReONIGfMCPQ==", + "dev": true, + "dependencies": { + "@material/animation": "14.0.0-canary.261f2db59.0", + "@material/base": "14.0.0-canary.261f2db59.0", + "@material/density": "14.0.0-canary.261f2db59.0", + "@material/dom": "14.0.0-canary.261f2db59.0", + "@material/feature-targeting": "14.0.0-canary.261f2db59.0", + "@material/floating-label": "14.0.0-canary.261f2db59.0", + "@material/line-ripple": "14.0.0-canary.261f2db59.0", + "@material/notched-outline": "14.0.0-canary.261f2db59.0", + "@material/ripple": "14.0.0-canary.261f2db59.0", + "@material/rtl": "14.0.0-canary.261f2db59.0", + "@material/shape": "14.0.0-canary.261f2db59.0", + "@material/theme": "14.0.0-canary.261f2db59.0", + "@material/typography": "14.0.0-canary.261f2db59.0", + "tslib": "^2.1.0" + } + }, + "node_modules/@material/theme": { + "version": "14.0.0-canary.261f2db59.0", + "resolved": "https://registry.npmjs.org/@material/theme/-/theme-14.0.0-canary.261f2db59.0.tgz", + "integrity": "sha512-bUqyFT0QF8Nxx02fekt3CXIfC9DEPOPdo2hjgdtvhrNP+vftbkI2tKZ5/uRUnVA+zqQAOyIl5z6FOMg4fyemCA==", + "dev": true, + "dependencies": { + "@material/feature-targeting": "14.0.0-canary.261f2db59.0", + "tslib": "^2.1.0" + } + }, + "node_modules/@material/touch-target": { + "version": "14.0.0-canary.261f2db59.0", + "resolved": "https://registry.npmjs.org/@material/touch-target/-/touch-target-14.0.0-canary.261f2db59.0.tgz", + "integrity": "sha512-xA6TTHN7aOTXg/+c6mQJlogzTD+Sp8WPC5TK8RBXbQxEykGXGW15p+H9pG+rX/gzD5iehnHRBrDUFmAGoskhcQ==", + "dev": true, + "dependencies": { + "@material/base": "14.0.0-canary.261f2db59.0", + "@material/feature-targeting": "14.0.0-canary.261f2db59.0", + "@material/rtl": "14.0.0-canary.261f2db59.0", + "tslib": "^2.1.0" + } + }, + "node_modules/@material/typography": { + "version": "14.0.0-canary.261f2db59.0", + "resolved": "https://registry.npmjs.org/@material/typography/-/typography-14.0.0-canary.261f2db59.0.tgz", + "integrity": "sha512-WOCdcNkD5KBRAwICcRqWBRG3cDkyrwK5USTNmG0oxnwnZAN7daOpPTdLppVAhadE7faj8d67ON+V9pH7+T62FQ==", + "dev": true, + "dependencies": { + "@material/feature-targeting": "14.0.0-canary.261f2db59.0", + "@material/theme": "14.0.0-canary.261f2db59.0", + "tslib": "^2.1.0" + } + }, + "node_modules/@tootallnate/once": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz", + "integrity": "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==", + "dev": true, + "engines": { + "node": ">= 6" + } + }, + "node_modules/@types/codemirror": { + "version": "5.60.5", + "resolved": "https://registry.npmjs.org/@types/codemirror/-/codemirror-5.60.5.tgz", + "integrity": "sha512-TiECZmm8St5YxjFUp64LK0c8WU5bxMDt9YaAek1UqUb9swrSCoJhh92fWu1p3mTEqlHjhB5sY7OFBhWroJXZVg==", + "dev": true, + "dependencies": { + "@types/tern": "*" + } + }, + "node_modules/@types/estree": { + "version": "0.0.51", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.51.tgz", + "integrity": "sha512-CuPgU6f3eT/XgKKPqKd/gLZV1Xmvf1a2R5POBOGQa6uv82xpls89HU5zKeVoyR8XzHd1RGNOlQlvUe3CFkjWNQ==", + "dev": true + }, + "node_modules/@types/glob": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.2.0.tgz", + "integrity": "sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA==", + "dev": true, + "dependencies": { + "@types/minimatch": "*", + "@types/node": "*" + } + }, + "node_modules/@types/minimatch": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.5.tgz", + "integrity": "sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ==", + "dev": true + }, + "node_modules/@types/mocha": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-9.1.0.tgz", + "integrity": "sha512-QCWHkbMv4Y5U9oW10Uxbr45qMMSzl4OzijsozynUAgx3kEHUdXB00udx2dWDQ7f2TU2a2uuiFaRZjCe3unPpeg==", + "dev": true + }, + "node_modules/@types/node": { + "version": "14.18.12", + "resolved": "https://registry.npmjs.org/@types/node/-/node-14.18.12.tgz", + "integrity": "sha512-q4jlIR71hUpWTnGhXWcakgkZeHa3CCjcQcnuzU8M891BAWA2jHiziiWEPEkdS5pFsz7H9HJiy8BrK7tBRNrY7A==", + "dev": true + }, + "node_modules/@types/tern": { + "version": "0.23.4", + "resolved": "https://registry.npmjs.org/@types/tern/-/tern-0.23.4.tgz", + "integrity": "sha512-JAUw1iXGO1qaWwEOzxTKJZ/5JxVeON9kvGZ/osgZaJImBnyjyn0cjovPsf6FNLmyGY8Vw9DoXZCMlfMkMwHRWg==", + "dev": true, + "dependencies": { + "@types/estree": "*" + } + }, + "node_modules/@types/trusted-types": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@types/trusted-types/-/trusted-types-2.0.2.tgz", + "integrity": "sha512-F5DIZ36YVLE+PN+Zwws4kJogq47hNgX3Nx6WyDJ3kcplxyke3XIzB8uK5n/Lpm1HBsbGzd6nmGehL8cPekP+Tg==", + "dev": true + }, + "node_modules/@types/vscode": { + "version": "1.65.0", + "resolved": "https://registry.npmjs.org/@types/vscode/-/vscode-1.65.0.tgz", + "integrity": "sha512-wQhExnh2nEzpjDMSKhUvnNmz3ucpd3E+R7wJkOhBNK3No6fG3VUdmVmMOKD0A8NDZDDDiQcLNxe3oGmX5SjJ5w==", + "dev": true + }, + "node_modules/@ungap/promise-all-settled": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@ungap/promise-all-settled/-/promise-all-settled-1.1.2.tgz", + "integrity": "sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q==", + "dev": true + }, + "node_modules/@vscode/test-electron": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/@vscode/test-electron/-/test-electron-2.1.3.tgz", + "integrity": "sha512-ps/yJ/9ToUZtR1dHfWi1mDXtep1VoyyrmGKC3UnIbScToRQvbUjyy1VMqnMEW3EpMmC3g7+pyThIPtPyCLHyow==", + "dev": true, + "dependencies": { + "http-proxy-agent": "^4.0.1", + "https-proxy-agent": "^5.0.0", + "rimraf": "^3.0.2", + "unzipper": "^0.10.11" + }, + "engines": { + "node": ">=8.9.3" + } + }, + "node_modules/agent-base": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", + "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", + "dev": true, + "dependencies": { + "debug": "4" + }, + "engines": { + "node": ">= 6.0.0" + } + }, + "node_modules/ansi-colors": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", + "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/anymatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", + "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", + "dev": true, + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true + }, + "node_modules/big-integer": { + "version": "1.6.51", + "resolved": "https://registry.npmjs.org/big-integer/-/big-integer-1.6.51.tgz", + "integrity": "sha512-GPEid2Y9QU1Exl1rpO9B2IPJGHPSupF5GnVIP0blYvNOMer2bTvSWs1jGOUg04hTmu67nmLsQ9TBo1puaotBHg==", + "dev": true, + "engines": { + "node": ">=0.6" + } + }, + "node_modules/binary": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/binary/-/binary-0.3.0.tgz", + "integrity": "sha1-n2BVO8XOjDOG87VTz/R0Yq3sqnk=", + "dev": true, + "dependencies": { + "buffers": "~0.1.1", + "chainsaw": "~0.1.0" + }, + "engines": { + "node": "*" + } + }, + "node_modules/binary-extensions": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", + "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/bluebird": { + "version": "3.4.7", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.4.7.tgz", + "integrity": "sha1-9y12C+Cbf3bQjtj66Ysomo0F+rM=", + "dev": true + }, + "node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, + "dependencies": { + "fill-range": "^7.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/browser-stdout": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", + "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==", + "dev": true + }, + "node_modules/buffer-indexof-polyfill": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/buffer-indexof-polyfill/-/buffer-indexof-polyfill-1.0.2.tgz", + "integrity": "sha512-I7wzHwA3t1/lwXQh+A5PbNvJxgfo5r3xulgpYDB5zckTu/Z9oUK9biouBKQUjEqzaz3HnAT6TYoovmE+GqSf7A==", + "dev": true, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/buffers": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/buffers/-/buffers-0.1.1.tgz", + "integrity": "sha1-skV5w77U1tOWru5tmorn9Ugqt7s=", + "dev": true, + "engines": { + "node": ">=0.2.0" + } + }, + "node_modules/camelcase": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/chainsaw": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/chainsaw/-/chainsaw-0.1.0.tgz", + "integrity": "sha1-XqtQsor+WAdNDVgpE4iCi15fvJg=", + "dev": true, + "dependencies": { + "traverse": ">=0.3.0 <0.4" + }, + "engines": { + "node": "*" + } + }, + "node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/chalk/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/chokidar": { + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", + "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + ], + "dependencies": { + "anymatch": "~3.1.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" + }, + "engines": { + "node": ">= 8.10.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/cliui": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", + "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", + "dev": true, + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" + } + }, + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/comlink": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/comlink/-/comlink-4.3.1.tgz", + "integrity": "sha512-+YbhUdNrpBZggBAHWcgQMLPLH1KDF3wJpeqrCKieWQ8RL7atmgsgTQko1XEBK6PsecfopWNntopJ+ByYG1lRaA==", + "dev": true + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", + "dev": true + }, + "node_modules/core-util-is": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", + "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", + "dev": true + }, + "node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/decamelize": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-4.0.0.tgz", + "integrity": "sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/diff": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/diff/-/diff-5.0.0.tgz", + "integrity": "sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==", + "dev": true, + "engines": { + "node": ">=0.3.1" + } + }, + "node_modules/duplexer2": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.1.4.tgz", + "integrity": "sha1-ixLauHjA1p4+eJEFFmKjL8a93ME=", + "dev": true, + "dependencies": { + "readable-stream": "^2.0.2" + } + }, + "node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "node_modules/escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dev": true, + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/flat": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", + "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", + "dev": true, + "bin": { + "flat": "cli.js" + } + }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", + "dev": true + }, + "node_modules/fsevents": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "dev": true, + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/fstream": { + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/fstream/-/fstream-1.0.12.tgz", + "integrity": "sha512-WvJ193OHa0GHPEL+AycEJgxvBEwyfRkN1vhjca23OaPVMCaLCXTd5qAu82AjTcgP1UJmytkOKb63Ypde7raDIg==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.1.2", + "inherits": "~2.0.0", + "mkdirp": ">=0.5 0", + "rimraf": "2" + }, + "engines": { + "node": ">=0.6" + } + }, + "node_modules/fstream/node_modules/rimraf": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "dev": true, + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + } + }, + "node_modules/fuse.js": { + "version": "6.5.3", + "resolved": "https://registry.npmjs.org/fuse.js/-/fuse.js-6.5.3.tgz", + "integrity": "sha512-sA5etGE7yD/pOqivZRBvUBd/NaL2sjAu6QuSaFoe1H2BrJSkH/T/UXAJ8CdXdw7DvY3Hs8CXKYkDWX7RiP5KOg==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "dev": true, + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, + "node_modules/glob": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", + "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.9", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.9.tgz", + "integrity": "sha512-NtNxqUcXgpW2iMrfqSfR73Glt39K+BLwWsPs94yR63v45T0Wbej7eRmL5cWfwEgqXnmjQp3zaJTshdRW/qC2ZQ==", + "dev": true + }, + "node_modules/growl": { + "version": "1.10.5", + "resolved": "https://registry.npmjs.org/growl/-/growl-1.10.5.tgz", + "integrity": "sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==", + "dev": true, + "engines": { + "node": ">=4.x" + } + }, + "node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/he": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", + "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", + "dev": true, + "bin": { + "he": "bin/he" + } + }, + "node_modules/http-proxy-agent": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz", + "integrity": "sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==", + "dev": true, + "dependencies": { + "@tootallnate/once": "1", + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/https-proxy-agent": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz", + "integrity": "sha512-EkYm5BcKUGiduxzSt3Eppko+PiNWNEpa4ySk9vTC6wDsQJW9rHSa+UhGNJoRYp7bz6Ht1eaRIa6QaJqO5rCFbA==", + "dev": true, + "dependencies": { + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "dev": true, + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true + }, + "node_modules/is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dev": true, + "dependencies": { + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true, + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-plain-obj": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", + "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-unicode-supported": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", + "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "dev": true + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", + "dev": true + }, + "node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/listenercount": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/listenercount/-/listenercount-1.0.1.tgz", + "integrity": "sha1-hMinKrWcRyUyFIDJdeZQg0LnCTc=", + "dev": true + }, + "node_modules/lit": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/lit/-/lit-2.2.1.tgz", + "integrity": "sha512-dSe++R50JqrvNGXmI9OE13de1z5U/Y3J2dTm/9GC86vedI8ILoR8ZGnxfThFpvQ9m0lR0qRnIR4IiKj/jDCfYw==", + "dev": true, + "dependencies": { + "@lit/reactive-element": "^1.3.0", + "lit-element": "^3.2.0", + "lit-html": "^2.2.0" + } + }, + "node_modules/lit-element": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/lit-element/-/lit-element-3.2.0.tgz", + "integrity": "sha512-HbE7yt2SnUtg5DCrWt028oaU4D5F4k/1cntAFHTkzY8ZIa8N0Wmu92PxSxucsQSOXlODFrICkQ5x/tEshKi13g==", + "dev": true, + "dependencies": { + "@lit/reactive-element": "^1.3.0", + "lit-html": "^2.2.0" + } + }, + "node_modules/lit-element/node_modules/@lit/reactive-element": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/@lit/reactive-element/-/reactive-element-1.3.1.tgz", + "integrity": "sha512-nOJARIr3pReqK3hfFCSW2Zg/kFcFsSAlIE7z4a0C9D2dPrgD/YSn3ZP2ET/rxKB65SXyG7jJbkynBRm+tGlacw==", + "dev": true + }, + "node_modules/lit-html": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/lit-html/-/lit-html-2.2.1.tgz", + "integrity": "sha512-AiJ/Rs0awjICs2FioTnHSh+Np5dhYSkyRczKy3wKjp8qjLhr1Ov+GiHrUQNdX8ou1LMuznpIME990AZsa/tR8g==", + "dev": true, + "dependencies": { + "@types/trusted-types": "^2.0.2" + } + }, + "node_modules/lit/node_modules/@lit/reactive-element": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/@lit/reactive-element/-/reactive-element-1.3.1.tgz", + "integrity": "sha512-nOJARIr3pReqK3hfFCSW2Zg/kFcFsSAlIE7z4a0C9D2dPrgD/YSn3ZP2ET/rxKB65SXyG7jJbkynBRm+tGlacw==", + "dev": true + }, + "node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, + "dependencies": { + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/log-symbols": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", + "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", + "dev": true, + "dependencies": { + "chalk": "^4.1.0", + "is-unicode-supported": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/minimist": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz", + "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==", + "dev": true + }, + "node_modules/mkdirp": { + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", + "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", + "dev": true, + "dependencies": { + "minimist": "^1.2.6" + }, + "bin": { + "mkdirp": "bin/cmd.js" + } + }, + "node_modules/mocha": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/mocha/-/mocha-9.2.2.tgz", + "integrity": "sha512-L6XC3EdwT6YrIk0yXpavvLkn8h+EU+Y5UcCHKECyMbdUIxyMuZj4bX4U9e1nvnvUUvQVsV2VHQr5zLdcUkhW/g==", + "dev": true, + "dependencies": { + "@ungap/promise-all-settled": "1.1.2", + "ansi-colors": "4.1.1", + "browser-stdout": "1.3.1", + "chokidar": "3.5.3", + "debug": "4.3.3", + "diff": "5.0.0", + "escape-string-regexp": "4.0.0", + "find-up": "5.0.0", + "glob": "7.2.0", + "growl": "1.10.5", + "he": "1.2.0", + "js-yaml": "4.1.0", + "log-symbols": "4.1.0", + "minimatch": "4.2.1", + "ms": "2.1.3", + "nanoid": "3.3.1", + "serialize-javascript": "6.0.0", + "strip-json-comments": "3.1.1", + "supports-color": "8.1.1", + "which": "2.0.2", + "workerpool": "6.2.0", + "yargs": "16.2.0", + "yargs-parser": "20.2.4", + "yargs-unparser": "2.0.0" + }, + "bin": { + "_mocha": "bin/_mocha", + "mocha": "bin/mocha" + }, + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/mochajs" + } + }, + "node_modules/mocha/node_modules/debug": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", + "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", + "dev": true, + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/mocha/node_modules/debug/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "node_modules/mocha/node_modules/minimatch": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-4.2.1.tgz", + "integrity": "sha512-9Uq1ChtSZO+Mxa/CL1eGizn2vRn3MlLgzhT0Iz8zaY8NdvxvB0d5QdPFmCKf7JKA9Lerx5vRrnwO03jsSfGG9g==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/mocha/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true + }, + "node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "node_modules/nanoid": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.1.tgz", + "integrity": "sha512-n6Vs/3KGyxPQd6uO0eH4Bv0ojGSUvuLlIHtC3Y0kEO23YRge8H9x1GCzLn28YX0H66pMkxuaeESFq4tKISKwdw==", + "dev": true, + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "dev": true, + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, + "dependencies": { + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/playground-elements": { + "version": "0.15.2", + "resolved": "https://registry.npmjs.org/playground-elements/-/playground-elements-0.15.2.tgz", + "integrity": "sha512-XL4MnTIVa/dCWvqAtDgZM9KOyvQtZaas4CEUXrZZmhzFRMRMAe572VBtjpHdulFvn51rJvJsxXcJaTp03RhMBQ==", + "dev": true, + "dependencies": { + "@material/mwc-button": "^0.25.1", + "@material/mwc-icon-button": "^0.25.1", + "@material/mwc-linear-progress": "^0.25.1", + "@material/mwc-list": "^0.25.1", + "@material/mwc-menu": "^0.25.1", + "@material/mwc-textfield": "^0.25.1", + "@types/codemirror": "^5.60.0", + "comlink": "=4.3.1", + "fuse.js": "^6.4.6", + "lit": "^2.0.0", + "tslib": "^2.0.3", + "vscode-languageserver": "^7.0.0" + } + }, + "node_modules/process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", + "dev": true + }, + "node_modules/randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "dev": true, + "dependencies": { + "safe-buffer": "^5.1.0" + } + }, + "node_modules/readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "dev": true, + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/readable-stream/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + }, + "node_modules/readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dev": true, + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dev": true, + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/serialize-javascript": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz", + "integrity": "sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==", + "dev": true, + "dependencies": { + "randombytes": "^2.1.0" + } + }, + "node_modules/setimmediate": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", + "integrity": "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=", + "dev": true + }, + "node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/string_decoder/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + }, + "node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/traverse": { + "version": "0.3.9", + "resolved": "https://registry.npmjs.org/traverse/-/traverse-0.3.9.tgz", + "integrity": "sha1-cXuPIgzAu3tE5AUUwisui7xw2Lk=", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/tslib": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.1.tgz", + "integrity": "sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw==", + "dev": true + }, + "node_modules/typescript": { + "version": "4.6.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.6.3.tgz", + "integrity": "sha512-yNIatDa5iaofVozS/uQJEl3JRWLKKGJKh6Yaiv0GLGSuhpFJe7P3SbHZ8/yjAHRQwKRoA6YZqlfjXWmVzoVSMw==", + "dev": true, + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=4.2.0" + } + }, + "node_modules/unzipper": { + "version": "0.10.11", + "resolved": "https://registry.npmjs.org/unzipper/-/unzipper-0.10.11.tgz", + "integrity": "sha512-+BrAq2oFqWod5IESRjL3S8baohbevGcVA+teAIOYWM3pDVdseogqbzhhvvmiyQrUNKFUnDMtELW3X8ykbyDCJw==", + "dev": true, + "dependencies": { + "big-integer": "^1.6.17", + "binary": "~0.3.0", + "bluebird": "~3.4.1", + "buffer-indexof-polyfill": "~1.0.0", + "duplexer2": "~0.1.4", + "fstream": "^1.0.12", + "graceful-fs": "^4.2.2", + "listenercount": "~1.0.1", + "readable-stream": "~2.3.6", + "setimmediate": "~1.0.4" + } + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", + "dev": true + }, + "node_modules/vscode-jsonrpc": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/vscode-jsonrpc/-/vscode-jsonrpc-6.0.0.tgz", + "integrity": "sha512-wnJA4BnEjOSyFMvjZdpiOwhSq9uDoK8e/kpRJDTaMYzwlkrhG1fwDIZI94CLsLzlCK5cIbMMtFlJlfR57Lavmg==", + "dev": true, + "engines": { + "node": ">=8.0.0 || >=10.0.0" + } + }, + "node_modules/vscode-languageserver": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/vscode-languageserver/-/vscode-languageserver-7.0.0.tgz", + "integrity": "sha512-60HTx5ID+fLRcgdHfmz0LDZAXYEV68fzwG0JWwEPBode9NuMYTIxuYXPg4ngO8i8+Ou0lM7y6GzaYWbiDL0drw==", + "dev": true, + "dependencies": { + "vscode-languageserver-protocol": "3.16.0" + }, + "bin": { + "installServerIntoExtension": "bin/installServerIntoExtension" + } + }, + "node_modules/vscode-languageserver-protocol": { + "version": "3.16.0", + "resolved": "https://registry.npmjs.org/vscode-languageserver-protocol/-/vscode-languageserver-protocol-3.16.0.tgz", + "integrity": "sha512-sdeUoAawceQdgIfTI+sdcwkiK2KU+2cbEYA0agzM2uqaUy2UpnnGHtWTHVEtS0ES4zHU0eMFRGN+oQgDxlD66A==", + "dev": true, + "dependencies": { + "vscode-jsonrpc": "6.0.0", + "vscode-languageserver-types": "3.16.0" + } + }, + "node_modules/vscode-languageserver-types": { + "version": "3.16.0", + "resolved": "https://registry.npmjs.org/vscode-languageserver-types/-/vscode-languageserver-types-3.16.0.tgz", + "integrity": "sha512-k8luDIWJWyenLc5ToFQQMaSrqCHiLwyKPHKPQZ5zz21vM+vIVUSvsRpcbiECH4WR88K2XZqc4ScRcZ7nk/jbeA==", + "dev": true + }, + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/workerpool": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.2.0.tgz", + "integrity": "sha512-Rsk5qQHJ9eowMH28Jwhe8HEbmdYDX4lwoMWshiCXugjtHqMD9ZbiqSDLxcsfdqsETPzVUtX5s1Z5kStiIM6l4A==", + "dev": true + }, + "node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", + "dev": true + }, + "node_modules/y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/yargs": { + "version": "16.2.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", + "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", + "dev": true, + "dependencies": { + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.0", + "y18n": "^5.0.5", + "yargs-parser": "^20.2.2" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/yargs-parser": { + "version": "20.2.4", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.4.tgz", + "integrity": "sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/yargs-unparser": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-2.0.0.tgz", + "integrity": "sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==", + "dev": true, + "dependencies": { + "camelcase": "^6.0.0", + "decamelize": "^4.0.0", + "flat": "^5.0.2", + "is-plain-obj": "^2.1.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + } + }, + "dependencies": { + "@lit/reactive-element": { + "version": "1.0.0-rc.4", + "resolved": "https://registry.npmjs.org/@lit/reactive-element/-/reactive-element-1.0.0-rc.4.tgz", + "integrity": "sha512-dJMha+4NFYdpnUJzRrWTFV5Hdp9QHWFuPnaoqonrKl4lGJVnYez9mu8ev9F/5KM47tjAjh22DuRHrdFDHfOijA==", + "dev": true + }, + "@material/animation": { + "version": "14.0.0-canary.261f2db59.0", + "resolved": "https://registry.npmjs.org/@material/animation/-/animation-14.0.0-canary.261f2db59.0.tgz", + "integrity": "sha512-OjxWJYSRNs4vnPe8NclaNn+TsNc8TR/wHusGtezF5F+wl+5mh+K69BMXAmURtq3idoRg4XaOSC/Ohk1ovD1fMQ==", + "dev": true, + "requires": { + "tslib": "^2.1.0" + } + }, + "@material/base": { + "version": "14.0.0-canary.261f2db59.0", + "resolved": "https://registry.npmjs.org/@material/base/-/base-14.0.0-canary.261f2db59.0.tgz", + "integrity": "sha512-vy5SQt+jcwwdRFfBvtpVdpULUBujecVUKOXcopaQoi2XIzI5EBHuR4gPN0cd1yfmVEucD6p2fvVv2FJ3Ngr61w==", + "dev": true, + "requires": { + "tslib": "^2.1.0" + } + }, + "@material/density": { + "version": "14.0.0-canary.261f2db59.0", + "resolved": "https://registry.npmjs.org/@material/density/-/density-14.0.0-canary.261f2db59.0.tgz", + "integrity": "sha512-zOR5wISqPVr8KS/ERNC1jdRV9O832lzclyS9Ea20rDrWfuOiYsQ9bbIk12xWlxpgsn7r9fxQJyd1O2SURoHdRA==", + "dev": true, + "requires": { + "tslib": "^2.1.0" + } + }, + "@material/dom": { + "version": "14.0.0-canary.261f2db59.0", + "resolved": "https://registry.npmjs.org/@material/dom/-/dom-14.0.0-canary.261f2db59.0.tgz", + "integrity": "sha512-iUpZG6Bb2l/PfNV2Fb/pXfG1p4Bz4PC9A7ATPlKfcU5HioObcnYVc/+Hrtaw8eu28BNIc+VVROtbfpqG/YgKSQ==", + "dev": true, + "requires": { + "@material/feature-targeting": "14.0.0-canary.261f2db59.0", + "tslib": "^2.1.0" + } + }, + "@material/elevation": { + "version": "14.0.0-canary.261f2db59.0", + "resolved": "https://registry.npmjs.org/@material/elevation/-/elevation-14.0.0-canary.261f2db59.0.tgz", + "integrity": "sha512-AqN/tsTGGyBzZ7CtoSMBY9bDYvCuUt98EUfiGjZGXcf4HgoHV3Cn/JSLrhru5Cq8Nx6HF6AmHh3dQCfNCQduew==", + "dev": true, + "requires": { + "@material/animation": "14.0.0-canary.261f2db59.0", + "@material/base": "14.0.0-canary.261f2db59.0", + "@material/feature-targeting": "14.0.0-canary.261f2db59.0", + "@material/rtl": "14.0.0-canary.261f2db59.0", + "@material/theme": "14.0.0-canary.261f2db59.0", + "tslib": "^2.1.0" + } + }, + "@material/feature-targeting": { + "version": "14.0.0-canary.261f2db59.0", + "resolved": "https://registry.npmjs.org/@material/feature-targeting/-/feature-targeting-14.0.0-canary.261f2db59.0.tgz", + "integrity": "sha512-CrVoGNu0ym52OPEKy3kgeNL2oSWOCBYbYxSH3GhERxCq5FwGBN+XmK/ZDLFVQlHYy3v8x4TqVEwXviCeumNTxQ==", + "dev": true, + "requires": { + "tslib": "^2.1.0" + } + }, + "@material/floating-label": { + "version": "14.0.0-canary.261f2db59.0", + "resolved": "https://registry.npmjs.org/@material/floating-label/-/floating-label-14.0.0-canary.261f2db59.0.tgz", + "integrity": "sha512-Cp0/LngkW6/uZWbEDTe3Ox143V4kYtxl9twiM3XLKd6a67JHCzneQWFzC0qSg90b3r5O+1zOkT3ZMF2Pbu2Vwg==", + "dev": true, + "requires": { + "@material/animation": "14.0.0-canary.261f2db59.0", + "@material/base": "14.0.0-canary.261f2db59.0", + "@material/dom": "14.0.0-canary.261f2db59.0", + "@material/feature-targeting": "14.0.0-canary.261f2db59.0", + "@material/rtl": "14.0.0-canary.261f2db59.0", + "@material/theme": "14.0.0-canary.261f2db59.0", + "@material/typography": "14.0.0-canary.261f2db59.0", + "tslib": "^2.1.0" + } + }, + "@material/line-ripple": { + "version": "14.0.0-canary.261f2db59.0", + "resolved": "https://registry.npmjs.org/@material/line-ripple/-/line-ripple-14.0.0-canary.261f2db59.0.tgz", + "integrity": "sha512-LlyiyxpHNlFt0PZ8Q2tvOPbjNcgm3L7tUebXsM7iGyoKXfj0HwyDI31S0KgtU3Vs5DIK4U4mnRWtoAxtBW6Jfg==", + "dev": true, + "requires": { + "@material/animation": "14.0.0-canary.261f2db59.0", + "@material/base": "14.0.0-canary.261f2db59.0", + "@material/feature-targeting": "14.0.0-canary.261f2db59.0", + "@material/theme": "14.0.0-canary.261f2db59.0", + "tslib": "^2.1.0" + } + }, + "@material/linear-progress": { + "version": "14.0.0-canary.261f2db59.0", + "resolved": "https://registry.npmjs.org/@material/linear-progress/-/linear-progress-14.0.0-canary.261f2db59.0.tgz", + "integrity": "sha512-qP/iI4CT7i7HhXuUiNWL5pDN6tyTJ4uLl8e9QImz4mcQLUMU3xrNBIsutS+I5GnBE8FwLDozZFccfCxHh+pvzw==", + "dev": true, + "requires": { + "@material/animation": "14.0.0-canary.261f2db59.0", + "@material/base": "14.0.0-canary.261f2db59.0", + "@material/feature-targeting": "14.0.0-canary.261f2db59.0", + "@material/progress-indicator": "14.0.0-canary.261f2db59.0", + "@material/rtl": "14.0.0-canary.261f2db59.0", + "@material/theme": "14.0.0-canary.261f2db59.0", + "tslib": "^2.1.0" + } + }, + "@material/list": { + "version": "14.0.0-canary.261f2db59.0", + "resolved": "https://registry.npmjs.org/@material/list/-/list-14.0.0-canary.261f2db59.0.tgz", + "integrity": "sha512-bjHXXk2ZeWxAFs4cJxy5J5A5ClUd3FGjRv/LwCYpsh7Dm7e8kSe8Lw2MWb6FXyF3mDJM6xqN3xXQWOh6UEu5wA==", + "dev": true, + "requires": { + "@material/base": "14.0.0-canary.261f2db59.0", + "@material/density": "14.0.0-canary.261f2db59.0", + "@material/dom": "14.0.0-canary.261f2db59.0", + "@material/feature-targeting": "14.0.0-canary.261f2db59.0", + "@material/ripple": "14.0.0-canary.261f2db59.0", + "@material/rtl": "14.0.0-canary.261f2db59.0", + "@material/shape": "14.0.0-canary.261f2db59.0", + "@material/theme": "14.0.0-canary.261f2db59.0", + "@material/typography": "14.0.0-canary.261f2db59.0", + "tslib": "^2.1.0" + } + }, + "@material/menu": { + "version": "14.0.0-canary.261f2db59.0", + "resolved": "https://registry.npmjs.org/@material/menu/-/menu-14.0.0-canary.261f2db59.0.tgz", + "integrity": "sha512-x59UHoTLvEsPKjFdffrKTgEyc0T4W3m58RsizAmapXr59Uthq8+PTFOkAv9R1PV/ZCzxay7Vx+QcekC4qOr40A==", + "dev": true, + "requires": { + "@material/base": "14.0.0-canary.261f2db59.0", + "@material/dom": "14.0.0-canary.261f2db59.0", + "@material/elevation": "14.0.0-canary.261f2db59.0", + "@material/feature-targeting": "14.0.0-canary.261f2db59.0", + "@material/list": "14.0.0-canary.261f2db59.0", + "@material/menu-surface": "14.0.0-canary.261f2db59.0", + "@material/ripple": "14.0.0-canary.261f2db59.0", + "@material/rtl": "14.0.0-canary.261f2db59.0", + "@material/theme": "14.0.0-canary.261f2db59.0", + "tslib": "^2.1.0" + } + }, + "@material/menu-surface": { + "version": "14.0.0-canary.261f2db59.0", + "resolved": "https://registry.npmjs.org/@material/menu-surface/-/menu-surface-14.0.0-canary.261f2db59.0.tgz", + "integrity": "sha512-zv/fv/W3zdSb+c/p6GNcOqA3+wAc/r8MOtV53WJPLlvZZSpGoTwHUp+GPiNeovfbsTSxN95XOXuVQBEfKEb8vA==", + "dev": true, + "requires": { + "@material/animation": "14.0.0-canary.261f2db59.0", + "@material/base": "14.0.0-canary.261f2db59.0", + "@material/elevation": "14.0.0-canary.261f2db59.0", + "@material/feature-targeting": "14.0.0-canary.261f2db59.0", + "@material/rtl": "14.0.0-canary.261f2db59.0", + "@material/shape": "14.0.0-canary.261f2db59.0", + "@material/theme": "14.0.0-canary.261f2db59.0", + "tslib": "^2.1.0" + } + }, + "@material/mwc-base": { + "version": "0.25.3", + "resolved": "https://registry.npmjs.org/@material/mwc-base/-/mwc-base-0.25.3.tgz", + "integrity": "sha512-4wvxZ9dhPr0O4jjOHPmFyn77pafe+h1gHPlT9sbQ+ly8NY/fSn/TXn7/PbxgL8g4ZHxMvD3o7PJopg+6cbHp8Q==", + "dev": true, + "requires": { + "@lit/reactive-element": "1.0.0-rc.4", + "@material/base": "=14.0.0-canary.261f2db59.0", + "@material/dom": "=14.0.0-canary.261f2db59.0", + "lit": "^2.0.0", + "tslib": "^2.0.1" + } + }, + "@material/mwc-button": { + "version": "0.25.3", + "resolved": "https://registry.npmjs.org/@material/mwc-button/-/mwc-button-0.25.3.tgz", + "integrity": "sha512-usHEKchj9hqetY7n0yebTz1Pk9Z+9W/sNZheFoSaiWQCv9XhtCdKkHH0MXTv8SpwxWuEKUf/XjtyvikGIcIn7w==", + "dev": true, + "requires": { + "@material/mwc-icon": "^0.25.3", + "@material/mwc-ripple": "^0.25.3", + "lit": "^2.0.0", + "tslib": "^2.0.1" + } + }, + "@material/mwc-checkbox": { + "version": "0.25.3", + "resolved": "https://registry.npmjs.org/@material/mwc-checkbox/-/mwc-checkbox-0.25.3.tgz", + "integrity": "sha512-PSh9IAgQK4XiDzBwgclheejkA4cbZ3K9V1JTTl/YVRDD/OLLM+Bh8tbnAg/1kGVlPWOUfDrYCcZ0gg472ca7gw==", + "dev": true, + "requires": { + "@material/mwc-base": "^0.25.3", + "@material/mwc-ripple": "^0.25.3", + "lit": "^2.0.0", + "tslib": "^2.0.1" + } + }, + "@material/mwc-floating-label": { + "version": "0.25.3", + "resolved": "https://registry.npmjs.org/@material/mwc-floating-label/-/mwc-floating-label-0.25.3.tgz", + "integrity": "sha512-3uFMi8Y680P0nzP5zih4YuOZJLl/C6Ux9G810Unwo44zblG/ckgJlFiM+T+oR+OH5KM8LbfNlV0ypo7FT5zYJA==", + "dev": true, + "requires": { + "@material/floating-label": "=14.0.0-canary.261f2db59.0", + "lit": "^2.0.0", + "tslib": "^2.0.1" + } + }, + "@material/mwc-icon": { + "version": "0.25.3", + "resolved": "https://registry.npmjs.org/@material/mwc-icon/-/mwc-icon-0.25.3.tgz", + "integrity": "sha512-36076AWZIRSr8qYOLjuDDkxej/HA0XAosrj7TS1ZeLlUBnLUtbDtvc1S7KSa0hqez7ouzOqGaWK24yoNnTa2OA==", + "dev": true, + "requires": { + "lit": "^2.0.0", + "tslib": "^2.0.1" + } + }, + "@material/mwc-icon-button": { + "version": "0.25.3", + "resolved": "https://registry.npmjs.org/@material/mwc-icon-button/-/mwc-icon-button-0.25.3.tgz", + "integrity": "sha512-FexkMpK3ZSHh7NF+PIqvVhvAbBOgFDYPck/lqnxIDC3VGJ0rjD/1MqevDy2fY6IcHGlc8Ai7VuYbdQ6Cvw8WcQ==", + "dev": true, + "requires": { + "@material/mwc-ripple": "^0.25.3", + "lit": "^2.0.0", + "tslib": "^2.0.1" + } + }, + "@material/mwc-line-ripple": { + "version": "0.25.3", + "resolved": "https://registry.npmjs.org/@material/mwc-line-ripple/-/mwc-line-ripple-0.25.3.tgz", + "integrity": "sha512-ANJzSyumb+shBVTIhqF1+YByPU/EpFXxI9CS26qThFqlUDpYXg5xcoZpkMSmZv3Wv/loF1rs2mJfFWOcC6nFnw==", + "dev": true, + "requires": { + "@material/line-ripple": "=14.0.0-canary.261f2db59.0", + "lit": "^2.0.0", + "tslib": "^2.0.1" + } + }, + "@material/mwc-linear-progress": { + "version": "0.25.3", + "resolved": "https://registry.npmjs.org/@material/mwc-linear-progress/-/mwc-linear-progress-0.25.3.tgz", + "integrity": "sha512-iAsM5zo78rYXXzwEg1RT0+jShxkUjOEUK0Yj6KxqxbXy1VKPTZ4HRB5Fy6wChWQi/Xl8wFlfI6nNAQtH7pakeA==", + "dev": true, + "requires": { + "@material/linear-progress": "=14.0.0-canary.261f2db59.0", + "@material/mwc-base": "^0.25.3", + "@material/theme": "=14.0.0-canary.261f2db59.0", + "lit": "^2.0.0", + "tslib": "^2.0.1" + } + }, + "@material/mwc-list": { + "version": "0.25.3", + "resolved": "https://registry.npmjs.org/@material/mwc-list/-/mwc-list-0.25.3.tgz", + "integrity": "sha512-2T297qVaQsKv+QDNP2ag9g04RLKO1tm2F6BwwqvdbXTsY+LKYOJe2/aSe0kX2tQLayX4ydy2RnTevo9Ld+c+4g==", + "dev": true, + "requires": { + "@material/base": "=14.0.0-canary.261f2db59.0", + "@material/dom": "=14.0.0-canary.261f2db59.0", + "@material/list": "=14.0.0-canary.261f2db59.0", + "@material/mwc-base": "^0.25.3", + "@material/mwc-checkbox": "^0.25.3", + "@material/mwc-radio": "^0.25.3", + "@material/mwc-ripple": "^0.25.3", + "lit": "^2.0.0", + "tslib": "^2.0.1" + } + }, + "@material/mwc-menu": { + "version": "0.25.3", + "resolved": "https://registry.npmjs.org/@material/mwc-menu/-/mwc-menu-0.25.3.tgz", + "integrity": "sha512-jr5R61BfqrJC0lsAI63y4BsEM2eY3n6kiCy2ZnwinmxrfFrS709T/zuSUUW/xG9b9inSku4WjjSkDhPzQrmS3g==", + "dev": true, + "requires": { + "@material/menu": "=14.0.0-canary.261f2db59.0", + "@material/menu-surface": "=14.0.0-canary.261f2db59.0", + "@material/mwc-base": "^0.25.3", + "@material/mwc-list": "^0.25.3", + "@material/shape": "=14.0.0-canary.261f2db59.0", + "@material/theme": "=14.0.0-canary.261f2db59.0", + "lit": "^2.0.0", + "tslib": "^2.0.1" + } + }, + "@material/mwc-notched-outline": { + "version": "0.25.3", + "resolved": "https://registry.npmjs.org/@material/mwc-notched-outline/-/mwc-notched-outline-0.25.3.tgz", + "integrity": "sha512-8jvU8GD0Pke+pfTQ0PdXpZmkU3XIHhMVY6AHM/2IQrXHkVZmAm9kbwL7ne3Ao+6f5n+DeXDGd+SG9U6ZZjD7gw==", + "dev": true, + "requires": { + "@material/mwc-base": "^0.25.3", + "@material/notched-outline": "=14.0.0-canary.261f2db59.0", + "lit": "^2.0.0", + "tslib": "^2.0.1" + } + }, + "@material/mwc-radio": { + "version": "0.25.3", + "resolved": "https://registry.npmjs.org/@material/mwc-radio/-/mwc-radio-0.25.3.tgz", + "integrity": "sha512-SXpVDrsQnz7+2w/kfBxcOJ4P+uJ0RxBd9mCLE7wVyN53gDLkNHqA0npdl2PNpRaaMavVrt27L8wWo5QIT+7zWA==", + "dev": true, + "requires": { + "@material/mwc-base": "^0.25.3", + "@material/mwc-ripple": "^0.25.3", + "@material/radio": "=14.0.0-canary.261f2db59.0", + "lit": "^2.0.0", + "tslib": "^2.0.1" + } + }, + "@material/mwc-ripple": { + "version": "0.25.3", + "resolved": "https://registry.npmjs.org/@material/mwc-ripple/-/mwc-ripple-0.25.3.tgz", + "integrity": "sha512-G/gt/csxgME6/sAku3GiuB0O2LLvoPWsRTLq/9iABpaGLJjqaKHvNg/IVzNDdF3YZT7EORgR9cBWWl7umA4i4Q==", + "dev": true, + "requires": { + "@material/dom": "=14.0.0-canary.261f2db59.0", + "@material/mwc-base": "^0.25.3", + "@material/ripple": "=14.0.0-canary.261f2db59.0", + "lit": "^2.0.0", + "tslib": "^2.0.1" + } + }, + "@material/mwc-textfield": { + "version": "0.25.3", + "resolved": "https://registry.npmjs.org/@material/mwc-textfield/-/mwc-textfield-0.25.3.tgz", + "integrity": "sha512-stpZ8sEyo2Mb9fG2XCoTc1Kom8oRXZiVI5rU88GtfcBU7nH0em8S4grq9X1mVfUG6Cfi1G/T+avCSIhzbYtr0w==", + "dev": true, + "requires": { + "@material/floating-label": "=14.0.0-canary.261f2db59.0", + "@material/line-ripple": "=14.0.0-canary.261f2db59.0", + "@material/mwc-base": "^0.25.3", + "@material/mwc-floating-label": "^0.25.3", + "@material/mwc-line-ripple": "^0.25.3", + "@material/mwc-notched-outline": "^0.25.3", + "@material/textfield": "=14.0.0-canary.261f2db59.0", + "lit": "^2.0.0", + "tslib": "^2.0.1" + } + }, + "@material/notched-outline": { + "version": "14.0.0-canary.261f2db59.0", + "resolved": "https://registry.npmjs.org/@material/notched-outline/-/notched-outline-14.0.0-canary.261f2db59.0.tgz", + "integrity": "sha512-gtn+IKAiX2rbfbX3a9aDlfUoKCEYrlAPOZifKXUaZ4UJYMNLzZuAqy7l5Ds30emtqUE22mySTEWqhzK6dePKsA==", + "dev": true, + "requires": { + "@material/base": "14.0.0-canary.261f2db59.0", + "@material/feature-targeting": "14.0.0-canary.261f2db59.0", + "@material/floating-label": "14.0.0-canary.261f2db59.0", + "@material/rtl": "14.0.0-canary.261f2db59.0", + "@material/shape": "14.0.0-canary.261f2db59.0", + "@material/theme": "14.0.0-canary.261f2db59.0", + "tslib": "^2.1.0" + } + }, + "@material/progress-indicator": { + "version": "14.0.0-canary.261f2db59.0", + "resolved": "https://registry.npmjs.org/@material/progress-indicator/-/progress-indicator-14.0.0-canary.261f2db59.0.tgz", + "integrity": "sha512-qm+zUMvFYhHuVB2OdgWTO/Dv1hMFEdIT3loX5OJMpvQ66l6rez/3F7blwHkm6W4mfuxRS3zdDdYbP5QdFcuHuA==", + "dev": true, + "requires": { + "tslib": "^2.1.0" + } + }, + "@material/radio": { + "version": "14.0.0-canary.261f2db59.0", + "resolved": "https://registry.npmjs.org/@material/radio/-/radio-14.0.0-canary.261f2db59.0.tgz", + "integrity": "sha512-AvrsOqhP8UZ5d58RWgaTmQVlWQRULwk2BXhsEhtxz56CmTsyVM49thNbaNnc/TzuY9Ssxv/L2wYVbR2B3BX9Yw==", + "dev": true, + "requires": { + "@material/animation": "14.0.0-canary.261f2db59.0", + "@material/base": "14.0.0-canary.261f2db59.0", + "@material/density": "14.0.0-canary.261f2db59.0", + "@material/dom": "14.0.0-canary.261f2db59.0", + "@material/feature-targeting": "14.0.0-canary.261f2db59.0", + "@material/ripple": "14.0.0-canary.261f2db59.0", + "@material/theme": "14.0.0-canary.261f2db59.0", + "@material/touch-target": "14.0.0-canary.261f2db59.0", + "tslib": "^2.1.0" + } + }, + "@material/ripple": { + "version": "14.0.0-canary.261f2db59.0", + "resolved": "https://registry.npmjs.org/@material/ripple/-/ripple-14.0.0-canary.261f2db59.0.tgz", + "integrity": "sha512-3FLCLj8X7KrFfuYBHJg1b7Odb3V/AW7fxk3m1i1zhDnygKmlQ/abVucH1s2qbX3Y+JIiq+5/C5407h9BFtOf+A==", + "dev": true, + "requires": { + "@material/animation": "14.0.0-canary.261f2db59.0", + "@material/base": "14.0.0-canary.261f2db59.0", + "@material/dom": "14.0.0-canary.261f2db59.0", + "@material/feature-targeting": "14.0.0-canary.261f2db59.0", + "@material/rtl": "14.0.0-canary.261f2db59.0", + "@material/theme": "14.0.0-canary.261f2db59.0", + "tslib": "^2.1.0" + } + }, + "@material/rtl": { + "version": "14.0.0-canary.261f2db59.0", + "resolved": "https://registry.npmjs.org/@material/rtl/-/rtl-14.0.0-canary.261f2db59.0.tgz", + "integrity": "sha512-bVnXBbUsHs57+EXdeFbcwaKy3lT/itI/qTLmJ88ar0qaGEujO1GmESHm3ioqkeo4kQpTfDhBwQGeEi1aDaTdFg==", + "dev": true, + "requires": { + "@material/theme": "14.0.0-canary.261f2db59.0", + "tslib": "^2.1.0" + } + }, + "@material/shape": { + "version": "14.0.0-canary.261f2db59.0", + "resolved": "https://registry.npmjs.org/@material/shape/-/shape-14.0.0-canary.261f2db59.0.tgz", + "integrity": "sha512-VjcQltd1uF9ugvLExMy00SMISjy/370o8lsZlb1T+xHyhXHL3UxeuWYLW5Amq6mbx65+c9Df9WmlXXOdebpEkw==", + "dev": true, + "requires": { + "@material/feature-targeting": "14.0.0-canary.261f2db59.0", + "@material/rtl": "14.0.0-canary.261f2db59.0", + "@material/theme": "14.0.0-canary.261f2db59.0", + "tslib": "^2.1.0" + } + }, + "@material/textfield": { + "version": "14.0.0-canary.261f2db59.0", + "resolved": "https://registry.npmjs.org/@material/textfield/-/textfield-14.0.0-canary.261f2db59.0.tgz", + "integrity": "sha512-KBPgpvvVFBfLx9nc6+wWOS2hJ40JVwh5KBjMoYbiOEFLf0O7SgCAVREHaFAXrPsC8AeTyUipx6TReONIGfMCPQ==", + "dev": true, + "requires": { + "@material/animation": "14.0.0-canary.261f2db59.0", + "@material/base": "14.0.0-canary.261f2db59.0", + "@material/density": "14.0.0-canary.261f2db59.0", + "@material/dom": "14.0.0-canary.261f2db59.0", + "@material/feature-targeting": "14.0.0-canary.261f2db59.0", + "@material/floating-label": "14.0.0-canary.261f2db59.0", + "@material/line-ripple": "14.0.0-canary.261f2db59.0", + "@material/notched-outline": "14.0.0-canary.261f2db59.0", + "@material/ripple": "14.0.0-canary.261f2db59.0", + "@material/rtl": "14.0.0-canary.261f2db59.0", + "@material/shape": "14.0.0-canary.261f2db59.0", + "@material/theme": "14.0.0-canary.261f2db59.0", + "@material/typography": "14.0.0-canary.261f2db59.0", + "tslib": "^2.1.0" + } + }, + "@material/theme": { + "version": "14.0.0-canary.261f2db59.0", + "resolved": "https://registry.npmjs.org/@material/theme/-/theme-14.0.0-canary.261f2db59.0.tgz", + "integrity": "sha512-bUqyFT0QF8Nxx02fekt3CXIfC9DEPOPdo2hjgdtvhrNP+vftbkI2tKZ5/uRUnVA+zqQAOyIl5z6FOMg4fyemCA==", + "dev": true, + "requires": { + "@material/feature-targeting": "14.0.0-canary.261f2db59.0", + "tslib": "^2.1.0" + } + }, + "@material/touch-target": { + "version": "14.0.0-canary.261f2db59.0", + "resolved": "https://registry.npmjs.org/@material/touch-target/-/touch-target-14.0.0-canary.261f2db59.0.tgz", + "integrity": "sha512-xA6TTHN7aOTXg/+c6mQJlogzTD+Sp8WPC5TK8RBXbQxEykGXGW15p+H9pG+rX/gzD5iehnHRBrDUFmAGoskhcQ==", + "dev": true, + "requires": { + "@material/base": "14.0.0-canary.261f2db59.0", + "@material/feature-targeting": "14.0.0-canary.261f2db59.0", + "@material/rtl": "14.0.0-canary.261f2db59.0", + "tslib": "^2.1.0" + } + }, + "@material/typography": { + "version": "14.0.0-canary.261f2db59.0", + "resolved": "https://registry.npmjs.org/@material/typography/-/typography-14.0.0-canary.261f2db59.0.tgz", + "integrity": "sha512-WOCdcNkD5KBRAwICcRqWBRG3cDkyrwK5USTNmG0oxnwnZAN7daOpPTdLppVAhadE7faj8d67ON+V9pH7+T62FQ==", + "dev": true, + "requires": { + "@material/feature-targeting": "14.0.0-canary.261f2db59.0", + "@material/theme": "14.0.0-canary.261f2db59.0", + "tslib": "^2.1.0" + } + }, + "@tootallnate/once": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz", + "integrity": "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==", + "dev": true + }, + "@types/codemirror": { + "version": "5.60.5", + "resolved": "https://registry.npmjs.org/@types/codemirror/-/codemirror-5.60.5.tgz", + "integrity": "sha512-TiECZmm8St5YxjFUp64LK0c8WU5bxMDt9YaAek1UqUb9swrSCoJhh92fWu1p3mTEqlHjhB5sY7OFBhWroJXZVg==", + "dev": true, + "requires": { + "@types/tern": "*" + } + }, + "@types/estree": { + "version": "0.0.51", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.51.tgz", + "integrity": "sha512-CuPgU6f3eT/XgKKPqKd/gLZV1Xmvf1a2R5POBOGQa6uv82xpls89HU5zKeVoyR8XzHd1RGNOlQlvUe3CFkjWNQ==", + "dev": true + }, + "@types/glob": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.2.0.tgz", + "integrity": "sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA==", + "dev": true, + "requires": { + "@types/minimatch": "*", + "@types/node": "*" + } + }, + "@types/minimatch": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.5.tgz", + "integrity": "sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ==", + "dev": true + }, + "@types/mocha": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-9.1.0.tgz", + "integrity": "sha512-QCWHkbMv4Y5U9oW10Uxbr45qMMSzl4OzijsozynUAgx3kEHUdXB00udx2dWDQ7f2TU2a2uuiFaRZjCe3unPpeg==", + "dev": true + }, + "@types/node": { + "version": "14.18.12", + "resolved": "https://registry.npmjs.org/@types/node/-/node-14.18.12.tgz", + "integrity": "sha512-q4jlIR71hUpWTnGhXWcakgkZeHa3CCjcQcnuzU8M891BAWA2jHiziiWEPEkdS5pFsz7H9HJiy8BrK7tBRNrY7A==", + "dev": true + }, + "@types/tern": { + "version": "0.23.4", + "resolved": "https://registry.npmjs.org/@types/tern/-/tern-0.23.4.tgz", + "integrity": "sha512-JAUw1iXGO1qaWwEOzxTKJZ/5JxVeON9kvGZ/osgZaJImBnyjyn0cjovPsf6FNLmyGY8Vw9DoXZCMlfMkMwHRWg==", + "dev": true, + "requires": { + "@types/estree": "*" + } + }, + "@types/trusted-types": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@types/trusted-types/-/trusted-types-2.0.2.tgz", + "integrity": "sha512-F5DIZ36YVLE+PN+Zwws4kJogq47hNgX3Nx6WyDJ3kcplxyke3XIzB8uK5n/Lpm1HBsbGzd6nmGehL8cPekP+Tg==", + "dev": true + }, + "@types/vscode": { + "version": "1.65.0", + "resolved": "https://registry.npmjs.org/@types/vscode/-/vscode-1.65.0.tgz", + "integrity": "sha512-wQhExnh2nEzpjDMSKhUvnNmz3ucpd3E+R7wJkOhBNK3No6fG3VUdmVmMOKD0A8NDZDDDiQcLNxe3oGmX5SjJ5w==", + "dev": true + }, + "@ungap/promise-all-settled": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@ungap/promise-all-settled/-/promise-all-settled-1.1.2.tgz", + "integrity": "sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q==", + "dev": true + }, + "@vscode/test-electron": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/@vscode/test-electron/-/test-electron-2.1.3.tgz", + "integrity": "sha512-ps/yJ/9ToUZtR1dHfWi1mDXtep1VoyyrmGKC3UnIbScToRQvbUjyy1VMqnMEW3EpMmC3g7+pyThIPtPyCLHyow==", + "dev": true, + "requires": { + "http-proxy-agent": "^4.0.1", + "https-proxy-agent": "^5.0.0", + "rimraf": "^3.0.2", + "unzipper": "^0.10.11" + } + }, + "agent-base": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", + "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", + "dev": true, + "requires": { + "debug": "4" + } + }, + "ansi-colors": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", + "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", + "dev": true + }, + "ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true + }, + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "anymatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", + "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", + "dev": true, + "requires": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + } + }, + "argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true + }, + "balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true + }, + "big-integer": { + "version": "1.6.51", + "resolved": "https://registry.npmjs.org/big-integer/-/big-integer-1.6.51.tgz", + "integrity": "sha512-GPEid2Y9QU1Exl1rpO9B2IPJGHPSupF5GnVIP0blYvNOMer2bTvSWs1jGOUg04hTmu67nmLsQ9TBo1puaotBHg==", + "dev": true + }, + "binary": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/binary/-/binary-0.3.0.tgz", + "integrity": "sha1-n2BVO8XOjDOG87VTz/R0Yq3sqnk=", + "dev": true, + "requires": { + "buffers": "~0.1.1", + "chainsaw": "~0.1.0" + } + }, + "binary-extensions": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", + "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", + "dev": true + }, + "bluebird": { + "version": "3.4.7", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.4.7.tgz", + "integrity": "sha1-9y12C+Cbf3bQjtj66Ysomo0F+rM=", + "dev": true + }, + "brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, + "requires": { + "fill-range": "^7.0.1" + } + }, + "browser-stdout": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", + "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==", + "dev": true + }, + "buffer-indexof-polyfill": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/buffer-indexof-polyfill/-/buffer-indexof-polyfill-1.0.2.tgz", + "integrity": "sha512-I7wzHwA3t1/lwXQh+A5PbNvJxgfo5r3xulgpYDB5zckTu/Z9oUK9biouBKQUjEqzaz3HnAT6TYoovmE+GqSf7A==", + "dev": true + }, + "buffers": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/buffers/-/buffers-0.1.1.tgz", + "integrity": "sha1-skV5w77U1tOWru5tmorn9Ugqt7s=", + "dev": true + }, + "camelcase": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", + "dev": true + }, + "chainsaw": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/chainsaw/-/chainsaw-0.1.0.tgz", + "integrity": "sha1-XqtQsor+WAdNDVgpE4iCi15fvJg=", + "dev": true, + "requires": { + "traverse": ">=0.3.0 <0.4" + } + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "dependencies": { + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "chokidar": { + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", + "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", + "dev": true, + "requires": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "fsevents": "~2.3.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + } + }, + "cliui": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", + "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", + "dev": true, + "requires": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "comlink": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/comlink/-/comlink-4.3.1.tgz", + "integrity": "sha512-+YbhUdNrpBZggBAHWcgQMLPLH1KDF3wJpeqrCKieWQ8RL7atmgsgTQko1XEBK6PsecfopWNntopJ+ByYG1lRaA==", + "dev": true + }, + "concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", + "dev": true + }, + "core-util-is": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", + "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", + "dev": true + }, + "debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "requires": { + "ms": "2.1.2" + } + }, + "decamelize": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-4.0.0.tgz", + "integrity": "sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==", + "dev": true + }, + "diff": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/diff/-/diff-5.0.0.tgz", + "integrity": "sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==", + "dev": true + }, + "duplexer2": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.1.4.tgz", + "integrity": "sha1-ixLauHjA1p4+eJEFFmKjL8a93ME=", + "dev": true, + "requires": { + "readable-stream": "^2.0.2" + } + }, + "emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "dev": true + }, + "escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true + }, + "fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dev": true, + "requires": { + "to-regex-range": "^5.0.1" + } + }, + "find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, + "requires": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + } + }, + "flat": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", + "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", + "dev": true + }, + "fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", + "dev": true + }, + "fsevents": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "dev": true, + "optional": true + }, + "fstream": { + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/fstream/-/fstream-1.0.12.tgz", + "integrity": "sha512-WvJ193OHa0GHPEL+AycEJgxvBEwyfRkN1vhjca23OaPVMCaLCXTd5qAu82AjTcgP1UJmytkOKb63Ypde7raDIg==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "inherits": "~2.0.0", + "mkdirp": ">=0.5 0", + "rimraf": "2" + }, + "dependencies": { + "rimraf": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "dev": true, + "requires": { + "glob": "^7.1.3" + } + } + } + }, + "fuse.js": { + "version": "6.5.3", + "resolved": "https://registry.npmjs.org/fuse.js/-/fuse.js-6.5.3.tgz", + "integrity": "sha512-sA5etGE7yD/pOqivZRBvUBd/NaL2sjAu6QuSaFoe1H2BrJSkH/T/UXAJ8CdXdw7DvY3Hs8CXKYkDWX7RiP5KOg==", + "dev": true + }, + "get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "dev": true + }, + "glob": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", + "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "requires": { + "is-glob": "^4.0.1" + } + }, + "graceful-fs": { + "version": "4.2.9", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.9.tgz", + "integrity": "sha512-NtNxqUcXgpW2iMrfqSfR73Glt39K+BLwWsPs94yR63v45T0Wbej7eRmL5cWfwEgqXnmjQp3zaJTshdRW/qC2ZQ==", + "dev": true + }, + "growl": { + "version": "1.10.5", + "resolved": "https://registry.npmjs.org/growl/-/growl-1.10.5.tgz", + "integrity": "sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==", + "dev": true + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "he": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", + "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", + "dev": true + }, + "http-proxy-agent": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz", + "integrity": "sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==", + "dev": true, + "requires": { + "@tootallnate/once": "1", + "agent-base": "6", + "debug": "4" + } + }, + "https-proxy-agent": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz", + "integrity": "sha512-EkYm5BcKUGiduxzSt3Eppko+PiNWNEpa4ySk9vTC6wDsQJW9rHSa+UhGNJoRYp7bz6Ht1eaRIa6QaJqO5rCFbA==", + "dev": true, + "requires": { + "agent-base": "6", + "debug": "4" + } + }, + "inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "dev": true, + "requires": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true + }, + "is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dev": true, + "requires": { + "binary-extensions": "^2.0.0" + } + }, + "is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true + }, + "is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "requires": { + "is-extglob": "^2.1.1" + } + }, + "is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true + }, + "is-plain-obj": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", + "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", + "dev": true + }, + "is-unicode-supported": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", + "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", + "dev": true + }, + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "dev": true + }, + "isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", + "dev": true + }, + "js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, + "requires": { + "argparse": "^2.0.1" + } + }, + "listenercount": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/listenercount/-/listenercount-1.0.1.tgz", + "integrity": "sha1-hMinKrWcRyUyFIDJdeZQg0LnCTc=", + "dev": true + }, + "lit": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/lit/-/lit-2.2.1.tgz", + "integrity": "sha512-dSe++R50JqrvNGXmI9OE13de1z5U/Y3J2dTm/9GC86vedI8ILoR8ZGnxfThFpvQ9m0lR0qRnIR4IiKj/jDCfYw==", + "dev": true, + "requires": { + "@lit/reactive-element": "^1.3.0", + "lit-element": "^3.2.0", + "lit-html": "^2.2.0" + }, + "dependencies": { + "@lit/reactive-element": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/@lit/reactive-element/-/reactive-element-1.3.1.tgz", + "integrity": "sha512-nOJARIr3pReqK3hfFCSW2Zg/kFcFsSAlIE7z4a0C9D2dPrgD/YSn3ZP2ET/rxKB65SXyG7jJbkynBRm+tGlacw==", + "dev": true + } + } + }, + "lit-element": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/lit-element/-/lit-element-3.2.0.tgz", + "integrity": "sha512-HbE7yt2SnUtg5DCrWt028oaU4D5F4k/1cntAFHTkzY8ZIa8N0Wmu92PxSxucsQSOXlODFrICkQ5x/tEshKi13g==", + "dev": true, + "requires": { + "@lit/reactive-element": "^1.3.0", + "lit-html": "^2.2.0" + }, + "dependencies": { + "@lit/reactive-element": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/@lit/reactive-element/-/reactive-element-1.3.1.tgz", + "integrity": "sha512-nOJARIr3pReqK3hfFCSW2Zg/kFcFsSAlIE7z4a0C9D2dPrgD/YSn3ZP2ET/rxKB65SXyG7jJbkynBRm+tGlacw==", + "dev": true + } + } + }, + "lit-html": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/lit-html/-/lit-html-2.2.1.tgz", + "integrity": "sha512-AiJ/Rs0awjICs2FioTnHSh+Np5dhYSkyRczKy3wKjp8qjLhr1Ov+GiHrUQNdX8ou1LMuznpIME990AZsa/tR8g==", + "dev": true, + "requires": { + "@types/trusted-types": "^2.0.2" + } + }, + "locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, + "requires": { + "p-locate": "^5.0.0" + } + }, + "log-symbols": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", + "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", + "dev": true, + "requires": { + "chalk": "^4.1.0", + "is-unicode-supported": "^0.1.0" + } + }, + "minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "minimist": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz", + "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==", + "dev": true + }, + "mkdirp": { + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", + "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", + "dev": true, + "requires": { + "minimist": "^1.2.6" + } + }, + "mocha": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/mocha/-/mocha-9.2.2.tgz", + "integrity": "sha512-L6XC3EdwT6YrIk0yXpavvLkn8h+EU+Y5UcCHKECyMbdUIxyMuZj4bX4U9e1nvnvUUvQVsV2VHQr5zLdcUkhW/g==", + "dev": true, + "requires": { + "@ungap/promise-all-settled": "1.1.2", + "ansi-colors": "4.1.1", + "browser-stdout": "1.3.1", + "chokidar": "3.5.3", + "debug": "4.3.3", + "diff": "5.0.0", + "escape-string-regexp": "4.0.0", + "find-up": "5.0.0", + "glob": "7.2.0", + "growl": "1.10.5", + "he": "1.2.0", + "js-yaml": "4.1.0", + "log-symbols": "4.1.0", + "minimatch": "4.2.1", + "ms": "2.1.3", + "nanoid": "3.3.1", + "serialize-javascript": "6.0.0", + "strip-json-comments": "3.1.1", + "supports-color": "8.1.1", + "which": "2.0.2", + "workerpool": "6.2.0", + "yargs": "16.2.0", + "yargs-parser": "20.2.4", + "yargs-unparser": "2.0.0" + }, + "dependencies": { + "debug": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", + "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", + "dev": true, + "requires": { + "ms": "2.1.2" + }, + "dependencies": { + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + } + } + }, + "minimatch": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-4.2.1.tgz", + "integrity": "sha512-9Uq1ChtSZO+Mxa/CL1eGizn2vRn3MlLgzhT0Iz8zaY8NdvxvB0d5QdPFmCKf7JKA9Lerx5vRrnwO03jsSfGG9g==", + "dev": true, + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true + } + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "nanoid": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.1.tgz", + "integrity": "sha512-n6Vs/3KGyxPQd6uO0eH4Bv0ojGSUvuLlIHtC3Y0kEO23YRge8H9x1GCzLn28YX0H66pMkxuaeESFq4tKISKwdw==", + "dev": true + }, + "normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true + }, + "once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "dev": true, + "requires": { + "wrappy": "1" + } + }, + "p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "requires": { + "yocto-queue": "^0.1.0" + } + }, + "p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, + "requires": { + "p-limit": "^3.0.2" + } + }, + "path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true + }, + "path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", + "dev": true + }, + "picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true + }, + "playground-elements": { + "version": "0.15.2", + "resolved": "https://registry.npmjs.org/playground-elements/-/playground-elements-0.15.2.tgz", + "integrity": "sha512-XL4MnTIVa/dCWvqAtDgZM9KOyvQtZaas4CEUXrZZmhzFRMRMAe572VBtjpHdulFvn51rJvJsxXcJaTp03RhMBQ==", + "dev": true, + "requires": { + "@material/mwc-button": "^0.25.1", + "@material/mwc-icon-button": "^0.25.1", + "@material/mwc-linear-progress": "^0.25.1", + "@material/mwc-list": "^0.25.1", + "@material/mwc-menu": "^0.25.1", + "@material/mwc-textfield": "^0.25.1", + "@types/codemirror": "^5.60.0", + "comlink": "=4.3.1", + "fuse.js": "^6.4.6", + "lit": "^2.0.0", + "tslib": "^2.0.3", + "vscode-languageserver": "^7.0.0" + } + }, + "process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", + "dev": true + }, + "randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "dev": true, + "requires": { + "safe-buffer": "^5.1.0" + } + }, + "readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "dev": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + }, + "dependencies": { + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + } + } + }, + "readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dev": true, + "requires": { + "picomatch": "^2.2.1" + } + }, + "require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", + "dev": true + }, + "rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dev": true, + "requires": { + "glob": "^7.1.3" + } + }, + "safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true + }, + "serialize-javascript": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz", + "integrity": "sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==", + "dev": true, + "requires": { + "randombytes": "^2.1.0" + } + }, + "setimmediate": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", + "integrity": "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=", + "dev": true + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "requires": { + "safe-buffer": "~5.1.0" + }, + "dependencies": { + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + } + } + }, + "string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + } + }, + "strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "requires": { + "ansi-regex": "^5.0.1" + } + }, + "strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true + }, + "supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + }, + "to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "requires": { + "is-number": "^7.0.0" + } + }, + "traverse": { + "version": "0.3.9", + "resolved": "https://registry.npmjs.org/traverse/-/traverse-0.3.9.tgz", + "integrity": "sha1-cXuPIgzAu3tE5AUUwisui7xw2Lk=", + "dev": true + }, + "tslib": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.1.tgz", + "integrity": "sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw==", + "dev": true + }, + "typescript": { + "version": "4.6.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.6.3.tgz", + "integrity": "sha512-yNIatDa5iaofVozS/uQJEl3JRWLKKGJKh6Yaiv0GLGSuhpFJe7P3SbHZ8/yjAHRQwKRoA6YZqlfjXWmVzoVSMw==", + "dev": true + }, + "unzipper": { + "version": "0.10.11", + "resolved": "https://registry.npmjs.org/unzipper/-/unzipper-0.10.11.tgz", + "integrity": "sha512-+BrAq2oFqWod5IESRjL3S8baohbevGcVA+teAIOYWM3pDVdseogqbzhhvvmiyQrUNKFUnDMtELW3X8ykbyDCJw==", + "dev": true, + "requires": { + "big-integer": "^1.6.17", + "binary": "~0.3.0", + "bluebird": "~3.4.1", + "buffer-indexof-polyfill": "~1.0.0", + "duplexer2": "~0.1.4", + "fstream": "^1.0.12", + "graceful-fs": "^4.2.2", + "listenercount": "~1.0.1", + "readable-stream": "~2.3.6", + "setimmediate": "~1.0.4" + } + }, + "util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", + "dev": true + }, + "vscode-jsonrpc": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/vscode-jsonrpc/-/vscode-jsonrpc-6.0.0.tgz", + "integrity": "sha512-wnJA4BnEjOSyFMvjZdpiOwhSq9uDoK8e/kpRJDTaMYzwlkrhG1fwDIZI94CLsLzlCK5cIbMMtFlJlfR57Lavmg==", + "dev": true + }, + "vscode-languageserver": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/vscode-languageserver/-/vscode-languageserver-7.0.0.tgz", + "integrity": "sha512-60HTx5ID+fLRcgdHfmz0LDZAXYEV68fzwG0JWwEPBode9NuMYTIxuYXPg4ngO8i8+Ou0lM7y6GzaYWbiDL0drw==", + "dev": true, + "requires": { + "vscode-languageserver-protocol": "3.16.0" + } + }, + "vscode-languageserver-protocol": { + "version": "3.16.0", + "resolved": "https://registry.npmjs.org/vscode-languageserver-protocol/-/vscode-languageserver-protocol-3.16.0.tgz", + "integrity": "sha512-sdeUoAawceQdgIfTI+sdcwkiK2KU+2cbEYA0agzM2uqaUy2UpnnGHtWTHVEtS0ES4zHU0eMFRGN+oQgDxlD66A==", + "dev": true, + "requires": { + "vscode-jsonrpc": "6.0.0", + "vscode-languageserver-types": "3.16.0" + } + }, + "vscode-languageserver-types": { + "version": "3.16.0", + "resolved": "https://registry.npmjs.org/vscode-languageserver-types/-/vscode-languageserver-types-3.16.0.tgz", + "integrity": "sha512-k8luDIWJWyenLc5ToFQQMaSrqCHiLwyKPHKPQZ5zz21vM+vIVUSvsRpcbiECH4WR88K2XZqc4ScRcZ7nk/jbeA==", + "dev": true + }, + "which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "requires": { + "isexe": "^2.0.0" + } + }, + "workerpool": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.2.0.tgz", + "integrity": "sha512-Rsk5qQHJ9eowMH28Jwhe8HEbmdYDX4lwoMWshiCXugjtHqMD9ZbiqSDLxcsfdqsETPzVUtX5s1Z5kStiIM6l4A==", + "dev": true + }, + "wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "requires": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + } + }, + "wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", + "dev": true + }, + "y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "dev": true + }, + "yargs": { + "version": "16.2.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", + "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", + "dev": true, + "requires": { + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.0", + "y18n": "^5.0.5", + "yargs-parser": "^20.2.2" + } + }, + "yargs-parser": { + "version": "20.2.4", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.4.tgz", + "integrity": "sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==", + "dev": true + }, + "yargs-unparser": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-2.0.0.tgz", + "integrity": "sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==", + "dev": true, + "requires": { + "camelcase": "^6.0.0", + "decamelize": "^4.0.0", + "flat": "^5.0.2", + "is-plain-obj": "^2.1.0" + } + }, + "yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "dev": true + } + } +} diff --git a/packages/lit-dev-tutorial-plugin/package.json b/packages/lit-dev-tutorial-plugin/package.json new file mode 100644 index 000000000..405c3d0dd --- /dev/null +++ b/packages/lit-dev-tutorial-plugin/package.json @@ -0,0 +1,175 @@ +{ + "name": "lit-dev-tutorial-editor", + "private": true, + "displayName": "lit.dev Tutorial Editor", + "description": "Helps you create tutorials for lit.dev", + "version": "0.0.1", + "author": "Google LLC", + "license": "BSD-3-Clause", + "type": "module", + "main": "./out/extension.js", + "engines": { + "vscode": "^1.65.0" + }, + "categories": [ + "Other" + ], + "activationEvents": [ + "onView:litDevTutorial" + ], + "contributes": { + "views": { + "litDevTutorial": [ + { + "id": "litDevTutorial", + "name": "lit.dev Tutorial Editor" + } + ] + }, + "viewsContainers": { + "activitybar": [ + { + "id": "litDevTutorial", + "title": "lit.dev Tutorial Editor", + "icon": "$(flame)" + } + ] + }, + "menus": { + "view/title": [ + { + "command": "litDevTutorial.refreshEntry", + "when": "view == litDevTutorial", + "group": "navigation" + }, + { + "command": "litDevTutorial.createTutorial", + "when": "view == litDevTutorial", + "group": "navigation" + } + ], + "view/item/context": [ + { + "command": "litDevTutorial.refreshEntry", + "when": "view == litDevTutorial", + "group": "navigation" + }, + { + "command": "litDevTutorial.createTutorial", + "when": "view == litDevTutorial", + "group": "tutorials" + }, + { + "command": "litDevTutorial.delete", + "when": "view == litDevTutorial && viewItem == tutorial || viewItem =~ /^tutorial-step/ || viewItem =~ /^generic-file.*-deletable/ || viewItem == playground-file || viewItem == afterDir", + "group": "files" + }, + { + "command": "litDevTutorial.addStep", + "when": "view == litDevTutorial && viewItem == tutorial", + "group": "inline" + }, + { + "command": "litDevTutorial.addAfterStep", + "when": "view == litDevTutorial && viewItem =~ /^tutorial-step.*-add/", + "group": "inline" + }, + { + "command": "litDevTutorial.moveStepUp", + "when": "view == litDevTutorial && viewItem =~ /^tutorial-step.*-up/", + "group": "inline" + }, + { + "command": "litDevTutorial.moveStepDown", + "when": "view == litDevTutorial && viewItem =~ /^tutorial-step.*-down/", + "group": "inline" + }, + { + "command": "litDevTutorial.createPlaygroundFile", + "when": "view == litDevTutorial && viewItem == beforeDir || viewItem == afterDir", + "group": "inline" + }, + { + "command": "litDevTutorial.revealInSidebar", + "when": "view == litDevTutorial && viewItem =~ /^generic-file/ || viewItem == playground-file", + "group": "navigation" + }, + { + "command": "litDevTutorial.renameStep", + "when": "view == litDevTutorial && viewItem =~ /^tutorial-step/", + "group": "files" + } + ] + }, + "commands": [ + { + "command": "litDevTutorial.createTutorial", + "title": "Create Tutorial", + "icon": "$(add)" + }, + { + "command": "litDevTutorial.refreshEntry", + "title": "Refresh", + "icon": "$(refresh)" + }, + { + "command": "litDevTutorial.delete", + "title": "Delete", + "icon": "$(trash)" + }, + { + "command": "litDevTutorial.addStep", + "title": "Add Step", + "icon": "$(add)" + }, + { + "command": "litDevTutorial.addAfterStep", + "title": "Add Step", + "icon": "$(plus)" + }, + { + "command": "litDevTutorial.moveStepUp", + "title": "Move Step Up", + "icon": "$(arrow-up)" + }, + { + "command": "litDevTutorial.moveStepDown", + "title": "Move Step Down", + "icon": "$(arrow-down)" + }, + { + "command": "litDevTutorial.createPlaygroundFile", + "title": "Create File", + "icon": "$(plus)" + }, + { + "command": "litDevTutorial.revealInSidebar", + "title": "Reveal in Sidebar", + "icon": "$(go-to-file)" + }, + { + "command": "litDevTutorial.renameStep", + "title": "Rename", + "icon": "$(edit)" + } + ] + }, + "scripts": { + "vscode:prepublish": "npm run build", + "build": "tsc -p ./", + "watch": "tsc -watch -p ./", + "pretest": "npm run build", + "test": "node ./out/test/runTest.js" + }, + "devDependencies": { + "@types/glob": "^7.2.0", + "@types/mocha": "^9.1.0", + "@types/node": "14.x", + "@types/vscode": "^1.65.0", + "@vscode/test-electron": "^2.1.2", + "glob": "^7.2.0", + "mocha": "^9.2.1", + "playground-elements": "^0.15.2", + "typescript": "^4.5.5" + } +} diff --git a/packages/lit-dev-tutorial-plugin/src/extension.ts b/packages/lit-dev-tutorial-plugin/src/extension.ts new file mode 100644 index 000000000..ecdebf8dc --- /dev/null +++ b/packages/lit-dev-tutorial-plugin/src/extension.ts @@ -0,0 +1,66 @@ +/** + * @license + * Copyright 2022 Google LLC + * SPDX-License-Identifier: BSD-3-Clause + */ + +import * as vscode from 'vscode'; +import { BeforeAfterDir } from './tree-items/before-after-dir.js'; +import { GenericFile } from './tree-items/generic-file.js'; +import { PlaygroundFile } from './tree-items/playground-file.js'; +import { TutorialStep } from './tree-items/tutorial-step.js'; +import { Tutorial } from './tree-items/tutorial.js'; +import {LitDevTutorialTreeProvider, TutorialTreeItem} from './tree-provider.js'; + +export async function activate(context: vscode.ExtensionContext) { + const rootPath = + vscode.workspace.workspaceFolders && vscode.workspace.workspaceFolders.length > 0 + ? vscode.workspace.workspaceFolders[0].uri.fsPath + : undefined; + + if (!rootPath) { + return; + } + + const provider = new LitDevTutorialTreeProvider(); + vscode.window.createTreeView('litDevTutorial', { + canSelectMany: true, + showCollapseAll: true, + treeDataProvider: provider, + }); + + vscode.window.registerTreeDataProvider('litDevTutorial', provider); + vscode.commands.registerCommand('litDevTutorial.refreshEntry', () => { + provider.refresh(); + }); + vscode.commands.registerCommand('litDevTutorial.createTutorial', () => { + provider.createTutorial(); + }); + vscode.commands.registerCommand('litDevTutorial.addStep', (tutorial: Tutorial) => { + TutorialStep.create(tutorial); + }); + vscode.commands.registerCommand('litDevTutorial.moveStepUp', (step: TutorialStep) => { + step.moveUp(); + }); + vscode.commands.registerCommand('litDevTutorial.moveStepDown', (step: TutorialStep) => { + step.moveDown(); + }); + vscode.commands.registerCommand('litDevTutorial.addAfterStep', (step: TutorialStep) => { + BeforeAfterDir.create(step, 'after'); + }); + vscode.commands.registerCommand('litDevTutorial.delete', (item: TutorialTreeItem) => { + item.delete(); + }); + vscode.commands.registerCommand('litDevTutorial.createPlaygroundFile', (dir: BeforeAfterDir) => { + PlaygroundFile.create(dir); + }); + vscode.commands.registerCommand('litDevTutorial.revealInSidebar', (item: GenericFile | PlaygroundFile) => { + item.revealInSidebar(); + }); + vscode.commands.registerCommand('litDevTutorial.renameStep', (item: TutorialStep) => { + item.rename(); + }); +} + +// this method is called when your extension is deactivated +export function deactivate() {} diff --git a/packages/lit-dev-tutorial-plugin/src/fs-helpers.ts b/packages/lit-dev-tutorial-plugin/src/fs-helpers.ts new file mode 100644 index 000000000..43fe0c696 --- /dev/null +++ b/packages/lit-dev-tutorial-plugin/src/fs-helpers.ts @@ -0,0 +1,108 @@ +/** + * @license + * Copyright 2022 Google LLC + * SPDX-License-Identifier: BSD-3-Clause + */ + +import * as vscode from 'vscode'; +import * as fs from 'fs'; +import {TutorialCategory} from './types'; + +const pathExists = (p: string): boolean => { + try { + fs.accessSync(p); + } catch (err) { + return false; + } + return true; +}; + +export const getJson = (packageJsonPath: string): T | null => { + if (pathExists(packageJsonPath)) { + const packageJson = JSON.parse(fs.readFileSync(packageJsonPath, 'utf-8')); + return packageJson; + } else { + return null; + } +}; + +export const addTutorialTo11tyData = ( + dirname: string, + category: TutorialCategory, + filepath: string +) => { + const lines = fs.readFileSync(filepath, 'utf8').split('\n'); + let arrayStartLine = -1; + let arrayEndLine = -1; + let categoryLines: {cat: TutorialCategory; line: number}[] = []; + + for (const [i, line] of lines.entries()) { + if (line.includes(`const tutorials = await Promise.all([`)) { + arrayStartLine = i; + } else if (line.includes(` ]);`)) { + arrayEndLine = i; + break; + } else if ( + line.includes('// ') && + arrayStartLine !== -1 && + i > arrayStartLine && + arrayEndLine === -1 + ) { + const cat = line.split('// ')[1].trim() as TutorialCategory; + categoryLines.push({cat, line: i}); + } + } + + if (arrayStartLine === -1 || arrayEndLine === -1) { + vscode.window.showErrorMessage('Malformed tutorials.11tydata.js'); + return; + } + + let line = -1; + let categoryIndex = -1; + + for (const [i, {cat, line: lineNum}] of categoryLines.entries()) { + if (cat === category) { + line = lineNum; + categoryIndex = i; + break; + } + } + + if (line === -1) { + vscode.window.showErrorMessage( + 'Cannot find category ${category} in tutorials.11tydata.js' + ); + return; + } + + let insertionLine = -1; + const isLastCategory = categoryIndex === categoryLines.length - 1; + + if (isLastCategory) { + insertionLine = arrayEndLine; + } else { + insertionLine = categoryLines[categoryIndex + 1].line - 1; + } + + const newLine = ` loadTutorialData('${dirname}'),`; + + lines.splice(insertionLine, 0, newLine); + + fs.writeFileSync(filepath, lines.join('\n')); +}; + +export const removeTutorialFrom11tyData = ( + dirname: string, + filepath: string +) => { + const lines = fs.readFileSync(filepath, 'utf8').split('\n'); + const index = lines.findIndex((line) => + line.includes(`loadTutorialData('${dirname}')`) + ); + lines.splice(index, 1); + if (index === -1) { + return; + } + fs.writeFileSync(filepath, lines.join('\n')); +}; diff --git a/packages/lit-dev-tutorial-plugin/src/test/runTest.ts b/packages/lit-dev-tutorial-plugin/src/test/runTest.ts new file mode 100644 index 000000000..72d334a3e --- /dev/null +++ b/packages/lit-dev-tutorial-plugin/src/test/runTest.ts @@ -0,0 +1,29 @@ +/** + * @license + * Copyright 2022 Google LLC + * SPDX-License-Identifier: BSD-3-Clause + */ + +import * as path from 'path'; + +import { runTests } from '@vscode/test-electron'; + +async function main() { + try { + // The folder containing the Extension Manifest package.json + // Passed to `--extensionDevelopmentPath` + const extensionDevelopmentPath = path.resolve(__dirname, '../../'); + + // The path to test runner + // Passed to --extensionTestsPath + const extensionTestsPath = path.resolve(__dirname, './suite/index'); + + // Download VS Code, unzip it and run the integration test + await runTests({ extensionDevelopmentPath, extensionTestsPath }); + } catch (err) { + console.error('Failed to run tests'); + process.exit(1); + } +} + +main(); diff --git a/packages/lit-dev-tutorial-plugin/src/test/suite/extension.test.ts b/packages/lit-dev-tutorial-plugin/src/test/suite/extension.test.ts new file mode 100644 index 000000000..04d742fa2 --- /dev/null +++ b/packages/lit-dev-tutorial-plugin/src/test/suite/extension.test.ts @@ -0,0 +1,21 @@ +/** + * @license + * Copyright 2022 Google LLC + * SPDX-License-Identifier: BSD-3-Clause + */ + +import * as assert from 'assert'; + +// You can import and use all API from the 'vscode' module +// as well as import your extension to test it +import * as vscode from 'vscode'; +// import * as myExtension from '../../extension'; + +suite('Extension Test Suite', () => { + vscode.window.showInformationMessage('Start all tests.'); + + test('Sample test', () => { + assert.strictEqual(-1, [1, 2, 3].indexOf(5)); + assert.strictEqual(-1, [1, 2, 3].indexOf(0)); + }); +}); diff --git a/packages/lit-dev-tutorial-plugin/src/test/suite/index.ts b/packages/lit-dev-tutorial-plugin/src/test/suite/index.ts new file mode 100644 index 000000000..603706340 --- /dev/null +++ b/packages/lit-dev-tutorial-plugin/src/test/suite/index.ts @@ -0,0 +1,44 @@ +/** + * @license + * Copyright 2022 Google LLC + * SPDX-License-Identifier: BSD-3-Clause + */ + +import * as path from 'path'; +import * as Mocha from 'mocha'; +import * as glob from 'glob'; + +export function run(): Promise { + // Create the mocha test + const mocha = new Mocha({ + ui: 'tdd', + color: true + }); + + const testsRoot = path.resolve(__dirname, '..'); + + return new Promise((c, e) => { + glob('**/**.test.js', { cwd: testsRoot }, (err, files) => { + if (err) { + return e(err); + } + + // Add files to the test suite + files.forEach(f => mocha.addFile(path.resolve(testsRoot, f))); + + try { + // Run the mocha test + mocha.run(failures => { + if (failures > 0) { + e(new Error(`${failures} tests failed.`)); + } else { + c(); + } + }); + } catch (err) { + console.error(err); + e(err); + } + }); + }); +} diff --git a/packages/lit-dev-tutorial-plugin/src/tree-items/before-after-dir.ts b/packages/lit-dev-tutorial-plugin/src/tree-items/before-after-dir.ts new file mode 100644 index 000000000..85e4b8d87 --- /dev/null +++ b/packages/lit-dev-tutorial-plugin/src/tree-items/before-after-dir.ts @@ -0,0 +1,116 @@ +/** + * @license + * Copyright 2022 Google LLC + * SPDX-License-Identifier: BSD-3-Clause + */ + +import * as vscode from 'vscode'; +import * as fs from 'fs'; +import * as path from 'path'; +import {TutorialStep} from './tutorial-step'; +import {LitDevTutorialTreeProvider} from '../tree-provider'; +import {getJson} from '../fs-helpers'; +import {TutorialJson} from '../types'; +import {GenericFile} from './generic-file'; +import {PlaygroundFile} from './playground-file'; + +export class BeforeAfterDir extends vscode.TreeItem { + get path() { + return path.join(this.tutorialStep.path, this.name); + } + + constructor( + public provider: LitDevTutorialTreeProvider, + public tutorialStep: TutorialStep, + public readonly name: 'before' | 'after' + ) { + super( + vscode.Uri.file(path.join(tutorialStep.path, name)), + vscode.TreeItemCollapsibleState.Collapsed + ); + + this.contextValue = `${name}Dir`; + } + + delete() { + if (this.name === 'before') { + return; + } + + fs.rmdirSync(this.path, {recursive: true}); + + this.tutorialStep.hasAfter = false; + + const tutorialJsonPath = path.join( + this.tutorialStep.tutorial.path, + 'tutorial.json' + ); + const tutorialJson = getJson(tutorialJsonPath); + + if (tutorialJson) { + const steps = tutorialJson.steps; + const step = steps[this.tutorialStep.step]; + + if (step) { + if (this.name === 'after') { + delete step.hasAfter; + } + } + + fs.writeFileSync(tutorialJsonPath, JSON.stringify(tutorialJson, null, 2)); + this.provider.refresh(); + } + } + + static create(tutorialStep: TutorialStep, name: 'before' | 'after') { + const provider = tutorialStep.provider; + const newDir = new BeforeAfterDir(provider, tutorialStep, name); + newDir.contextValue = `${name}Dir`; + fs.mkdirSync(newDir.path); + + if (name === 'after') { + const tutorialJsonPath = path.join( + tutorialStep.tutorial.path, + 'tutorial.json' + ); + + const tutorialJson = getJson(tutorialJsonPath); + + if (tutorialJson) { + tutorialJson.steps[tutorialStep.step].hasAfter = true; + } + + tutorialStep.hasAfter = true; + + fs.writeFileSync(tutorialJsonPath, JSON.stringify(tutorialJson, null, 2)); + } + + const projectJson = { + extends: '/samples/base.json', + files: {}, + }; + GenericFile.create( + provider, + path.join(newDir.path, 'project.json'), + {}, + JSON.stringify(projectJson, null, 2) + ); + PlaygroundFile.create( + newDir, + 'index.html', + {}, + ` + + + + + + +` + ); + + provider.refresh(); + + return newDir; + } +} diff --git a/packages/lit-dev-tutorial-plugin/src/tree-items/generic-file.ts b/packages/lit-dev-tutorial-plugin/src/tree-items/generic-file.ts new file mode 100644 index 000000000..ea70ae277 --- /dev/null +++ b/packages/lit-dev-tutorial-plugin/src/tree-items/generic-file.ts @@ -0,0 +1,77 @@ +/** + * @license + * Copyright 2022 Google LLC + * SPDX-License-Identifier: BSD-3-Clause + */ + +import * as vscode from 'vscode'; +import * as fs from 'fs'; +import {LitDevTutorialTreeProvider} from '../tree-provider'; + +interface GenericFileConfig { + label?: string; + tooltip?: string; + deletable: boolean; +} + +export class GenericFile extends vscode.TreeItem { + deletable: boolean; + + constructor( + public readonly provider: LitDevTutorialTreeProvider, + public readonly path: string, + config: Partial = {} + ) { + super(vscode.Uri.file(path)); + + const {label, tooltip, deletable} = config; + + if (label) { + this.label = label; + } + + if (tooltip) { + this.tooltip = tooltip; + } + + this.deletable = !!deletable; + + this.command = { + title: '', + command: 'vscode.open', + arguments: [this.resourceUri], + }; + + if (deletable) { + this.contextValue = 'generic-file-deletable'; + } else { + this.contextValue = 'generic-file-nodelete'; + } + } + + delete() { + if (!this.deletable) { + return; + } + fs.rmSync(this.path); + this.provider.refresh(); + } + + static create( + provider: LitDevTutorialTreeProvider, + path: string, + config: Partial = {}, + contents = '' + ) { + const genericFile = new GenericFile(provider, path, config); + fs.writeFileSync(path, contents); + + provider.refresh(); + return genericFile; + } + + revealInSidebar() { + vscode.commands.executeCommand('vscode.open', vscode.Uri.file(this.path)); + vscode.commands.executeCommand('workbench.files.action.showActiveFileInExplorer'); + } +} diff --git a/packages/lit-dev-tutorial-plugin/src/tree-items/playground-file.ts b/packages/lit-dev-tutorial-plugin/src/tree-items/playground-file.ts new file mode 100644 index 000000000..67529981c --- /dev/null +++ b/packages/lit-dev-tutorial-plugin/src/tree-items/playground-file.ts @@ -0,0 +1,132 @@ +/** + * @license + * Copyright 2022 Google LLC + * SPDX-License-Identifier: BSD-3-Clause + */ + +import * as vscode from 'vscode'; +import * as fs from 'fs'; +import * as path from 'path'; +import {LitDevTutorialTreeProvider} from '../tree-provider'; +import {BeforeAfterDir} from './before-after-dir'; +import {PlaygroundProjectManifest} from '../types'; +import {getJson} from '../fs-helpers'; + +export interface PlaygroundFileCreateConfig { + hidden: boolean; +} + +const defaultCreateConfig: PlaygroundFileCreateConfig = { + hidden: false, +}; + +export class PlaygroundFile extends vscode.TreeItem { + projectJsonPath; + + get path() { + return path.join(this.dirItem.path, this.filename); + } + + get isHidden() { + const manifest = getJson(this.projectJsonPath); + return !!manifest?.files?.[this.filename]?.hidden; + } + + constructor( + public readonly provider: LitDevTutorialTreeProvider, + public readonly dirItem: BeforeAfterDir, + public readonly filename: string + ) { + super(vscode.Uri.file(path.join(dirItem.path, filename))); + + this.command = { + title: '', + command: 'vscode.open', + arguments: [this.resourceUri], + }; + + this.contextValue = 'playground-file'; + this.projectJsonPath = path.join(this.dirItem.path, 'project.json'); + } + + delete() { + fs.rmSync(this.path); + const manifest = getJson(this.projectJsonPath); + if (manifest) { + delete manifest.files?.[this.filename]; + fs.writeFileSync(this.projectJsonPath, JSON.stringify(manifest, null, 2)); + } + + this.provider.refresh(); + } + + static async create( + dirItem: BeforeAfterDir, + filename = '', + config: Partial = {}, + contents = '' + ) { + if (!filename) { + const filenameRaw = await vscode.window.showInputBox({ + prompt: 'Enter a filename', + placeHolder: 'my-element.ts', + validateInput: (input) => { + if (!input) { + return 'Filename is required'; + } + if (fs.readdirSync(dirItem.path).includes(input)) { + return 'Filename already exists'; + } + if (input.includes(' ')) { + return 'Filename cannot contain spaces'; + } + if (input.includes('/')) { + return 'Filename cannot contain slashes'; + } + if (input.includes('\\')) { + return 'Filename cannot contain backslashes'; + } + return null; + }, + }); + + if (!filenameRaw) { + return; + } + + filename = filenameRaw; + } + const provider = dirItem.provider; + const {hidden} = {...defaultCreateConfig, ...config}; + const newFile = new PlaygroundFile(provider, dirItem, filename); + fs.writeFileSync(newFile.path, contents); + + const manifest = getJson( + newFile.projectJsonPath + ); + if (manifest) { + if (!manifest.files) { + manifest.files = {}; + } + + manifest.files[newFile.filename] = {}; + + if (hidden) { + manifest.files[newFile.filename].hidden = true; + } + + fs.writeFileSync( + newFile.projectJsonPath, + JSON.stringify(manifest, null, 2) + ); + + provider.refresh(); + return newFile; + } + } + + revealInSidebar() { + vscode.commands.executeCommand('vscode.open', vscode.Uri.file(this.path)); + vscode.commands.executeCommand('workbench.files.action.showActiveFileInExplorer'); + } +} diff --git a/packages/lit-dev-tutorial-plugin/src/tree-items/tutorial-step.ts b/packages/lit-dev-tutorial-plugin/src/tree-items/tutorial-step.ts new file mode 100644 index 000000000..afe74da38 --- /dev/null +++ b/packages/lit-dev-tutorial-plugin/src/tree-items/tutorial-step.ts @@ -0,0 +1,220 @@ +/** + * @license + * Copyright 2022 Google LLC + * SPDX-License-Identifier: BSD-3-Clause + */ + +import * as vscode from 'vscode'; +import * as fs from 'fs'; +import * as path from 'path'; +import {Tutorial} from './tutorial'; +import {LitDevTutorialTreeProvider} from '../tree-provider'; +import {getJson} from '../fs-helpers'; +import {TutorialJson, TutorialJsonStep} from '../types'; +import {BeforeAfterDir} from './before-after-dir'; + +export class TutorialStep extends vscode.TreeItem { + private _step = -1; + private _hasAfter = false; + checkable = false; + + get path() { + return path.join(this.tutorial.path, this.dirName); + } + + get step() { + return this._step; + } + + set step(value: number) { + const oldPath = this.path; + const previousStep = this._step; + this._step = value; + + if (previousStep !== -1) { + fs.renameSync(oldPath, this.path); + } + + this.contextValue = this.generateContextValue(); + this.fetchMetadata(); + } + + get hasAfter() { + return this._hasAfter; + } + + set hasAfter(value: boolean) { + this._hasAfter = value; + this.contextValue = this.generateContextValue(); + } + + constructor( + public provider: LitDevTutorialTreeProvider, + public tutorial: Tutorial, + step: string + ) { + super( + vscode.Uri.file( + path.join(tutorial.path, step) + ), + vscode.TreeItemCollapsibleState.Collapsed + ); + + this.tutorial.pushStep(this); + this.step = Number(step); + this.tooltip = this.dirName; + this.fetchMetadata(); + } + + updateContextValue() { + this.contextValue = this.generateContextValue(); + } + + private fetchMetadata() { + if (this.step === -1 || this.step === -2) { + return; + } + const tutorialJson = getJson( + path.join(this.tutorial.path, 'tutorial.json') + ); + + if (tutorialJson) { + this.label = tutorialJson.steps[this.step].title; + this.description = `[${this.dirName}]`; + this.hasAfter = !!tutorialJson.steps[this.step].hasAfter; + this.checkable = !!tutorialJson.steps[this.step].checkable; + } else { + this.label = this.dirName; + } + } + + get dirName() { + return `${this.step}`.padStart(2, '0'); + } + + private generateContextValue() { + const first = this.step === 0 ? '' : '-up'; + const last = this.step === this.tutorial.steps.length - 1 ? '' : '-down'; + const afterVal = this.hasAfter ? '' : '-add'; + + return `tutorial-step${first}${last}${afterVal}`; + } + + deleteFiles() { + const tutorialJsonPath = path.join(this.tutorial.path, 'tutorial.json'); + const tutorialJson = getJson(tutorialJsonPath); + tutorialJson?.steps.splice(this.dirName as unknown as number, 1); + + fs.writeFileSync(tutorialJsonPath, JSON.stringify(tutorialJson, null, 2)); + + fs.rmdirSync(this.path, {recursive: true}); + fs.rmSync( + path.join( + this.provider.siteTutorialsContentPath, + this.tutorial.dirName, + `${this.dirName}.md` + ) + ); + } + + delete() { + this.tutorial.removeStep(this); + } + + moveUp() { + this.tutorial.moveStepUp(this); + } + + moveDown() { + this.tutorial.moveStepDown(this); + } + + static async create(tutorial: Tutorial) { + const provider = tutorial.provider; + const dirName = `${tutorial.steps.length}`.padStart(2, '0'); + + const title = await vscode.window.showInputBox({ + prompt: 'Step title', + placeHolder: 'Styling the component', + validateInput: (value: string) => { + if (value.length === 0) { + return 'Title is required.'; + } + return null; + }, + }); + + if (!title) { + return; + } + + const checkableRaw = await vscode.window.showQuickPick(['Yes', 'No'], { + placeHolder: 'Is this step checkable?', + }); + + if (checkableRaw === undefined) { + return; + } + + const checkable = checkableRaw === 'Yes'; + + fs.mkdirSync(path.join(tutorial.path, dirName)); + fs.writeFileSync( + path.join( + provider.siteTutorialsContentPath, + tutorial.dirName, + `${dirName}.md` + ), + '' + ); + + const tutorialJsonPath = path.join(tutorial.path, 'tutorial.json'); + const tutorialJson = getJson(tutorialJsonPath)!; + const jsonStep: TutorialJsonStep = { + title, + hasAfter: true, + }; + + if (checkable) { + jsonStep.checkable = true; + } + tutorialJson.steps.push(jsonStep); + + + fs.writeFileSync(tutorialJsonPath, JSON.stringify(tutorialJson, null, 2)); + + const step = new TutorialStep(provider, tutorial, dirName); + tutorial.pushStep(step); + + BeforeAfterDir.create(step, 'before'); + BeforeAfterDir.create(step, 'after'); + + provider.refresh(); + return step; + } + + async rename() { + let newName = await vscode.window.showInputBox({ + prompt: 'New step name', + value: this.label as string, + validateInput: (value: string) => { + if (value.length === 0) { + return 'Name is required.'; + } + return null; + } + }); + + if (!newName) { + return; + } + + const tutorialJsonPath = path.join(this.tutorial.path, 'tutorial.json'); + const tutorialJson = getJson(tutorialJsonPath)!; + tutorialJson.steps[this.step].title = newName; + + fs.writeFileSync(tutorialJsonPath, JSON.stringify(tutorialJson, null, 2)); + this.label = newName; + this.provider.refresh(); + } +} diff --git a/packages/lit-dev-tutorial-plugin/src/tree-items/tutorial.ts b/packages/lit-dev-tutorial-plugin/src/tree-items/tutorial.ts new file mode 100644 index 000000000..413e1c2b5 --- /dev/null +++ b/packages/lit-dev-tutorial-plugin/src/tree-items/tutorial.ts @@ -0,0 +1,310 @@ +/** + * @license + * Copyright 2022 Google LLC + * SPDX-License-Identifier: BSD-3-Clause + */ + +import * as vscode from 'vscode'; +import * as path from 'path'; +import * as fs from 'fs'; +import {LitDevTutorialTreeProvider} from '../tree-provider'; +import { + TutorialCardSize, + TutorialCategory, + TutorialDifficulty, + TutorialJson, +} from '../types'; +import {TutorialStep} from './tutorial-step'; +import { + addTutorialTo11tyData, + getJson, + removeTutorialFrom11tyData, +} from '../fs-helpers'; +import { dirname } from 'path'; + +export class Tutorial extends vscode.TreeItem { + steps: TutorialStep[] = []; + + get path() { + return path.join(this.provider.samplesTutorialsPath, this.dirName); + } + + constructor( + public provider: LitDevTutorialTreeProvider, + readonly dirName: string + ) { + super( + vscode.Uri.file(path.join(provider.samplesTutorialsPath, dirName)), + vscode.TreeItemCollapsibleState.Collapsed + ); + this.tooltip = dirName; + this.init(); + this.contextValue = 'tutorial'; + } + + async init() { + const tutorialJson = getJson( + path.join( + this.provider.samplesTutorialsPath, + this.dirName, + 'tutorial.json' + ) + ); + + if (tutorialJson) { + this.label = tutorialJson.header; + } else { + this.label = `tutorial.json not found for ${this.dirName}`; + } + } + + pushStep(step: TutorialStep) { + this.steps.push(step); + this.steps[this.steps.length - 2]?.updateContextValue(); + } + + static async create(provider: LitDevTutorialTreeProvider) { + const dirName = await vscode.window.showInputBox({ + prompt: 'Directory name', + placeHolder: 'my-tutorial', + validateInput: (value) => { + if (!value) { + return 'Please enter a directory name'; + } + + const actualName = value.split(' ').join('-'); + + if ( + fs.existsSync(path.join(provider.samplesTutorialsPath, actualName)) + ) { + return 'Directory already exists'; + } + + return null; + }, + }); + + if (dirName === undefined) { + return; + } + + const name = await vscode.window.showInputBox({ + prompt: 'Tutorial name', + placeHolder: 'My Tutorial', + validateInput: (value) => { + if (!value) { + return 'Please enter a tutorial name'; + } + + return null; + }, + }); + + if (name === undefined) { + return; + } + + const difficulty = (await vscode.window.showQuickPick( + ['Beginner', 'Intermediate', 'Advanced', ''], + { + placeHolder: 'Difficulty', + } + )) as TutorialDifficulty|undefined; + + if (difficulty === undefined) { + return; + } + + const size = (await vscode.window.showQuickPick( + ['tiny', 'small', 'medium', 'large'], + { + title: 'Card size', + } + )) as TutorialCardSize|undefined; + + if (size === undefined) { + return; + } + + const duration = (await vscode.window.showInputBox({ + prompt: 'Duration (mins)', + value: '0', + validateInput: (value) => { + if (!value) { + return 'Please enter a duration'; + } + + const duration = parseInt(value); + + if (isNaN(duration)) { + return 'Please enter a valid duration'; + } + + return null; + }, + })) as unknown as number|undefined; + + if (duration === undefined) { + return; + } + + const category = (await vscode.window.showQuickPick( + ['Learn', 'Build', 'Draft'], + { + title: 'Catalog Category', + } + )) as TutorialCategory|undefined; + + if (category === undefined) { + return; + } + + const imgSrc = await vscode.window.showInputBox({ + prompt: 'Card Image source (optional)', + placeHolder: '/images/tutorials/my-tutorial/card-image.png', + }); + + let imgAlt = ''; + + if (imgSrc) { + imgAlt = (await vscode.window.showInputBox({ + prompt: 'Image alt text', + validateInput: (value) => { + if (!value) { + return 'Please enter an alt text'; + } + + return null; + }, + })) as string; + } + + const tutorialPath = path.join(provider.samplesTutorialsPath, dirName); + + const tutorialContentPath = path.join( + provider.siteTutorialsContentPath, + dirName + ); + + try { + fs.mkdirSync(tutorialPath); + fs.mkdirSync(tutorialContentPath); + } catch (_e) {} + + const tutorialJson: TutorialJson = { + header: name, + difficulty: difficulty, + size: size, + duration: duration, + category: category, + imgSrc, + imgAlt, + steps: [], + }; + + fs.writeFileSync( + path.join(tutorialPath, 'tutorial.json'), + JSON.stringify(tutorialJson, null, 2) + ); + + fs.writeFileSync(path.join(tutorialPath, 'Catalog Description'), ''); + + await addTutorialTo11tyData( + dirName, + category, + path.join(provider.siteTutorialsPath, 'tutorials.11tydata.js') + ); + + provider.refresh(); + + return new Tutorial(provider, dirName); + } + + delete() { + fs.rmdirSync(this.path, {recursive: true}); + fs.rmdirSync( + path.join(this.provider.siteTutorialsContentPath, this.dirName), + {recursive: true} + ); + removeTutorialFrom11tyData( + this.dirName, + path.join(this.provider.siteTutorialsPath, 'tutorials.11tydata.js') + ); + this.provider.refresh(); + } + + removeStep(stepItem: TutorialStep) { + this.steps = this.steps.sort((a, b) => a.step - b.step); + stepItem.deleteFiles(); + + this.steps.splice(stepItem.step, 1); + + for (let i = stepItem.step; i < this.steps.length; i++) { + const step = this.steps[i]; + step.step -= -1; + } + + + this.provider.refresh(); + } + + moveStepUp(stepItem: TutorialStep) { + this.steps = this.steps.sort((a, b) => a.step - b.step); + + if (stepItem.step === 0) { + return; + } + + const prevStepItem = this.steps[stepItem.step - 1]; + const index = stepItem.step; + const previousIndex = prevStepItem.step; + + // prevent fs.renameSync from throwing an error + stepItem.step = -2; + prevStepItem.step = index; + stepItem.step = previousIndex; + + this.steps[stepItem.step] = stepItem; + this.steps[prevStepItem.step] = prevStepItem; + + const tutorialJsonPath = path.join(this.path, 'tutorial.json'); + const tutorialJson = getJson(tutorialJsonPath)!; + const jsonStep = tutorialJson?.steps[index]; + const jsonPrevStep = tutorialJson?.steps[previousIndex]; + tutorialJson.steps[index] = jsonPrevStep; + tutorialJson.steps[previousIndex] = jsonStep; + fs.writeFileSync(tutorialJsonPath, JSON.stringify(tutorialJson, null, 2)); + + this.provider.refresh(); + } + + moveStepDown(stepItem: TutorialStep) { + this.steps = this.steps.sort((a, b) => a.step - b.step); + + if (stepItem.step === this.steps.length - 1) { + return; + } + + const nextStepItem = this.steps[stepItem.step + 1]; + const index = stepItem.step; + const nextIndex = nextStepItem.step; + + stepItem.step = -2; + nextStepItem.step = index; + stepItem.step = nextIndex; + + this.steps[stepItem.step] = stepItem; + this.steps[nextStepItem.step] = nextStepItem; + + const tutorialJsonPath = path.join(this.path, 'tutorial.json'); + const tutorialJson = getJson(tutorialJsonPath)!; + const jsonStep = tutorialJson?.steps[index]; + const jsonNextStep = tutorialJson?.steps[nextIndex]; + tutorialJson.steps[index] = jsonNextStep; + tutorialJson.steps[nextIndex] = jsonStep; + + fs.writeFileSync(tutorialJsonPath, JSON.stringify(tutorialJson, null, 2)); + + this.provider.refresh(); + } +} diff --git a/packages/lit-dev-tutorial-plugin/src/tree-provider.ts b/packages/lit-dev-tutorial-plugin/src/tree-provider.ts new file mode 100644 index 000000000..0c41d8215 --- /dev/null +++ b/packages/lit-dev-tutorial-plugin/src/tree-provider.ts @@ -0,0 +1,243 @@ +/** + * @license + * Copyright 2022 Google LLC + * SPDX-License-Identifier: BSD-3-Clause + */ + +import * as vscode from 'vscode'; +import * as fs from 'fs'; +import * as path from 'path'; +import {Tutorial} from './tree-items/tutorial'; +import {GenericFile} from './tree-items/generic-file'; +import {TutorialStep} from './tree-items/tutorial-step'; +import {getJson} from './fs-helpers'; +import {BeforeAfterDir} from './tree-items/before-after-dir'; +import {PlaygroundFile} from './tree-items/playground-file'; + +interface PackageJson { + name?: string; +} + +export type TutorialTreeItem = + | Tutorial + | GenericFile + | TutorialStep + | BeforeAfterDir + | PlaygroundFile; + +export class LitDevTutorialTreeProvider + implements vscode.TreeDataProvider +{ + get workspaceRoot() { + return vscode.workspace.workspaceFolders?.[0].uri.fsPath!; + } + + private _contentPath = ''; + + get contentPath() { + return path.join(this.workspaceRoot, this._contentPath); + } + + get samplesTutorialsPath() { + return path.join(this.contentPath, 'samples', 'tutorials'); + } + + get siteTutorialsPath() { + return path.join(this.contentPath, 'site', 'tutorials'); + } + + get siteTutorialsContentPath() { + return path.join(this.contentPath, 'site', 'tutorials', 'content'); + } + + private _onDidChangeTreeData = new vscode.EventEmitter< + TutorialTreeItem | undefined | null | void + >(); + readonly onDidChangeTreeData = this._onDidChangeTreeData.event; + + getTreeItem(element: TutorialTreeItem): vscode.TreeItem { + return element; + } + + getChildren(element?: TutorialTreeItem): TutorialTreeItem[] { + if (!this.workspaceRoot) { + vscode.window.showInformationMessage('No dependency in empty workspace'); + return []; + } + + if (element) { + return this.onChild(element); + } else { + // initial load + return this.onInitChildren(); + } + } + + private onInitChildren() { + let contentPath = ''; + const possContentPath = path.join( + this.workspaceRoot, + 'packages', + 'lit-dev-content' + ); + + const rootPackageJsonPath = path.join(this.workspaceRoot, 'package.json'); + const contentPackageJsonPath = path.join(possContentPath, 'package.json'); + + const [rootPackage, contentPackage] = [ + getJson(rootPackageJsonPath), + getJson(contentPackageJsonPath), + ]; + + // determine whether we are in a lit.dev repo or the lit-dev-content + // subpackage + if (rootPackage?.name === 'lit-dev-content') { + contentPath = '.'; + } else if (contentPackage?.name === 'lit-dev-content') { + contentPath = path.relative(this.workspaceRoot, possContentPath); + } + + this._contentPath = contentPath; + + let items: TutorialTreeItem[] = []; + + if (contentPath) { + items = [...items, ...this.getInitialContent()]; + + return items; + } else { + vscode.window.showInformationMessage('This is not a lit.dev workspace.'); + return []; + } + } + + private onChild(element: TutorialTreeItem): TutorialTreeItem[] { + if (element instanceof Tutorial) { + return this.onTutorial(element); + } else if (element instanceof TutorialStep) { + return this.onTutorialStep(element); + } else if (element instanceof BeforeAfterDir) { + return this.onBeforeAfterDir(element); + } + + return []; + } + + private onTutorial(element: Tutorial) { + const tutorialPath = path.join(this.samplesTutorialsPath, element.dirName); + const tutorialDirEntries = fs.readdirSync(tutorialPath, { + withFileTypes: true, + }); + const tutorialStepEntries = tutorialDirEntries.filter((file) => + file.isDirectory() + ); + const tutorialFileEntries = tutorialDirEntries.filter((file) => + file.isFile() + ); + + const steps = tutorialStepEntries.map( + (step) => new TutorialStep(this, element, step.name) + ); + const files = tutorialFileEntries.map( + (file) => new GenericFile(this, path.join(tutorialPath, file.name)) + ); + return [...steps, ...files]; + } + + private onTutorialStep(element: TutorialStep) { + const tutorialPath = element.path; + const tutorialEntries = fs.readdirSync(tutorialPath, {withFileTypes: true}); + const tutorialDirEntries = tutorialEntries.filter( + (file) => + (file.isDirectory() && file.name === 'before') || file.name === 'after' + ).reverse(); + + const beforeAfterDirs = tutorialDirEntries.map( + (entry) => + new BeforeAfterDir(this, element, entry.name as 'before' | 'after') + ); + + const stepInstructionsMdFile = new GenericFile( + this, + path.join( + this.siteTutorialsContentPath, + element.tutorial.dirName, + `${element.dirName}.md` + ), + { + label: 'Instructions', + tooltip: `${element.dirName}.md`, + } + ); + + return [...beforeAfterDirs, stepInstructionsMdFile]; + } + + private onBeforeAfterDir(element: BeforeAfterDir) { + const tutorialPath = element.path; + const tutorialEntries = fs.readdirSync(tutorialPath, {withFileTypes: true}); + const tutorialFileEntries = tutorialEntries.filter((file) => file.isFile()); + + const files = tutorialFileEntries.map((file) => { + if (file.name === 'project.json') { + return new GenericFile(this, path.join(tutorialPath, file.name)); + } else { + return new PlaygroundFile(this, element, file.name); + } + }); + + const projectJsonFile = files.find((file) => file instanceof GenericFile)!; + const playgroundFiles = files.filter((file) => !(file instanceof GenericFile)); + + return [...playgroundFiles, projectJsonFile]; + } + + private getInitialContent() { + const samplesDir = fs.readdirSync(this.samplesTutorialsPath, { + withFileTypes: true, + }); + + const samplesPath = path.join(this.contentPath, 'samples'); + const configEntries = fs.readdirSync(samplesPath, { + withFileTypes: true, + }); + const tutorialDirs = samplesDir.filter((dir) => dir.isDirectory()); + const configs = configEntries.filter( + (dir) => + dir.name.endsWith('.json') && + dir.isFile() && + dir.name !== 'tsconfig.json' + ); + + const tutorialDataFilePath = path.join( + this.siteTutorialsPath, + 'tutorials.11tydata.js' + ); + + const tutorials: Tutorial[] = []; + + tutorialDirs.forEach((dir) => tutorials.push(new Tutorial(this, dir.name))); + + const configsFiles: GenericFile[] = []; + + configs.forEach((config) => + configsFiles.push( + new GenericFile(this, path.join(samplesPath, config.name)) + ) + ); + + return [ + ...tutorials, + ...configsFiles, + new GenericFile(this, tutorialDataFilePath), + ]; + } + + refresh() { + this._onDidChangeTreeData.fire(); + } + + createTutorial() { + Tutorial.create(this); + } +} diff --git a/packages/lit-dev-tutorial-plugin/src/types.ts b/packages/lit-dev-tutorial-plugin/src/types.ts new file mode 100644 index 000000000..a26d7fbe4 --- /dev/null +++ b/packages/lit-dev-tutorial-plugin/src/types.ts @@ -0,0 +1,26 @@ +/** + * @license + * Copyright 2022 Google LLC + * SPDX-License-Identifier: BSD-3-Clause + */ + +export type {ProjectManifest as PlaygroundProjectManifest} from 'playground-elements/shared/worker-api'; + +export type TutorialDifficulty = '' | 'Beginner' | 'Intermediate' | 'Advanced'; +export type TutorialCardSize = 'tiny' | 'small' | 'medium' | 'large'; +export type TutorialCategory = 'Learn' | 'Build' | 'Draft'; +export interface TutorialJsonStep { + title: string; + hasAfter?: boolean; + checkable?: boolean; +} +export interface TutorialJson { + header: string; + difficulty: TutorialDifficulty; + size: TutorialCardSize; + duration: number; + category: TutorialCategory; + imgSrc?: string; + imgAlt?: string; + steps: TutorialJsonStep[]; +} diff --git a/packages/lit-dev-tutorial-plugin/tsconfig.json b/packages/lit-dev-tutorial-plugin/tsconfig.json new file mode 100644 index 000000000..fe565bea9 --- /dev/null +++ b/packages/lit-dev-tutorial-plugin/tsconfig.json @@ -0,0 +1,18 @@ +{ + "compilerOptions": { + "module": "commonjs", + "target": "ES2020", + "outDir": "out", + "lib": [ + "ES2020" + ], + "sourceMap": true, + "rootDir": "src", + "strict": true, /* enable all strict type-checking options */ + "skipLibCheck": true + /* Additional Checks */ + // "noImplicitReturns": true, /* Report error when not all code paths in function return a value. */ + // "noFallthroughCasesInSwitch": true, /* Report errors for fallthrough cases in switch statement. */ + // "noUnusedParameters": true, /* Report errors on unused parameters. */ + } +} From 9041985deaf16ee5091711f594d5b9ada1fe599d Mon Sep 17 00:00:00 2001 From: e111077 <5981958+e111077@users.noreply.github.com> Date: Sat, 26 Mar 2022 04:35:53 -0700 Subject: [PATCH 02/10] add repo to package.json --- packages/lit-dev-tutorial-plugin/package.json | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/packages/lit-dev-tutorial-plugin/package.json b/packages/lit-dev-tutorial-plugin/package.json index 405c3d0dd..6c3ca9c82 100644 --- a/packages/lit-dev-tutorial-plugin/package.json +++ b/packages/lit-dev-tutorial-plugin/package.json @@ -8,6 +8,11 @@ "license": "BSD-3-Clause", "type": "module", "main": "./out/extension.js", + "repository": { + "type": "git", + "url": "https://github.com/lit/lit.dev/", + "directory": "packages/lit-dev-tutorial-extension" + }, "engines": { "vscode": "^1.65.0" }, From 98aa3abb08e8ab5ce274416b90b1351466a41d64 Mon Sep 17 00:00:00 2001 From: e111077 <5981958+e111077@users.noreply.github.com> Date: Sat, 26 Mar 2022 04:37:08 -0700 Subject: [PATCH 03/10] add vsix to gitignore --- .gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitignore b/.gitignore index b127cb328..9d15d6232 100644 --- a/.gitignore +++ b/.gitignore @@ -20,6 +20,7 @@ packages/lit-dev-api/api-data/*/repo/ packages/lit-dev-api/api-data/*/INSTALLED packages/lit-dev-tutorial-plugin/out +packages/lit-dev-tutorial-plugin/lit-dev-tutorial-editor*.vsix # We only want to keep '-linux' screenshots which are tested by Github Actions. packages/lit-dev-tests/src/playwright/**/*.png From f0dd18843af16f60f9389573ccb981ff7ca160f3 Mon Sep 17 00:00:00 2001 From: e111077 <5981958+e111077@users.noreply.github.com> Date: Sat, 26 Mar 2022 04:38:46 -0700 Subject: [PATCH 04/10] =?UTF-8?q?thar=20be=20dragons=20=E2=9A=A0=EF=B8=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- packages/lit-dev-tutorial-plugin/README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/packages/lit-dev-tutorial-plugin/README.md b/packages/lit-dev-tutorial-plugin/README.md index b7b83bff6..dfe501449 100644 --- a/packages/lit-dev-tutorial-plugin/README.md +++ b/packages/lit-dev-tutorial-plugin/README.md @@ -1,3 +1,5 @@ +⚠️⚠️ BEWARE This package is in Alpha ⚠️⚠️ + # lit.dev Tutorial Editor README This extension provides an editor for tutorials on lit.dev. From c77b09f7f05a66929d15dbeab4a6dcdc79233ba9 Mon Sep 17 00:00:00 2001 From: e111077 <5981958+e111077@users.noreply.github.com> Date: Sat, 26 Mar 2022 05:03:56 -0700 Subject: [PATCH 05/10] revert type module --- packages/lit-dev-tutorial-plugin/package.json | 1 - 1 file changed, 1 deletion(-) diff --git a/packages/lit-dev-tutorial-plugin/package.json b/packages/lit-dev-tutorial-plugin/package.json index 6c3ca9c82..7ac45e081 100644 --- a/packages/lit-dev-tutorial-plugin/package.json +++ b/packages/lit-dev-tutorial-plugin/package.json @@ -6,7 +6,6 @@ "version": "0.0.1", "author": "Google LLC", "license": "BSD-3-Clause", - "type": "module", "main": "./out/extension.js", "repository": { "type": "git", From 963186a8ddaf6038c734d2224ce706ddd83512c9 Mon Sep 17 00:00:00 2001 From: e111077 <5981958+e111077@users.noreply.github.com> Date: Sat, 26 Mar 2022 06:10:04 -0700 Subject: [PATCH 06/10] fix deletion bug --- .../src/tree-items/tutorial-step.ts | 33 ++++++++++++------- .../src/tree-items/tutorial.ts | 10 +++--- 2 files changed, 26 insertions(+), 17 deletions(-) diff --git a/packages/lit-dev-tutorial-plugin/src/tree-items/tutorial-step.ts b/packages/lit-dev-tutorial-plugin/src/tree-items/tutorial-step.ts index afe74da38..914e67031 100644 --- a/packages/lit-dev-tutorial-plugin/src/tree-items/tutorial-step.ts +++ b/packages/lit-dev-tutorial-plugin/src/tree-items/tutorial-step.ts @@ -18,6 +18,10 @@ export class TutorialStep extends vscode.TreeItem { private _hasAfter = false; checkable = false; + get dirName() { + return `${this.step}`.padStart(2, '0'); + } + get path() { return path.join(this.tutorial.path, this.dirName); } @@ -28,11 +32,23 @@ export class TutorialStep extends vscode.TreeItem { set step(value: number) { const oldPath = this.path; + const oldInstructionsPath = path.join( + this.provider.siteTutorialsContentPath, + this.tutorial.dirName, + `${this.dirName}.md` + ); const previousStep = this._step; + this._step = value; + const newInstructionsPath = path.join( + this.provider.siteTutorialsContentPath, + this.tutorial.dirName, + `${this.dirName}.md` + ); if (previousStep !== -1) { fs.renameSync(oldPath, this.path); + fs.renameSync(oldInstructionsPath, newInstructionsPath); } this.contextValue = this.generateContextValue(); @@ -54,9 +70,7 @@ export class TutorialStep extends vscode.TreeItem { step: string ) { super( - vscode.Uri.file( - path.join(tutorial.path, step) - ), + vscode.Uri.file(path.join(tutorial.path, step)), vscode.TreeItemCollapsibleState.Collapsed ); @@ -79,19 +93,15 @@ export class TutorialStep extends vscode.TreeItem { ); if (tutorialJson) { - this.label = tutorialJson.steps[this.step].title; + this.label = tutorialJson.steps[this.step]?.title; this.description = `[${this.dirName}]`; - this.hasAfter = !!tutorialJson.steps[this.step].hasAfter; - this.checkable = !!tutorialJson.steps[this.step].checkable; + this.hasAfter = !!tutorialJson.steps[this.step]?.hasAfter; + this.checkable = !!tutorialJson.steps[this.step]?.checkable; } else { this.label = this.dirName; } } - get dirName() { - return `${this.step}`.padStart(2, '0'); - } - private generateContextValue() { const first = this.step === 0 ? '' : '-up'; const last = this.step === this.tutorial.steps.length - 1 ? '' : '-down'; @@ -180,7 +190,6 @@ export class TutorialStep extends vscode.TreeItem { } tutorialJson.steps.push(jsonStep); - fs.writeFileSync(tutorialJsonPath, JSON.stringify(tutorialJson, null, 2)); const step = new TutorialStep(provider, tutorial, dirName); @@ -202,7 +211,7 @@ export class TutorialStep extends vscode.TreeItem { return 'Name is required.'; } return null; - } + }, }); if (!newName) { diff --git a/packages/lit-dev-tutorial-plugin/src/tree-items/tutorial.ts b/packages/lit-dev-tutorial-plugin/src/tree-items/tutorial.ts index 413e1c2b5..60c76e178 100644 --- a/packages/lit-dev-tutorial-plugin/src/tree-items/tutorial.ts +++ b/packages/lit-dev-tutorial-plugin/src/tree-items/tutorial.ts @@ -20,7 +20,6 @@ import { getJson, removeTutorialFrom11tyData, } from '../fs-helpers'; -import { dirname } from 'path'; export class Tutorial extends vscode.TreeItem { steps: TutorialStep[] = []; @@ -64,7 +63,7 @@ export class Tutorial extends vscode.TreeItem { } static async create(provider: LitDevTutorialTreeProvider) { - const dirName = await vscode.window.showInputBox({ + let dirName = await vscode.window.showInputBox({ prompt: 'Directory name', placeHolder: 'my-tutorial', validateInput: (value) => { @@ -88,6 +87,8 @@ export class Tutorial extends vscode.TreeItem { return; } + dirName = dirName.split(' ').join('-'); + const name = await vscode.window.showInputBox({ prompt: 'Tutorial name', placeHolder: 'My Tutorial', @@ -207,7 +208,7 @@ export class Tutorial extends vscode.TreeItem { JSON.stringify(tutorialJson, null, 2) ); - fs.writeFileSync(path.join(tutorialPath, 'Catalog Description'), ''); + fs.writeFileSync(path.join(tutorialPath, 'description.md'), ''); await addTutorialTo11tyData( dirName, @@ -241,10 +242,9 @@ export class Tutorial extends vscode.TreeItem { for (let i = stepItem.step; i < this.steps.length; i++) { const step = this.steps[i]; - step.step -= -1; + step.step -= 1; } - this.provider.refresh(); } From ea7593288776e5b11d7c0d08fd206ec1455f5884 Mon Sep 17 00:00:00 2001 From: e111077 <5981958+e111077@users.noreply.github.com> Date: Wed, 30 Mar 2022 18:04:35 -0700 Subject: [PATCH 07/10] set up testing infra --- .gitignore | 2 + packages/lit-dev-tutorial-plugin/package.json | 3 +- .../lit-dev-tutorial-plugin/src/extension.ts | 2 +- .../src/test/suite/extension.test.ts | 31 +- .../src/test/suite/index.ts | 3 + .../lit-dev-tutorial-plugin/src/test/util.ts | 306 ++++++++++++++++++ .../src/tree-items/before-after-dir.ts | 2 +- .../src/tree-items/tutorial-step.ts | 2 +- .../src/tree-items/tutorial.ts | 4 +- 9 files changed, 343 insertions(+), 12 deletions(-) create mode 100644 packages/lit-dev-tutorial-plugin/src/test/util.ts diff --git a/.gitignore b/.gitignore index 9d15d6232..c21190acc 100644 --- a/.gitignore +++ b/.gitignore @@ -21,6 +21,8 @@ packages/lit-dev-api/api-data/*/INSTALLED packages/lit-dev-tutorial-plugin/out packages/lit-dev-tutorial-plugin/lit-dev-tutorial-editor*.vsix +.vscode-test +.test-bin # We only want to keep '-linux' screenshots which are tested by Github Actions. packages/lit-dev-tests/src/playwright/**/*.png diff --git a/packages/lit-dev-tutorial-plugin/package.json b/packages/lit-dev-tutorial-plugin/package.json index 7ac45e081..fa39bb514 100644 --- a/packages/lit-dev-tutorial-plugin/package.json +++ b/packages/lit-dev-tutorial-plugin/package.json @@ -163,7 +163,8 @@ "build": "tsc -p ./", "watch": "tsc -watch -p ./", "pretest": "npm run build", - "test": "node ./out/test/runTest.js" + "test": "node ./out/test/runTest.js", + "clean": "rm -rf out .vscode-test .test-bin" }, "devDependencies": { "@types/glob": "^7.2.0", diff --git a/packages/lit-dev-tutorial-plugin/src/extension.ts b/packages/lit-dev-tutorial-plugin/src/extension.ts index ecdebf8dc..00a25cff0 100644 --- a/packages/lit-dev-tutorial-plugin/src/extension.ts +++ b/packages/lit-dev-tutorial-plugin/src/extension.ts @@ -12,7 +12,7 @@ import { TutorialStep } from './tree-items/tutorial-step.js'; import { Tutorial } from './tree-items/tutorial.js'; import {LitDevTutorialTreeProvider, TutorialTreeItem} from './tree-provider.js'; -export async function activate(context: vscode.ExtensionContext) { +export async function activate() { const rootPath = vscode.workspace.workspaceFolders && vscode.workspace.workspaceFolders.length > 0 ? vscode.workspace.workspaceFolders[0].uri.fsPath diff --git a/packages/lit-dev-tutorial-plugin/src/test/suite/extension.test.ts b/packages/lit-dev-tutorial-plugin/src/test/suite/extension.test.ts index 04d742fa2..f2da84b43 100644 --- a/packages/lit-dev-tutorial-plugin/src/test/suite/extension.test.ts +++ b/packages/lit-dev-tutorial-plugin/src/test/suite/extension.test.ts @@ -9,13 +9,32 @@ import * as assert from 'assert'; // You can import and use all API from the 'vscode' module // as well as import your extension to test it import * as vscode from 'vscode'; +import {createEmptyLitDevRepo, deleteLitDevRepo} from '../util.js'; +import {beforeEach, afterEach, before} from 'mocha'; // import * as myExtension from '../../extension'; -suite('Extension Test Suite', () => { - vscode.window.showInformationMessage('Start all tests.'); +suite('Tutorial Extension', () => { + vscode.window.showInformationMessage('Start all tests.'); + let litDevPath: string; + let litDevContentPath!: string; + before(async () => { + await deleteLitDevRepo(); + }); - test('Sample test', () => { - assert.strictEqual(-1, [1, 2, 3].indexOf(5)); - assert.strictEqual(-1, [1, 2, 3].indexOf(0)); - }); + beforeEach(async () => { + const paths = await createEmptyLitDevRepo(); + litDevPath = paths.litDevPath; + litDevContentPath = paths.litDevContentPath; + }); + + suite('startup', () => { + test('recognizes lit.dev repo', async () => { + await vscode.commands.executeCommand('vscode.openFolder', vscode.Uri.file(litDevPath)); + console.log('opened!'); + }); + }); + + afterEach(async () => { + await deleteLitDevRepo(); + }); }); diff --git a/packages/lit-dev-tutorial-plugin/src/test/suite/index.ts b/packages/lit-dev-tutorial-plugin/src/test/suite/index.ts index 603706340..5b329ffae 100644 --- a/packages/lit-dev-tutorial-plugin/src/test/suite/index.ts +++ b/packages/lit-dev-tutorial-plugin/src/test/suite/index.ts @@ -19,10 +19,13 @@ export function run(): Promise { return new Promise((c, e) => { glob('**/**.test.js', { cwd: testsRoot }, (err, files) => { + console.log(files); if (err) { return e(err); } + console.log(path.resolve(testsRoot, files[0])); + // Add files to the test suite files.forEach(f => mocha.addFile(path.resolve(testsRoot, f))); diff --git a/packages/lit-dev-tutorial-plugin/src/test/util.ts b/packages/lit-dev-tutorial-plugin/src/test/util.ts new file mode 100644 index 000000000..836044902 --- /dev/null +++ b/packages/lit-dev-tutorial-plugin/src/test/util.ts @@ -0,0 +1,306 @@ +import * as fs from 'fs/promises'; +import * as fss from 'fs'; +import * as path from 'path'; +import {TutorialJson} from '../types.js'; + +const findTestBinRoot = () => { + const root = path.join(__dirname, '..', '..'); + return path.join(root, '.test-bin'); +}; + +export const createEmptyLitDevRepo = async () => { + const testBinPath = findTestBinRoot(); + const litDevPath = path.join(testBinPath, 'lit.dev'); + const litDevContentPath = path.join( + litDevPath, + 'packages', + 'lit-dev-content' + ); + const litDevSampleTutorialPath = path.join( + litDevContentPath, + 'samples', + 'tutorials' + ); + const litDevSiteTutorialPath = path.join( + litDevContentPath, + 'site', + 'tutorials' + ); + const litDevSiteTutorialContentPath = path.join( + litDevSiteTutorialPath, + 'content' + ); + + await Promise.all([ + fs.mkdir(litDevSampleTutorialPath, {recursive: true}), + fs.mkdir(litDevSiteTutorialContentPath, {recursive: true}), + ]); + + const litDevPackageJson = { + name: 'lit.dev', + }; + + const litDevContentPackageJson = { + name: 'lit-dev-content', + }; + + const baseJson = { + files: { + 'package.json': { + content: '', + hidden: true, + }, + }, + }; + + const tutorials11tyData = ` + const tutorials = await Promise.all([ + // Learn + + // Build + + // Draft + ]); +`; + + await Promise.all([ + fs.writeFile( + path.join(litDevPath, 'package.json'), + JSON.stringify(litDevPackageJson, null, 2) + ), + fs.writeFile( + path.join(litDevContentPath, 'package.json'), + JSON.stringify(litDevContentPackageJson, null, 2) + ), + fs.writeFile( + path.join(litDevSampleTutorialPath, 'base.json'), + JSON.stringify(baseJson, null, 2) + ), + fs.writeFile( + path.join(litDevSiteTutorialPath, 'tutorials.11tydata.js'), + tutorials11tyData + ), + ]); + + return {litDevPath, litDevContentPath}; +}; + +export const deleteLitDevRepo = async () => { + const testBinPath = findTestBinRoot(); + const litDevPath = path.join(testBinPath, 'lit.dev'); + + if (fss.existsSync(litDevPath)) { + await fs.rm(litDevPath, {recursive: true}); + } +}; + +export const prepopulateTutorial = async ( + litDevContentPath: string, + options: { + tutorials: (TutorialJson & {dirName: string})[]; + } = {tutorials: []} +) => { + const litDevSampleTutorialPath = path.join( + litDevContentPath, + 'samples', + 'tutorials' + ); + const litDevSiteTutorialPath = path.join( + litDevContentPath, + 'site', + 'tutorials' + ); + const litDevSiteTutorialContentPath = path.join( + litDevSiteTutorialPath, + 'content' + ); + + const promises: Promise[] = []; + const dataFile = await ( + await fs.readFile( + path.join(litDevSiteTutorialPath, 'tutorials.11tydata.js') + ) + ).toString(); + const dataFileLines = dataFile.split('\n'); + + for (const tutorial of options.tutorials) { + const tutorialPath = path.join(litDevSampleTutorialPath, tutorial.dirName); + const tutorialContentPath = path.join( + litDevSiteTutorialContentPath, + tutorial.dirName + ); + promises.push( + fs.mkdir(tutorialPath, {recursive: true}).then(() => { + return Promise.all([ + fs.writeFile(path.join(tutorialPath, 'description.md'), ''), + fs.writeFile( + path.join(tutorialPath, 'tutorial.json'), + JSON.stringify(tutorial, null, 2) + ), + ]); + }) + ); + + for (const [index, step] of tutorial.steps.entries()) { + const stepDirName = `${index}`.padStart(2, '0'); + const stepDirPath = path.join(tutorialPath, stepDirName); + const stepBeforePath = path.join(stepDirPath, 'before'); + const stepAfterPath = path.join(stepDirPath, 'after'); + + const projectJson = { + extends: '/samples/base.json', + files: { + 'index.html': {}, + }, + }; + + promises.push( + fs.mkdir(stepBeforePath, {recursive: true}).then(() => { + return Promise.all([ + fs.writeFile(path.join(stepBeforePath, 'index.html'), ''), + fs.writeFile( + path.join(stepBeforePath, 'project.json'), + JSON.stringify(projectJson, null, 2) + ), + ]); + }) + ); + + if (step.hasAfter) { + promises.push( + fs.mkdir(stepAfterPath, {recursive: true}).then(() => { + return Promise.all([ + fs.writeFile(path.join(stepAfterPath, 'index.html'), ''), + fs.writeFile( + path.join(stepAfterPath, 'project.json'), + JSON.stringify(projectJson, null, 2) + ), + ]); + }) + ); + } + + promises.push( + fs.mkdir(tutorialContentPath, {recursive: true}).then(() => { + return fs.writeFile( + path.join(tutorialContentPath, `${stepDirName}.md`), + '' + ); + }) + ); + } + } + + for (let i = options.tutorials.length - 1; i >= 0; i--) { + const tutorial = options.tutorials[i]; + const tutorialSection = tutorial.category; + const tutorialIndex = dataFileLines.findIndex((line) => + line.includes(`// ${tutorialSection}`) + ); + + const tutorialLine = ` loadTutorialData('${tutorial.dirName}'),`; + dataFileLines.splice(tutorialIndex + 1, 0, tutorialLine); + } + + promises.push( + fs.writeFile( + path.join(litDevSiteTutorialPath, 'tutorials.11tydata.js'), + dataFileLines.join('\n') + ) + ); + await Promise.all(promises); +}; + +// (async () => { +// const litdevPath = await creteEmptyLitDevRepo(); +// await prepopulateTutorial(litdevPath.litDevContentPath, { +// tutorials: [{ +// dirName: 'learn-tutorial', +// category: 'Learn', +// difficulty: 'Beginner', +// duration: 65, +// header: 'Learn Tutorial', +// size: 'small', +// steps: [ +// { +// title: 'Step 1', +// hasAfter: false, +// }, +// { +// title: 'Step 2', +// hasAfter: false, +// }, +// { +// title: 'Step 3', +// hasAfter: true, +// }, +// ], +// }, +// { +// dirName: 'learn-2-tutorial', +// category: 'Learn', +// difficulty: 'Beginner', +// duration: 65, +// header: 'Learn Tutorial 2', +// size: 'medium', +// steps: [ +// { +// title: 'First', +// hasAfter: false, +// }, +// { +// title: 'Second', +// hasAfter: false, +// }, +// { +// title: 'Third', +// hasAfter: true, +// }, +// ], +// }, +// { +// dirName: 'build-tutorial', +// category: 'Build', +// difficulty: 'Beginner', +// duration: 65, +// header: 'Build Tutorial', +// size: 'medium', +// steps: [ +// { +// title: 'b1', +// hasAfter: false, +// }, +// { +// title: 'b2', +// hasAfter: false, +// }, +// { +// title: 'b3', +// hasAfter: true, +// }, +// ], +// }, +// { +// dirName: 'draft-tutorial', +// category: 'Draft', +// difficulty: 'Beginner', +// duration: 65, +// header: 'Draft Tutorial', +// size: 'medium', +// steps: [ +// { +// title: 'd1', +// hasAfter: false, +// }, +// { +// title: 'd2', +// hasAfter: false, +// }, +// { +// title: 'd3', +// hasAfter: true, +// }, +// ], +// }], +// }); +// })(); diff --git a/packages/lit-dev-tutorial-plugin/src/tree-items/before-after-dir.ts b/packages/lit-dev-tutorial-plugin/src/tree-items/before-after-dir.ts index 85e4b8d87..e718837cb 100644 --- a/packages/lit-dev-tutorial-plugin/src/tree-items/before-after-dir.ts +++ b/packages/lit-dev-tutorial-plugin/src/tree-items/before-after-dir.ts @@ -37,7 +37,7 @@ export class BeforeAfterDir extends vscode.TreeItem { return; } - fs.rmdirSync(this.path, {recursive: true}); + fs.rmSync(this.path, {recursive: true}); this.tutorialStep.hasAfter = false; diff --git a/packages/lit-dev-tutorial-plugin/src/tree-items/tutorial-step.ts b/packages/lit-dev-tutorial-plugin/src/tree-items/tutorial-step.ts index 914e67031..a2eac0ab0 100644 --- a/packages/lit-dev-tutorial-plugin/src/tree-items/tutorial-step.ts +++ b/packages/lit-dev-tutorial-plugin/src/tree-items/tutorial-step.ts @@ -117,7 +117,7 @@ export class TutorialStep extends vscode.TreeItem { fs.writeFileSync(tutorialJsonPath, JSON.stringify(tutorialJson, null, 2)); - fs.rmdirSync(this.path, {recursive: true}); + fs.rmSync(this.path, {recursive: true}); fs.rmSync( path.join( this.provider.siteTutorialsContentPath, diff --git a/packages/lit-dev-tutorial-plugin/src/tree-items/tutorial.ts b/packages/lit-dev-tutorial-plugin/src/tree-items/tutorial.ts index 60c76e178..785d17804 100644 --- a/packages/lit-dev-tutorial-plugin/src/tree-items/tutorial.ts +++ b/packages/lit-dev-tutorial-plugin/src/tree-items/tutorial.ts @@ -222,8 +222,8 @@ export class Tutorial extends vscode.TreeItem { } delete() { - fs.rmdirSync(this.path, {recursive: true}); - fs.rmdirSync( + fs.rmSync(this.path, {recursive: true}); + fs.rmSync( path.join(this.provider.siteTutorialsContentPath, this.dirName), {recursive: true} ); From 0197ec569775ad4e990b6fa236779664088f7bc1 Mon Sep 17 00:00:00 2001 From: e111077 <5981958+e111077@users.noreply.github.com> Date: Wed, 6 Apr 2022 14:31:43 -0700 Subject: [PATCH 08/10] add solve button hiding functionality --- packages/lit-dev-tutorial-plugin/package.json | 20 ++++ .../lit-dev-tutorial-plugin/src/extension.ts | 8 ++ .../src/tree-items/before-after-dir.ts | 8 +- .../src/tree-items/tutorial-step.ts | 112 ++++++++++++++++-- .../src/tree-provider.ts | 21 +++- packages/lit-dev-tutorial-plugin/src/types.ts | 1 + 6 files changed, 156 insertions(+), 14 deletions(-) diff --git a/packages/lit-dev-tutorial-plugin/package.json b/packages/lit-dev-tutorial-plugin/package.json index fa39bb514..9cd76216c 100644 --- a/packages/lit-dev-tutorial-plugin/package.json +++ b/packages/lit-dev-tutorial-plugin/package.json @@ -102,6 +102,16 @@ "command": "litDevTutorial.renameStep", "when": "view == litDevTutorial && viewItem =~ /^tutorial-step/", "group": "files" + }, + { + "command": "litDevTutorial.makeSolvable", + "when": "view == litDevTutorial && viewItem =~ /^tutorial-step.*-unsolvable/", + "group": "files" + }, + { + "command": "litDevTutorial.makeUnsolvable", + "when": "view == litDevTutorial && viewItem =~ /^tutorial-step.*-solvable/", + "group": "files" } ] }, @@ -155,6 +165,16 @@ "command": "litDevTutorial.renameStep", "title": "Rename", "icon": "$(edit)" + }, + { + "command": "litDevTutorial.makeSolvable", + "title": "Show Solve Button", + "icon": "$(verified)" + }, + { + "command": "litDevTutorial.makeUnsolvable", + "title": "Hide Solve Button", + "icon": "$(unverified)" } ] }, diff --git a/packages/lit-dev-tutorial-plugin/src/extension.ts b/packages/lit-dev-tutorial-plugin/src/extension.ts index 00a25cff0..55b8ba098 100644 --- a/packages/lit-dev-tutorial-plugin/src/extension.ts +++ b/packages/lit-dev-tutorial-plugin/src/extension.ts @@ -51,6 +51,14 @@ export async function activate() { vscode.commands.registerCommand('litDevTutorial.delete', (item: TutorialTreeItem) => { item.delete(); }); + vscode.commands.registerCommand('litDevTutorial.makeSolvable', (item: TutorialStep) => { + item.solvable = true; + item.provider.refresh(); + }); + vscode.commands.registerCommand('litDevTutorial.makeUnsolvable', (item: TutorialStep) => { + item.solvable = false; + item.provider.refresh(); + }); vscode.commands.registerCommand('litDevTutorial.createPlaygroundFile', (dir: BeforeAfterDir) => { PlaygroundFile.create(dir); }); diff --git a/packages/lit-dev-tutorial-plugin/src/tree-items/before-after-dir.ts b/packages/lit-dev-tutorial-plugin/src/tree-items/before-after-dir.ts index e718837cb..e4982e68e 100644 --- a/packages/lit-dev-tutorial-plugin/src/tree-items/before-after-dir.ts +++ b/packages/lit-dev-tutorial-plugin/src/tree-items/before-after-dir.ts @@ -39,6 +39,7 @@ export class BeforeAfterDir extends vscode.TreeItem { fs.rmSync(this.path, {recursive: true}); + this.tutorialStep.afterDir = undefined; this.tutorialStep.hasAfter = false; const tutorialJsonPath = path.join( @@ -51,10 +52,8 @@ export class BeforeAfterDir extends vscode.TreeItem { const steps = tutorialJson.steps; const step = steps[this.tutorialStep.step]; - if (step) { - if (this.name === 'after') { - delete step.hasAfter; - } + if (step && this.name === 'after') { + delete step.hasAfter; } fs.writeFileSync(tutorialJsonPath, JSON.stringify(tutorialJson, null, 2)); @@ -78,6 +77,7 @@ export class BeforeAfterDir extends vscode.TreeItem { if (tutorialJson) { tutorialJson.steps[tutorialStep.step].hasAfter = true; + delete tutorialJson.steps[tutorialStep.step].noSolve; } tutorialStep.hasAfter = true; diff --git a/packages/lit-dev-tutorial-plugin/src/tree-items/tutorial-step.ts b/packages/lit-dev-tutorial-plugin/src/tree-items/tutorial-step.ts index a2eac0ab0..11c04ff41 100644 --- a/packages/lit-dev-tutorial-plugin/src/tree-items/tutorial-step.ts +++ b/packages/lit-dev-tutorial-plugin/src/tree-items/tutorial-step.ts @@ -17,6 +17,8 @@ export class TutorialStep extends vscode.TreeItem { private _step = -1; private _hasAfter = false; checkable = false; + beforeDir!: BeforeAfterDir; + afterDir: BeforeAfterDir|undefined = undefined; get dirName() { return `${this.step}`.padStart(2, '0'); @@ -60,24 +62,82 @@ export class TutorialStep extends vscode.TreeItem { } set hasAfter(value: boolean) { + if (this._hasAfter === value) { + return; + } + this._hasAfter = value; - this.contextValue = this.generateContextValue(); + + const tutorialJsonPath = path.join( + this.tutorial.path, + 'tutorial.json' + ); + let tutorialJson = getJson(tutorialJsonPath)!; + + if (value) { + this.solvable = true; + tutorialJson = getJson(tutorialJsonPath)!; + tutorialJson.steps[this.step].hasAfter = true; + } else { + if (this.afterDir) { + this.afterDir.delete(); + } + delete tutorialJson.steps[this.step].hasAfter; + } + + fs.writeFileSync(tutorialJsonPath, JSON.stringify(tutorialJson, null, 2)); + this.updateContextValue(); + } + + private _solvable = false; + + set solvable(solvable: boolean) { + if (this._solvable === solvable) { + return; + } + + this._solvable = solvable; + const tutorialJsonPath = path.join( + this.tutorial.path, + 'tutorial.json' + ); + let tutorialJson = getJson(tutorialJsonPath)!; + + if (solvable) { + delete tutorialJson.steps[this.step].noSolve; + + } else { + this.hasAfter = false; + tutorialJson = getJson(tutorialJsonPath)!; + + tutorialJson.steps[this.step].noSolve = true; + } + + fs.writeFileSync(tutorialJsonPath, JSON.stringify(tutorialJson, null, 2)); + this.updateContextValue(); + } + + get solvable() { + return this._solvable; } constructor( public provider: LitDevTutorialTreeProvider, public tutorial: Tutorial, - step: string + step: string, + solvable: boolean ) { super( vscode.Uri.file(path.join(tutorial.path, step)), vscode.TreeItemCollapsibleState.Collapsed ); + this._solvable = solvable; this.tutorial.pushStep(this); this.step = Number(step); this.tooltip = this.dirName; this.fetchMetadata(); + this.contextValue = this.generateContextValue(); } updateContextValue() { @@ -106,8 +166,9 @@ export class TutorialStep extends vscode.TreeItem { const first = this.step === 0 ? '' : '-up'; const last = this.step === this.tutorial.steps.length - 1 ? '' : '-down'; const afterVal = this.hasAfter ? '' : '-add'; + const solvable = this.solvable ? '-solvable' : '-unsolvable'; - return `tutorial-step${first}${last}${afterVal}`; + return `tutorial-step${first}${last}${afterVal}${solvable}`; } deleteFiles() { @@ -158,11 +219,34 @@ export class TutorialStep extends vscode.TreeItem { return; } + const isSolvableStr = await vscode.window.showQuickPick(['Yes', 'No'],{ + title: 'Should this step have a "solve" button?', + }); + + if (!isSolvableStr) { + return; + } + + const hideSolve = isSolvableStr !== 'Yes'; + let hasAfter = false; + + if (!hideSolve) { + const hasAfterStr = await vscode.window.showQuickPick(['Yes', 'No'],{ + title: 'Is "after" step the "before" of the next step?', + }); + + if (!hasAfterStr) { + return; + } + + hasAfter = hasAfterStr === 'Yes'; + } + const checkableRaw = await vscode.window.showQuickPick(['Yes', 'No'], { placeHolder: 'Is this step checkable?', }); - if (checkableRaw === undefined) { + if (!checkableRaw) { return; } @@ -188,15 +272,29 @@ export class TutorialStep extends vscode.TreeItem { if (checkable) { jsonStep.checkable = true; } + + if (hideSolve) { + jsonStep.noSolve = true; + } + + if (hasAfter) { + jsonStep.hasAfter = true; + } + tutorialJson.steps.push(jsonStep); fs.writeFileSync(tutorialJsonPath, JSON.stringify(tutorialJson, null, 2)); - const step = new TutorialStep(provider, tutorial, dirName); + const step = new TutorialStep(provider, tutorial, dirName, hideSolve); tutorial.pushStep(step); - BeforeAfterDir.create(step, 'before'); - BeforeAfterDir.create(step, 'after'); + const beforeStep = BeforeAfterDir.create(step, 'before'); + step.beforeDir = beforeStep; + + if (hasAfter && !hideSolve) { + const afterStep = BeforeAfterDir.create(step, 'after'); + step.afterDir = afterStep; + } provider.refresh(); return step; diff --git a/packages/lit-dev-tutorial-plugin/src/tree-provider.ts b/packages/lit-dev-tutorial-plugin/src/tree-provider.ts index 0c41d8215..430d5c3df 100644 --- a/packages/lit-dev-tutorial-plugin/src/tree-provider.ts +++ b/packages/lit-dev-tutorial-plugin/src/tree-provider.ts @@ -13,6 +13,7 @@ import {TutorialStep} from './tree-items/tutorial-step'; import {getJson} from './fs-helpers'; import {BeforeAfterDir} from './tree-items/before-after-dir'; import {PlaygroundFile} from './tree-items/playground-file'; +import { TutorialJson } from './types'; interface PackageJson { name?: string; @@ -135,8 +136,14 @@ export class LitDevTutorialTreeProvider file.isFile() ); + const tutorialJson = getJson(path.join(element.path, 'tutorial.json'))!; + const jsonSteps = tutorialJson.steps; + const steps = tutorialStepEntries.map( - (step) => new TutorialStep(this, element, step.name) + (step, index) => { + const jsonStep = jsonSteps[index]; + return new TutorialStep(this, element, step.name, !jsonStep.noSolve) + } ); const files = tutorialFileEntries.map( (file) => new GenericFile(this, path.join(tutorialPath, file.name)) @@ -153,8 +160,16 @@ export class LitDevTutorialTreeProvider ).reverse(); const beforeAfterDirs = tutorialDirEntries.map( - (entry) => - new BeforeAfterDir(this, element, entry.name as 'before' | 'after') + (entry) => { + const dir = new BeforeAfterDir(this, element, entry.name as 'before' | 'after') + if (entry.name === 'before') { + element.beforeDir = dir; + } else if (entry.name === 'after') { + element.afterDir = dir; + } + + return dir; + } ); const stepInstructionsMdFile = new GenericFile( diff --git a/packages/lit-dev-tutorial-plugin/src/types.ts b/packages/lit-dev-tutorial-plugin/src/types.ts index a26d7fbe4..593bb508e 100644 --- a/packages/lit-dev-tutorial-plugin/src/types.ts +++ b/packages/lit-dev-tutorial-plugin/src/types.ts @@ -13,6 +13,7 @@ export interface TutorialJsonStep { title: string; hasAfter?: boolean; checkable?: boolean; + noSolve?: boolean; } export interface TutorialJson { header: string; From ce704cd0852564635519600348600ef0a086823a Mon Sep 17 00:00:00 2001 From: Elliott Marquez <5981958+e111077@users.noreply.github.com> Date: Mon, 18 Mar 2024 17:10:42 -0700 Subject: [PATCH 09/10] rebase extension --- package-lock.json | 1085 ++++- package.json | 3 +- .../site/learn/learn.11tydata.js | 2 +- .../lit-dev-tutorial-plugin/package-lock.json | 3538 ----------------- packages/lit-dev-tutorial-plugin/package.json | 51 +- .../lit-dev-tutorial-plugin/src/fs-helpers.ts | 9 +- .../src/test/suite/extension.test.ts | 1 + .../src/test/suite/index.ts | 58 +- .../lit-dev-tutorial-plugin/src/test/util.ts | 32 +- .../src/tree-items/before-after-dir.ts | 31 +- .../src/tree-items/tutorial-step.ts | 2 +- .../src/tree-items/tutorial.ts | 50 +- .../src/tree-provider.ts | 9 +- packages/lit-dev-tutorial-plugin/src/types.ts | 3 +- 14 files changed, 1162 insertions(+), 3712 deletions(-) delete mode 100644 packages/lit-dev-tutorial-plugin/package-lock.json diff --git a/package-lock.json b/package-lock.json index fb1ce78fc..e9e06079b 100644 --- a/package-lock.json +++ b/package-lock.json @@ -184,19 +184,6 @@ "dev": true, "license": "Python-2.0" }, - "node_modules/@11ty/eleventy/node_modules/cross-spawn": { - "version": "7.0.3", - "dev": true, - "license": "MIT", - "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - }, - "engines": { - "node": ">= 8" - } - }, "node_modules/@11ty/eleventy/node_modules/entities": { "version": "3.0.1", "dev": true, @@ -241,14 +228,6 @@ "markdown-it": "bin/markdown-it.js" } }, - "node_modules/@11ty/eleventy/node_modules/path-key": { - "version": "3.1.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, "node_modules/@11ty/eleventy/node_modules/semver": { "version": "7.5.4", "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", @@ -264,39 +243,6 @@ "node": ">=10" } }, - "node_modules/@11ty/eleventy/node_modules/shebang-command": { - "version": "2.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "shebang-regex": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@11ty/eleventy/node_modules/shebang-regex": { - "version": "3.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/@11ty/eleventy/node_modules/which": { - "version": "2.0.2", - "dev": true, - "license": "ISC", - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" - }, - "engines": { - "node": ">= 8" - } - }, "node_modules/@11ty/lodash-custom": { "version": "4.17.21", "dev": true, @@ -513,6 +459,102 @@ "dev": true, "license": "ISC" }, + "node_modules/@isaacs/cliui": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", + "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", + "dev": true, + "dependencies": { + "string-width": "^5.1.2", + "string-width-cjs": "npm:string-width@^4.2.0", + "strip-ansi": "^7.0.1", + "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", + "wrap-ansi": "^8.1.0", + "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@isaacs/cliui/node_modules/ansi-regex": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", + "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/@isaacs/cliui/node_modules/ansi-styles": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@isaacs/cliui/node_modules/emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", + "dev": true + }, + "node_modules/@isaacs/cliui/node_modules/string-width": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "dev": true, + "dependencies": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@isaacs/cliui/node_modules/strip-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "dev": true, + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/@isaacs/cliui/node_modules/wrap-ansi": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", + "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^6.1.0", + "string-width": "^5.0.1", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, "node_modules/@jridgewell/gen-mapping": { "version": "0.3.1", "dev": true, @@ -1649,6 +1691,16 @@ "url": "https://github.com/inikulin/parse5?sponsor=1" } }, + "node_modules/@pkgjs/parseargs": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", + "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", + "dev": true, + "optional": true, + "engines": { + "node": ">=14" + } + }, "node_modules/@rollup/plugin-node-resolve": { "version": "13.3.0", "license": "MIT", @@ -2025,6 +2077,12 @@ "dev": true, "license": "MIT" }, + "node_modules/@types/mocha": { + "version": "10.0.6", + "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-10.0.6.tgz", + "integrity": "sha512-dJvrYWxP/UcXm36Qn36fxhUKu8A/xMRXVT2cliFF1Z7UA9liG5Psj3ezNSZw+5puH2czDXRLcXQxf8JbJt0ejg==", + "dev": true + }, "node_modules/@types/node": { "version": "16.11.41", "license": "MIT" @@ -2126,6 +2184,12 @@ "node": ">=0.10.0" } }, + "node_modules/@types/vscode": { + "version": "1.87.0", + "resolved": "https://registry.npmjs.org/@types/vscode/-/vscode-1.87.0.tgz", + "integrity": "sha512-y3yYJV2esWr8LNjp3VNbSMWG7Y43jC8pCldG8YwiHGAQbsymkkMMt0aDT1xZIOFM2eFcNiUc+dJMx1+Z0UT8fg==", + "dev": true + }, "node_modules/@types/ws": { "version": "7.4.7", "license": "MIT", @@ -2133,6 +2197,36 @@ "@types/node": "*" } }, + "node_modules/@vscode/test-electron": { + "version": "2.3.9", + "resolved": "https://registry.npmjs.org/@vscode/test-electron/-/test-electron-2.3.9.tgz", + "integrity": "sha512-z3eiChaCQXMqBnk2aHHSEkobmC2VRalFQN0ApOAtydL172zXGxTwGrRtviT5HnUB+Q+G3vtEYFtuQkYqBzYgMA==", + "dev": true, + "dependencies": { + "http-proxy-agent": "^4.0.1", + "https-proxy-agent": "^5.0.0", + "jszip": "^3.10.1", + "semver": "^7.5.2" + }, + "engines": { + "node": ">=16" + } + }, + "node_modules/@vscode/test-electron/node_modules/semver": { + "version": "7.6.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz", + "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/@web/config-loader": { "version": "0.1.3", "license": "MIT", @@ -2352,6 +2446,15 @@ "@algolia/transporter": "4.14.2" } }, + "node_modules/ansi-colors": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", + "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", + "dev": true, + "engines": { + "node": ">=6" + } + }, "node_modules/ansi-escape-sequences": { "version": "6.2.1", "license": "MIT", @@ -2791,6 +2894,12 @@ "version": "1.0.0", "license": "BSD-2-Clause" }, + "node_modules/browser-stdout": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", + "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==", + "dev": true + }, "node_modules/btoa-lite": { "version": "1.0.0", "license": "MIT" @@ -3049,6 +3158,17 @@ "@colors/colors": "1.5.0" } }, + "node_modules/cliui": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", + "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", + "dev": true, + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" + } + }, "node_modules/clone": { "version": "2.1.2", "license": "MIT", @@ -3263,6 +3383,20 @@ "version": "1.0.3", "license": "MIT" }, + "node_modules/cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dev": true, + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, "node_modules/css-select": { "version": "5.1.0", "dev": true, @@ -3356,6 +3490,18 @@ } } }, + "node_modules/decamelize": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-4.0.0.tgz", + "integrity": "sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/decimal.js": { "version": "10.3.1", "license": "MIT" @@ -3594,6 +3740,12 @@ "node_modules/duplexer": { "version": "0.1.1" }, + "node_modules/eastasianwidth": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", + "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", + "dev": true + }, "node_modules/ecdsa-sig-formatter": { "version": "1.0.11", "license": "Apache-2.0", @@ -3688,6 +3840,15 @@ "version": "0.9.3", "license": "MIT" }, + "node_modules/escalade": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.2.tgz", + "integrity": "sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==", + "dev": true, + "engines": { + "node": ">=6" + } + }, "node_modules/escape-html": { "version": "1.0.3", "license": "MIT" @@ -3954,6 +4115,31 @@ "node": ">=6" } }, + "node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/flat": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", + "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", + "dev": true, + "bin": { + "flat": "cli.js" + } + }, "node_modules/for-each": { "version": "0.3.3", "license": "MIT", @@ -3962,6 +4148,34 @@ "is-callable": "^1.1.3" } }, + "node_modules/foreground-child": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.1.1.tgz", + "integrity": "sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==", + "dev": true, + "dependencies": { + "cross-spawn": "^7.0.0", + "signal-exit": "^4.0.1" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/foreground-child/node_modules/signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "dev": true, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, "node_modules/form-data": { "version": "4.0.0", "license": "MIT", @@ -4175,6 +4389,15 @@ "webidl-conversions": "^3.0.0" } }, + "node_modules/get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "dev": true, + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, "node_modules/get-intrinsic": { "version": "1.2.0", "license": "MIT", @@ -4763,6 +4986,12 @@ "license": "BSD-3-Clause", "optional": true }, + "node_modules/immediate": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.0.6.tgz", + "integrity": "sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ==", + "dev": true + }, "node_modules/indent-string": { "version": "4.0.0", "license": "MIT", @@ -4998,6 +5227,15 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/is-plain-obj": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", + "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, "node_modules/is-plain-object": { "version": "5.0.0", "license": "MIT", @@ -5070,6 +5308,18 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/is-unicode-supported": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", + "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/is-wsl": { "version": "2.2.0", "license": "MIT", @@ -5103,8 +5353,9 @@ }, "node_modules/isexe": { "version": "2.0.0", - "dev": true, - "license": "ISC" + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true }, "node_modules/iso-639-1": { "version": "2.1.15", @@ -5114,6 +5365,24 @@ "node": ">=6.0" } }, + "node_modules/jackspeak": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-2.3.6.tgz", + "integrity": "sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ==", + "dev": true, + "dependencies": { + "@isaacs/cliui": "^8.0.2" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + }, + "optionalDependencies": { + "@pkgjs/parseargs": "^0.11.0" + } + }, "node_modules/jake": { "version": "10.8.5", "dev": true, @@ -5420,10 +5689,22 @@ "promise": "^7.0.1" } }, - "node_modules/junk": { - "version": "1.0.3", + "node_modules/jszip": { + "version": "3.10.1", + "resolved": "https://registry.npmjs.org/jszip/-/jszip-3.10.1.tgz", + "integrity": "sha512-xXDvecyTpGLrqFrvkrUSoxxfJI5AH7U8zxxtVclpsUtMCq4JQ290LY8AW5c7Ggnr/Y/oK+bQMbqK2qmtk3pN4g==", "dev": true, - "license": "MIT", + "dependencies": { + "lie": "~3.3.0", + "pako": "~1.0.2", + "readable-stream": "~2.3.6", + "setimmediate": "^1.0.5" + } + }, + "node_modules/junk": { + "version": "1.0.3", + "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -5576,6 +5857,15 @@ "node": ">= 0.8.0" } }, + "node_modules/lie": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/lie/-/lie-3.3.0.tgz", + "integrity": "sha512-UaiMJzeWRlEujzAuw5LokY1L5ecNQYZKfmyZ9L7wDHb/p5etKaxXhohBcrw0EYby+G/NA52vRSN4N39dxHAIwQ==", + "dev": true, + "dependencies": { + "immediate": "~3.0.5" + } + }, "node_modules/limited-request-queue": { "version": "2.0.0", "license": "MIT", @@ -5676,6 +5966,10 @@ "resolved": "packages/lit-dev-tools-esm", "link": true }, + "node_modules/lit-dev-tutorial-editor": { + "resolved": "packages/lit-dev-tutorial-plugin", + "link": true + }, "node_modules/lit-element": { "version": "3.3.3", "resolved": "https://registry.npmjs.org/lit-element/-/lit-element-3.3.3.tgz", @@ -5694,6 +5988,21 @@ "@types/trusted-types": "^2.0.2" } }, + "node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, + "dependencies": { + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/lodash": { "version": "4.17.21", "license": "MIT" @@ -5727,6 +6036,92 @@ "version": "4.5.0", "license": "MIT" }, + "node_modules/log-symbols": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", + "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", + "dev": true, + "dependencies": { + "chalk": "^4.1.0", + "is-unicode-supported": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/log-symbols/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/log-symbols/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/log-symbols/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/log-symbols/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/log-symbols/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/log-symbols/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/lower-case": { "version": "1.1.4", "dev": true, @@ -6001,6 +6396,159 @@ "mkdirp": "bin/cmd.js" } }, + "node_modules/mocha": { + "version": "10.3.0", + "resolved": "https://registry.npmjs.org/mocha/-/mocha-10.3.0.tgz", + "integrity": "sha512-uF2XJs+7xSLsrmIvn37i/wnc91nw7XjOQB8ccyx5aEgdnohr7n+rEiZP23WkCYHjilR6+EboEnbq/ZQDz4LSbg==", + "dev": true, + "dependencies": { + "ansi-colors": "4.1.1", + "browser-stdout": "1.3.1", + "chokidar": "3.5.3", + "debug": "4.3.4", + "diff": "5.0.0", + "escape-string-regexp": "4.0.0", + "find-up": "5.0.0", + "glob": "8.1.0", + "he": "1.2.0", + "js-yaml": "4.1.0", + "log-symbols": "4.1.0", + "minimatch": "5.0.1", + "ms": "2.1.3", + "serialize-javascript": "6.0.0", + "strip-json-comments": "3.1.1", + "supports-color": "8.1.1", + "workerpool": "6.2.1", + "yargs": "16.2.0", + "yargs-parser": "20.2.4", + "yargs-unparser": "2.0.0" + }, + "bin": { + "_mocha": "bin/_mocha", + "mocha": "bin/mocha.js" + }, + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/mocha/node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true + }, + "node_modules/mocha/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/mocha/node_modules/diff": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/diff/-/diff-5.0.0.tgz", + "integrity": "sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==", + "dev": true, + "engines": { + "node": ">=0.3.1" + } + }, + "node_modules/mocha/node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/mocha/node_modules/glob": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz", + "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^5.0.1", + "once": "^1.3.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/mocha/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/mocha/node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/mocha/node_modules/minimatch": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.0.1.tgz", + "integrity": "sha512-nLDxIFRyhDblz3qMuq+SoRZED4+miJ/G+tdDrjkkkRnjAsBexeGpgjLEQ0blJy7rHhR2b93rhQY4SvyWu9v03g==", + "dev": true, + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/mocha/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true + }, + "node_modules/mocha/node_modules/serialize-javascript": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz", + "integrity": "sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==", + "dev": true, + "dependencies": { + "randombytes": "^2.1.0" + } + }, + "node_modules/mocha/node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, "node_modules/moo": { "version": "0.5.2", "dev": true, @@ -6380,6 +6928,42 @@ "version": "0.8.0", "license": "MIT" }, + "node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, + "dependencies": { + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/pako": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz", + "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==", + "dev": true + }, "node_modules/param-case": { "version": "2.1.1", "dev": true, @@ -6440,6 +7024,15 @@ "node": ">= 0.8" } }, + "node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, "node_modules/path-is-absolute": { "version": "1.0.1", "license": "MIT", @@ -6447,10 +7040,53 @@ "node": ">=0.10.0" } }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, "node_modules/path-parse": { "version": "1.0.7", "license": "MIT" }, + "node_modules/path-scurry": { + "version": "1.10.1", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.10.1.tgz", + "integrity": "sha512-MkhCqzzBEpPvxxQ71Md0b1Kk51W01lrYvlMzSUaIzNsODdd7mqhiimSZlr+VegAz5Z6Vzt9Xg2ttE//XBhH3EQ==", + "dev": true, + "dependencies": { + "lru-cache": "^9.1.1 || ^10.0.0", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/path-scurry/node_modules/lru-cache": { + "version": "10.2.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.2.0.tgz", + "integrity": "sha512-2bIM8x+VAf6JT4bKAljS1qUWgMsqZRPGJS6FSahIMPVvctcNhyVp7AJu7quxOW9jwkryBReKZY5tY5JYv2n/7Q==", + "dev": true, + "engines": { + "node": "14 || >=16.14" + } + }, + "node_modules/path-scurry/node_modules/minipass": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.4.tgz", + "integrity": "sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==", + "dev": true, + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, "node_modules/path-to-regexp": { "version": "6.2.1", "dev": true, @@ -7045,6 +7681,15 @@ "node": ">= 0.10" } }, + "node_modules/require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/requires-port": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", @@ -7334,10 +7979,37 @@ "randombytes": "^2.1.0" } }, + "node_modules/setimmediate": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", + "integrity": "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==", + "dev": true + }, "node_modules/setprototypeof": { "version": "1.2.0", "license": "ISC" }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true, + "engines": { + "node": ">=8" + } + }, "node_modules/shiki": { "version": "0.14.2", "license": "MIT", @@ -7515,6 +8187,21 @@ "node": ">=8" } }, + "node_modules/string-width-cjs": { + "name": "string-width", + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/strip-ansi": { "version": "6.0.1", "dev": true, @@ -7526,6 +8213,19 @@ "node": ">=8" } }, + "node_modules/strip-ansi-cjs": { + "name": "strip-ansi", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/strip-bom-string": { "version": "1.0.0", "dev": true, @@ -7541,6 +8241,18 @@ "node": ">=10" } }, + "node_modules/strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/striptags": { "version": "3.2.0", "license": "MIT" @@ -8186,6 +8898,21 @@ "node": ">=12" } }, + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, "node_modules/which-typed-array": { "version": "1.1.9", "license": "MIT", @@ -8285,6 +9012,113 @@ "node": ">=8" } }, + "node_modules/workerpool": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.2.1.tgz", + "integrity": "sha512-ILEIE97kDZvF9Wb9f6h5aXK4swSlKGUcOEGiIYb2OOu/IrDU9iwj0fD//SsA6E5ibwJxpEvhullJY4Sl4GcpAw==", + "dev": true + }, + "node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrap-ansi-cjs": { + "name": "wrap-ansi", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/wrap-ansi/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/wrap-ansi/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/wrap-ansi/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, "node_modules/wrappy": { "version": "1.0.2", "license": "ISC" @@ -8343,10 +9177,61 @@ "node": ">=0.4" } }, + "node_modules/y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "dev": true, + "engines": { + "node": ">=10" + } + }, "node_modules/yallist": { "version": "4.0.0", "license": "ISC" }, + "node_modules/yargs": { + "version": "16.2.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", + "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", + "dev": true, + "dependencies": { + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.0", + "y18n": "^5.0.5", + "yargs-parser": "^20.2.2" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/yargs-parser": { + "version": "20.2.4", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.4.tgz", + "integrity": "sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/yargs-unparser": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-2.0.0.tgz", + "integrity": "sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==", + "dev": true, + "dependencies": { + "camelcase": "^6.0.0", + "decamelize": "^4.0.0", + "flat": "^5.0.2", + "is-plain-obj": "^2.1.0" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/ylru": { "version": "1.3.2", "license": "MIT", @@ -8354,6 +9239,18 @@ "node": ">= 4.0.0" } }, + "node_modules/yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "packages/lit-dev-api": { "version": "0.0.0", "license": "BSD-3-Clause", @@ -8589,6 +9486,76 @@ "lit-dev-tools-cjs": "^0.0.0", "prettier": "^2.3.2" } + }, + "packages/lit-dev-tutorial-plugin": { + "version": "0.0.0", + "license": "BSD-3-Clause", + "devDependencies": { + "@types/mocha": "^10.0.6", + "@types/node": "^16.0.0", + "@types/vscode": "^1.87.0", + "@vscode/test-electron": "^2.3.9", + "glob": "^10.3.0", + "mocha": "^10.0.6" + }, + "engines": { + "vscode": "^1.65.0" + } + }, + "packages/lit-dev-tutorial-plugin/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "packages/lit-dev-tutorial-plugin/node_modules/glob": { + "version": "10.3.10", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.10.tgz", + "integrity": "sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g==", + "dev": true, + "dependencies": { + "foreground-child": "^3.1.0", + "jackspeak": "^2.3.5", + "minimatch": "^9.0.1", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0", + "path-scurry": "^1.10.1" + }, + "bin": { + "glob": "dist/esm/bin.mjs" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "packages/lit-dev-tutorial-plugin/node_modules/minimatch": { + "version": "9.0.3", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", + "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", + "dev": true, + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "packages/lit-dev-tutorial-plugin/node_modules/minipass": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.4.tgz", + "integrity": "sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==", + "dev": true, + "engines": { + "node": ">=16 || 14 >=14.17" + } } } } diff --git a/package.json b/package.json index 862d93795..357aec7b1 100644 --- a/package.json +++ b/package.json @@ -32,7 +32,8 @@ "./packages/lit-dev-server:build", "./packages/lit-dev-tests:build", "./packages/lit-dev-tools-cjs:build", - "./packages/lit-dev-tools-esm:build" + "./packages/lit-dev-tools-esm:build", + "./packages/lit-dev-tutorial-plugin:build" ] }, "start": { diff --git a/packages/lit-dev-content/site/learn/learn.11tydata.js b/packages/lit-dev-content/site/learn/learn.11tydata.js index 6e3104857..242be2083 100644 --- a/packages/lit-dev-content/site/learn/learn.11tydata.js +++ b/packages/lit-dev-content/site/learn/learn.11tydata.js @@ -67,7 +67,7 @@ module.exports = {eleventyComputed: {learn: async (data) => { url, date } = content; - if (!title || !summary || !['article', 'tutorial', 'video'].includes(kind) || !url || !date) { + if (!title || summary === undefined || !['article', 'tutorial', 'video'].includes(kind) || !url || !date) { throw new Error(`Invalid content shape for: ${JSON.stringify(content)}`); } if (kind === "tutorial") { diff --git a/packages/lit-dev-tutorial-plugin/package-lock.json b/packages/lit-dev-tutorial-plugin/package-lock.json deleted file mode 100644 index d0857b022..000000000 --- a/packages/lit-dev-tutorial-plugin/package-lock.json +++ /dev/null @@ -1,3538 +0,0 @@ -{ - "name": "lit-dev-tutorial-editor", - "version": "0.0.1", - "lockfileVersion": 2, - "requires": true, - "packages": { - "": { - "name": "lit-dev-tutorial-editor", - "version": "0.0.1", - "devDependencies": { - "@types/glob": "^7.2.0", - "@types/mocha": "^9.1.0", - "@types/node": "14.x", - "@types/vscode": "^1.65.0", - "@vscode/test-electron": "^2.1.2", - "glob": "^7.2.0", - "mocha": "^9.2.1", - "playground-elements": "^0.15.2", - "typescript": "^4.5.5" - }, - "engines": { - "vscode": "^1.65.0" - } - }, - "node_modules/@lit/reactive-element": { - "version": "1.0.0-rc.4", - "resolved": "https://registry.npmjs.org/@lit/reactive-element/-/reactive-element-1.0.0-rc.4.tgz", - "integrity": "sha512-dJMha+4NFYdpnUJzRrWTFV5Hdp9QHWFuPnaoqonrKl4lGJVnYez9mu8ev9F/5KM47tjAjh22DuRHrdFDHfOijA==", - "dev": true - }, - "node_modules/@material/animation": { - "version": "14.0.0-canary.261f2db59.0", - "resolved": "https://registry.npmjs.org/@material/animation/-/animation-14.0.0-canary.261f2db59.0.tgz", - "integrity": "sha512-OjxWJYSRNs4vnPe8NclaNn+TsNc8TR/wHusGtezF5F+wl+5mh+K69BMXAmURtq3idoRg4XaOSC/Ohk1ovD1fMQ==", - "dev": true, - "dependencies": { - "tslib": "^2.1.0" - } - }, - "node_modules/@material/base": { - "version": "14.0.0-canary.261f2db59.0", - "resolved": "https://registry.npmjs.org/@material/base/-/base-14.0.0-canary.261f2db59.0.tgz", - "integrity": "sha512-vy5SQt+jcwwdRFfBvtpVdpULUBujecVUKOXcopaQoi2XIzI5EBHuR4gPN0cd1yfmVEucD6p2fvVv2FJ3Ngr61w==", - "dev": true, - "dependencies": { - "tslib": "^2.1.0" - } - }, - "node_modules/@material/density": { - "version": "14.0.0-canary.261f2db59.0", - "resolved": "https://registry.npmjs.org/@material/density/-/density-14.0.0-canary.261f2db59.0.tgz", - "integrity": "sha512-zOR5wISqPVr8KS/ERNC1jdRV9O832lzclyS9Ea20rDrWfuOiYsQ9bbIk12xWlxpgsn7r9fxQJyd1O2SURoHdRA==", - "dev": true, - "dependencies": { - "tslib": "^2.1.0" - } - }, - "node_modules/@material/dom": { - "version": "14.0.0-canary.261f2db59.0", - "resolved": "https://registry.npmjs.org/@material/dom/-/dom-14.0.0-canary.261f2db59.0.tgz", - "integrity": "sha512-iUpZG6Bb2l/PfNV2Fb/pXfG1p4Bz4PC9A7ATPlKfcU5HioObcnYVc/+Hrtaw8eu28BNIc+VVROtbfpqG/YgKSQ==", - "dev": true, - "dependencies": { - "@material/feature-targeting": "14.0.0-canary.261f2db59.0", - "tslib": "^2.1.0" - } - }, - "node_modules/@material/elevation": { - "version": "14.0.0-canary.261f2db59.0", - "resolved": "https://registry.npmjs.org/@material/elevation/-/elevation-14.0.0-canary.261f2db59.0.tgz", - "integrity": "sha512-AqN/tsTGGyBzZ7CtoSMBY9bDYvCuUt98EUfiGjZGXcf4HgoHV3Cn/JSLrhru5Cq8Nx6HF6AmHh3dQCfNCQduew==", - "dev": true, - "dependencies": { - "@material/animation": "14.0.0-canary.261f2db59.0", - "@material/base": "14.0.0-canary.261f2db59.0", - "@material/feature-targeting": "14.0.0-canary.261f2db59.0", - "@material/rtl": "14.0.0-canary.261f2db59.0", - "@material/theme": "14.0.0-canary.261f2db59.0", - "tslib": "^2.1.0" - } - }, - "node_modules/@material/feature-targeting": { - "version": "14.0.0-canary.261f2db59.0", - "resolved": "https://registry.npmjs.org/@material/feature-targeting/-/feature-targeting-14.0.0-canary.261f2db59.0.tgz", - "integrity": "sha512-CrVoGNu0ym52OPEKy3kgeNL2oSWOCBYbYxSH3GhERxCq5FwGBN+XmK/ZDLFVQlHYy3v8x4TqVEwXviCeumNTxQ==", - "dev": true, - "dependencies": { - "tslib": "^2.1.0" - } - }, - "node_modules/@material/floating-label": { - "version": "14.0.0-canary.261f2db59.0", - "resolved": "https://registry.npmjs.org/@material/floating-label/-/floating-label-14.0.0-canary.261f2db59.0.tgz", - "integrity": "sha512-Cp0/LngkW6/uZWbEDTe3Ox143V4kYtxl9twiM3XLKd6a67JHCzneQWFzC0qSg90b3r5O+1zOkT3ZMF2Pbu2Vwg==", - "dev": true, - "dependencies": { - "@material/animation": "14.0.0-canary.261f2db59.0", - "@material/base": "14.0.0-canary.261f2db59.0", - "@material/dom": "14.0.0-canary.261f2db59.0", - "@material/feature-targeting": "14.0.0-canary.261f2db59.0", - "@material/rtl": "14.0.0-canary.261f2db59.0", - "@material/theme": "14.0.0-canary.261f2db59.0", - "@material/typography": "14.0.0-canary.261f2db59.0", - "tslib": "^2.1.0" - } - }, - "node_modules/@material/line-ripple": { - "version": "14.0.0-canary.261f2db59.0", - "resolved": "https://registry.npmjs.org/@material/line-ripple/-/line-ripple-14.0.0-canary.261f2db59.0.tgz", - "integrity": "sha512-LlyiyxpHNlFt0PZ8Q2tvOPbjNcgm3L7tUebXsM7iGyoKXfj0HwyDI31S0KgtU3Vs5DIK4U4mnRWtoAxtBW6Jfg==", - "dev": true, - "dependencies": { - "@material/animation": "14.0.0-canary.261f2db59.0", - "@material/base": "14.0.0-canary.261f2db59.0", - "@material/feature-targeting": "14.0.0-canary.261f2db59.0", - "@material/theme": "14.0.0-canary.261f2db59.0", - "tslib": "^2.1.0" - } - }, - "node_modules/@material/linear-progress": { - "version": "14.0.0-canary.261f2db59.0", - "resolved": "https://registry.npmjs.org/@material/linear-progress/-/linear-progress-14.0.0-canary.261f2db59.0.tgz", - "integrity": "sha512-qP/iI4CT7i7HhXuUiNWL5pDN6tyTJ4uLl8e9QImz4mcQLUMU3xrNBIsutS+I5GnBE8FwLDozZFccfCxHh+pvzw==", - "dev": true, - "dependencies": { - "@material/animation": "14.0.0-canary.261f2db59.0", - "@material/base": "14.0.0-canary.261f2db59.0", - "@material/feature-targeting": "14.0.0-canary.261f2db59.0", - "@material/progress-indicator": "14.0.0-canary.261f2db59.0", - "@material/rtl": "14.0.0-canary.261f2db59.0", - "@material/theme": "14.0.0-canary.261f2db59.0", - "tslib": "^2.1.0" - } - }, - "node_modules/@material/list": { - "version": "14.0.0-canary.261f2db59.0", - "resolved": "https://registry.npmjs.org/@material/list/-/list-14.0.0-canary.261f2db59.0.tgz", - "integrity": "sha512-bjHXXk2ZeWxAFs4cJxy5J5A5ClUd3FGjRv/LwCYpsh7Dm7e8kSe8Lw2MWb6FXyF3mDJM6xqN3xXQWOh6UEu5wA==", - "dev": true, - "dependencies": { - "@material/base": "14.0.0-canary.261f2db59.0", - "@material/density": "14.0.0-canary.261f2db59.0", - "@material/dom": "14.0.0-canary.261f2db59.0", - "@material/feature-targeting": "14.0.0-canary.261f2db59.0", - "@material/ripple": "14.0.0-canary.261f2db59.0", - "@material/rtl": "14.0.0-canary.261f2db59.0", - "@material/shape": "14.0.0-canary.261f2db59.0", - "@material/theme": "14.0.0-canary.261f2db59.0", - "@material/typography": "14.0.0-canary.261f2db59.0", - "tslib": "^2.1.0" - } - }, - "node_modules/@material/menu": { - "version": "14.0.0-canary.261f2db59.0", - "resolved": "https://registry.npmjs.org/@material/menu/-/menu-14.0.0-canary.261f2db59.0.tgz", - "integrity": "sha512-x59UHoTLvEsPKjFdffrKTgEyc0T4W3m58RsizAmapXr59Uthq8+PTFOkAv9R1PV/ZCzxay7Vx+QcekC4qOr40A==", - "dev": true, - "dependencies": { - "@material/base": "14.0.0-canary.261f2db59.0", - "@material/dom": "14.0.0-canary.261f2db59.0", - "@material/elevation": "14.0.0-canary.261f2db59.0", - "@material/feature-targeting": "14.0.0-canary.261f2db59.0", - "@material/list": "14.0.0-canary.261f2db59.0", - "@material/menu-surface": "14.0.0-canary.261f2db59.0", - "@material/ripple": "14.0.0-canary.261f2db59.0", - "@material/rtl": "14.0.0-canary.261f2db59.0", - "@material/theme": "14.0.0-canary.261f2db59.0", - "tslib": "^2.1.0" - } - }, - "node_modules/@material/menu-surface": { - "version": "14.0.0-canary.261f2db59.0", - "resolved": "https://registry.npmjs.org/@material/menu-surface/-/menu-surface-14.0.0-canary.261f2db59.0.tgz", - "integrity": "sha512-zv/fv/W3zdSb+c/p6GNcOqA3+wAc/r8MOtV53WJPLlvZZSpGoTwHUp+GPiNeovfbsTSxN95XOXuVQBEfKEb8vA==", - "dev": true, - "dependencies": { - "@material/animation": "14.0.0-canary.261f2db59.0", - "@material/base": "14.0.0-canary.261f2db59.0", - "@material/elevation": "14.0.0-canary.261f2db59.0", - "@material/feature-targeting": "14.0.0-canary.261f2db59.0", - "@material/rtl": "14.0.0-canary.261f2db59.0", - "@material/shape": "14.0.0-canary.261f2db59.0", - "@material/theme": "14.0.0-canary.261f2db59.0", - "tslib": "^2.1.0" - } - }, - "node_modules/@material/mwc-base": { - "version": "0.25.3", - "resolved": "https://registry.npmjs.org/@material/mwc-base/-/mwc-base-0.25.3.tgz", - "integrity": "sha512-4wvxZ9dhPr0O4jjOHPmFyn77pafe+h1gHPlT9sbQ+ly8NY/fSn/TXn7/PbxgL8g4ZHxMvD3o7PJopg+6cbHp8Q==", - "dev": true, - "dependencies": { - "@lit/reactive-element": "1.0.0-rc.4", - "@material/base": "=14.0.0-canary.261f2db59.0", - "@material/dom": "=14.0.0-canary.261f2db59.0", - "lit": "^2.0.0", - "tslib": "^2.0.1" - } - }, - "node_modules/@material/mwc-button": { - "version": "0.25.3", - "resolved": "https://registry.npmjs.org/@material/mwc-button/-/mwc-button-0.25.3.tgz", - "integrity": "sha512-usHEKchj9hqetY7n0yebTz1Pk9Z+9W/sNZheFoSaiWQCv9XhtCdKkHH0MXTv8SpwxWuEKUf/XjtyvikGIcIn7w==", - "dev": true, - "dependencies": { - "@material/mwc-icon": "^0.25.3", - "@material/mwc-ripple": "^0.25.3", - "lit": "^2.0.0", - "tslib": "^2.0.1" - } - }, - "node_modules/@material/mwc-checkbox": { - "version": "0.25.3", - "resolved": "https://registry.npmjs.org/@material/mwc-checkbox/-/mwc-checkbox-0.25.3.tgz", - "integrity": "sha512-PSh9IAgQK4XiDzBwgclheejkA4cbZ3K9V1JTTl/YVRDD/OLLM+Bh8tbnAg/1kGVlPWOUfDrYCcZ0gg472ca7gw==", - "dev": true, - "dependencies": { - "@material/mwc-base": "^0.25.3", - "@material/mwc-ripple": "^0.25.3", - "lit": "^2.0.0", - "tslib": "^2.0.1" - } - }, - "node_modules/@material/mwc-floating-label": { - "version": "0.25.3", - "resolved": "https://registry.npmjs.org/@material/mwc-floating-label/-/mwc-floating-label-0.25.3.tgz", - "integrity": "sha512-3uFMi8Y680P0nzP5zih4YuOZJLl/C6Ux9G810Unwo44zblG/ckgJlFiM+T+oR+OH5KM8LbfNlV0ypo7FT5zYJA==", - "dev": true, - "dependencies": { - "@material/floating-label": "=14.0.0-canary.261f2db59.0", - "lit": "^2.0.0", - "tslib": "^2.0.1" - } - }, - "node_modules/@material/mwc-icon": { - "version": "0.25.3", - "resolved": "https://registry.npmjs.org/@material/mwc-icon/-/mwc-icon-0.25.3.tgz", - "integrity": "sha512-36076AWZIRSr8qYOLjuDDkxej/HA0XAosrj7TS1ZeLlUBnLUtbDtvc1S7KSa0hqez7ouzOqGaWK24yoNnTa2OA==", - "dev": true, - "dependencies": { - "lit": "^2.0.0", - "tslib": "^2.0.1" - } - }, - "node_modules/@material/mwc-icon-button": { - "version": "0.25.3", - "resolved": "https://registry.npmjs.org/@material/mwc-icon-button/-/mwc-icon-button-0.25.3.tgz", - "integrity": "sha512-FexkMpK3ZSHh7NF+PIqvVhvAbBOgFDYPck/lqnxIDC3VGJ0rjD/1MqevDy2fY6IcHGlc8Ai7VuYbdQ6Cvw8WcQ==", - "dev": true, - "dependencies": { - "@material/mwc-ripple": "^0.25.3", - "lit": "^2.0.0", - "tslib": "^2.0.1" - } - }, - "node_modules/@material/mwc-line-ripple": { - "version": "0.25.3", - "resolved": "https://registry.npmjs.org/@material/mwc-line-ripple/-/mwc-line-ripple-0.25.3.tgz", - "integrity": "sha512-ANJzSyumb+shBVTIhqF1+YByPU/EpFXxI9CS26qThFqlUDpYXg5xcoZpkMSmZv3Wv/loF1rs2mJfFWOcC6nFnw==", - "dev": true, - "dependencies": { - "@material/line-ripple": "=14.0.0-canary.261f2db59.0", - "lit": "^2.0.0", - "tslib": "^2.0.1" - } - }, - "node_modules/@material/mwc-linear-progress": { - "version": "0.25.3", - "resolved": "https://registry.npmjs.org/@material/mwc-linear-progress/-/mwc-linear-progress-0.25.3.tgz", - "integrity": "sha512-iAsM5zo78rYXXzwEg1RT0+jShxkUjOEUK0Yj6KxqxbXy1VKPTZ4HRB5Fy6wChWQi/Xl8wFlfI6nNAQtH7pakeA==", - "dev": true, - "dependencies": { - "@material/linear-progress": "=14.0.0-canary.261f2db59.0", - "@material/mwc-base": "^0.25.3", - "@material/theme": "=14.0.0-canary.261f2db59.0", - "lit": "^2.0.0", - "tslib": "^2.0.1" - } - }, - "node_modules/@material/mwc-list": { - "version": "0.25.3", - "resolved": "https://registry.npmjs.org/@material/mwc-list/-/mwc-list-0.25.3.tgz", - "integrity": "sha512-2T297qVaQsKv+QDNP2ag9g04RLKO1tm2F6BwwqvdbXTsY+LKYOJe2/aSe0kX2tQLayX4ydy2RnTevo9Ld+c+4g==", - "dev": true, - "dependencies": { - "@material/base": "=14.0.0-canary.261f2db59.0", - "@material/dom": "=14.0.0-canary.261f2db59.0", - "@material/list": "=14.0.0-canary.261f2db59.0", - "@material/mwc-base": "^0.25.3", - "@material/mwc-checkbox": "^0.25.3", - "@material/mwc-radio": "^0.25.3", - "@material/mwc-ripple": "^0.25.3", - "lit": "^2.0.0", - "tslib": "^2.0.1" - } - }, - "node_modules/@material/mwc-menu": { - "version": "0.25.3", - "resolved": "https://registry.npmjs.org/@material/mwc-menu/-/mwc-menu-0.25.3.tgz", - "integrity": "sha512-jr5R61BfqrJC0lsAI63y4BsEM2eY3n6kiCy2ZnwinmxrfFrS709T/zuSUUW/xG9b9inSku4WjjSkDhPzQrmS3g==", - "dev": true, - "dependencies": { - "@material/menu": "=14.0.0-canary.261f2db59.0", - "@material/menu-surface": "=14.0.0-canary.261f2db59.0", - "@material/mwc-base": "^0.25.3", - "@material/mwc-list": "^0.25.3", - "@material/shape": "=14.0.0-canary.261f2db59.0", - "@material/theme": "=14.0.0-canary.261f2db59.0", - "lit": "^2.0.0", - "tslib": "^2.0.1" - } - }, - "node_modules/@material/mwc-notched-outline": { - "version": "0.25.3", - "resolved": "https://registry.npmjs.org/@material/mwc-notched-outline/-/mwc-notched-outline-0.25.3.tgz", - "integrity": "sha512-8jvU8GD0Pke+pfTQ0PdXpZmkU3XIHhMVY6AHM/2IQrXHkVZmAm9kbwL7ne3Ao+6f5n+DeXDGd+SG9U6ZZjD7gw==", - "dev": true, - "dependencies": { - "@material/mwc-base": "^0.25.3", - "@material/notched-outline": "=14.0.0-canary.261f2db59.0", - "lit": "^2.0.0", - "tslib": "^2.0.1" - } - }, - "node_modules/@material/mwc-radio": { - "version": "0.25.3", - "resolved": "https://registry.npmjs.org/@material/mwc-radio/-/mwc-radio-0.25.3.tgz", - "integrity": "sha512-SXpVDrsQnz7+2w/kfBxcOJ4P+uJ0RxBd9mCLE7wVyN53gDLkNHqA0npdl2PNpRaaMavVrt27L8wWo5QIT+7zWA==", - "dev": true, - "dependencies": { - "@material/mwc-base": "^0.25.3", - "@material/mwc-ripple": "^0.25.3", - "@material/radio": "=14.0.0-canary.261f2db59.0", - "lit": "^2.0.0", - "tslib": "^2.0.1" - } - }, - "node_modules/@material/mwc-ripple": { - "version": "0.25.3", - "resolved": "https://registry.npmjs.org/@material/mwc-ripple/-/mwc-ripple-0.25.3.tgz", - "integrity": "sha512-G/gt/csxgME6/sAku3GiuB0O2LLvoPWsRTLq/9iABpaGLJjqaKHvNg/IVzNDdF3YZT7EORgR9cBWWl7umA4i4Q==", - "dev": true, - "dependencies": { - "@material/dom": "=14.0.0-canary.261f2db59.0", - "@material/mwc-base": "^0.25.3", - "@material/ripple": "=14.0.0-canary.261f2db59.0", - "lit": "^2.0.0", - "tslib": "^2.0.1" - } - }, - "node_modules/@material/mwc-textfield": { - "version": "0.25.3", - "resolved": "https://registry.npmjs.org/@material/mwc-textfield/-/mwc-textfield-0.25.3.tgz", - "integrity": "sha512-stpZ8sEyo2Mb9fG2XCoTc1Kom8oRXZiVI5rU88GtfcBU7nH0em8S4grq9X1mVfUG6Cfi1G/T+avCSIhzbYtr0w==", - "dev": true, - "dependencies": { - "@material/floating-label": "=14.0.0-canary.261f2db59.0", - "@material/line-ripple": "=14.0.0-canary.261f2db59.0", - "@material/mwc-base": "^0.25.3", - "@material/mwc-floating-label": "^0.25.3", - "@material/mwc-line-ripple": "^0.25.3", - "@material/mwc-notched-outline": "^0.25.3", - "@material/textfield": "=14.0.0-canary.261f2db59.0", - "lit": "^2.0.0", - "tslib": "^2.0.1" - } - }, - "node_modules/@material/notched-outline": { - "version": "14.0.0-canary.261f2db59.0", - "resolved": "https://registry.npmjs.org/@material/notched-outline/-/notched-outline-14.0.0-canary.261f2db59.0.tgz", - "integrity": "sha512-gtn+IKAiX2rbfbX3a9aDlfUoKCEYrlAPOZifKXUaZ4UJYMNLzZuAqy7l5Ds30emtqUE22mySTEWqhzK6dePKsA==", - "dev": true, - "dependencies": { - "@material/base": "14.0.0-canary.261f2db59.0", - "@material/feature-targeting": "14.0.0-canary.261f2db59.0", - "@material/floating-label": "14.0.0-canary.261f2db59.0", - "@material/rtl": "14.0.0-canary.261f2db59.0", - "@material/shape": "14.0.0-canary.261f2db59.0", - "@material/theme": "14.0.0-canary.261f2db59.0", - "tslib": "^2.1.0" - } - }, - "node_modules/@material/progress-indicator": { - "version": "14.0.0-canary.261f2db59.0", - "resolved": "https://registry.npmjs.org/@material/progress-indicator/-/progress-indicator-14.0.0-canary.261f2db59.0.tgz", - "integrity": "sha512-qm+zUMvFYhHuVB2OdgWTO/Dv1hMFEdIT3loX5OJMpvQ66l6rez/3F7blwHkm6W4mfuxRS3zdDdYbP5QdFcuHuA==", - "dev": true, - "dependencies": { - "tslib": "^2.1.0" - } - }, - "node_modules/@material/radio": { - "version": "14.0.0-canary.261f2db59.0", - "resolved": "https://registry.npmjs.org/@material/radio/-/radio-14.0.0-canary.261f2db59.0.tgz", - "integrity": "sha512-AvrsOqhP8UZ5d58RWgaTmQVlWQRULwk2BXhsEhtxz56CmTsyVM49thNbaNnc/TzuY9Ssxv/L2wYVbR2B3BX9Yw==", - "dev": true, - "dependencies": { - "@material/animation": "14.0.0-canary.261f2db59.0", - "@material/base": "14.0.0-canary.261f2db59.0", - "@material/density": "14.0.0-canary.261f2db59.0", - "@material/dom": "14.0.0-canary.261f2db59.0", - "@material/feature-targeting": "14.0.0-canary.261f2db59.0", - "@material/ripple": "14.0.0-canary.261f2db59.0", - "@material/theme": "14.0.0-canary.261f2db59.0", - "@material/touch-target": "14.0.0-canary.261f2db59.0", - "tslib": "^2.1.0" - } - }, - "node_modules/@material/ripple": { - "version": "14.0.0-canary.261f2db59.0", - "resolved": "https://registry.npmjs.org/@material/ripple/-/ripple-14.0.0-canary.261f2db59.0.tgz", - "integrity": "sha512-3FLCLj8X7KrFfuYBHJg1b7Odb3V/AW7fxk3m1i1zhDnygKmlQ/abVucH1s2qbX3Y+JIiq+5/C5407h9BFtOf+A==", - "dev": true, - "dependencies": { - "@material/animation": "14.0.0-canary.261f2db59.0", - "@material/base": "14.0.0-canary.261f2db59.0", - "@material/dom": "14.0.0-canary.261f2db59.0", - "@material/feature-targeting": "14.0.0-canary.261f2db59.0", - "@material/rtl": "14.0.0-canary.261f2db59.0", - "@material/theme": "14.0.0-canary.261f2db59.0", - "tslib": "^2.1.0" - } - }, - "node_modules/@material/rtl": { - "version": "14.0.0-canary.261f2db59.0", - "resolved": "https://registry.npmjs.org/@material/rtl/-/rtl-14.0.0-canary.261f2db59.0.tgz", - "integrity": "sha512-bVnXBbUsHs57+EXdeFbcwaKy3lT/itI/qTLmJ88ar0qaGEujO1GmESHm3ioqkeo4kQpTfDhBwQGeEi1aDaTdFg==", - "dev": true, - "dependencies": { - "@material/theme": "14.0.0-canary.261f2db59.0", - "tslib": "^2.1.0" - } - }, - "node_modules/@material/shape": { - "version": "14.0.0-canary.261f2db59.0", - "resolved": "https://registry.npmjs.org/@material/shape/-/shape-14.0.0-canary.261f2db59.0.tgz", - "integrity": "sha512-VjcQltd1uF9ugvLExMy00SMISjy/370o8lsZlb1T+xHyhXHL3UxeuWYLW5Amq6mbx65+c9Df9WmlXXOdebpEkw==", - "dev": true, - "dependencies": { - "@material/feature-targeting": "14.0.0-canary.261f2db59.0", - "@material/rtl": "14.0.0-canary.261f2db59.0", - "@material/theme": "14.0.0-canary.261f2db59.0", - "tslib": "^2.1.0" - } - }, - "node_modules/@material/textfield": { - "version": "14.0.0-canary.261f2db59.0", - "resolved": "https://registry.npmjs.org/@material/textfield/-/textfield-14.0.0-canary.261f2db59.0.tgz", - "integrity": "sha512-KBPgpvvVFBfLx9nc6+wWOS2hJ40JVwh5KBjMoYbiOEFLf0O7SgCAVREHaFAXrPsC8AeTyUipx6TReONIGfMCPQ==", - "dev": true, - "dependencies": { - "@material/animation": "14.0.0-canary.261f2db59.0", - "@material/base": "14.0.0-canary.261f2db59.0", - "@material/density": "14.0.0-canary.261f2db59.0", - "@material/dom": "14.0.0-canary.261f2db59.0", - "@material/feature-targeting": "14.0.0-canary.261f2db59.0", - "@material/floating-label": "14.0.0-canary.261f2db59.0", - "@material/line-ripple": "14.0.0-canary.261f2db59.0", - "@material/notched-outline": "14.0.0-canary.261f2db59.0", - "@material/ripple": "14.0.0-canary.261f2db59.0", - "@material/rtl": "14.0.0-canary.261f2db59.0", - "@material/shape": "14.0.0-canary.261f2db59.0", - "@material/theme": "14.0.0-canary.261f2db59.0", - "@material/typography": "14.0.0-canary.261f2db59.0", - "tslib": "^2.1.0" - } - }, - "node_modules/@material/theme": { - "version": "14.0.0-canary.261f2db59.0", - "resolved": "https://registry.npmjs.org/@material/theme/-/theme-14.0.0-canary.261f2db59.0.tgz", - "integrity": "sha512-bUqyFT0QF8Nxx02fekt3CXIfC9DEPOPdo2hjgdtvhrNP+vftbkI2tKZ5/uRUnVA+zqQAOyIl5z6FOMg4fyemCA==", - "dev": true, - "dependencies": { - "@material/feature-targeting": "14.0.0-canary.261f2db59.0", - "tslib": "^2.1.0" - } - }, - "node_modules/@material/touch-target": { - "version": "14.0.0-canary.261f2db59.0", - "resolved": "https://registry.npmjs.org/@material/touch-target/-/touch-target-14.0.0-canary.261f2db59.0.tgz", - "integrity": "sha512-xA6TTHN7aOTXg/+c6mQJlogzTD+Sp8WPC5TK8RBXbQxEykGXGW15p+H9pG+rX/gzD5iehnHRBrDUFmAGoskhcQ==", - "dev": true, - "dependencies": { - "@material/base": "14.0.0-canary.261f2db59.0", - "@material/feature-targeting": "14.0.0-canary.261f2db59.0", - "@material/rtl": "14.0.0-canary.261f2db59.0", - "tslib": "^2.1.0" - } - }, - "node_modules/@material/typography": { - "version": "14.0.0-canary.261f2db59.0", - "resolved": "https://registry.npmjs.org/@material/typography/-/typography-14.0.0-canary.261f2db59.0.tgz", - "integrity": "sha512-WOCdcNkD5KBRAwICcRqWBRG3cDkyrwK5USTNmG0oxnwnZAN7daOpPTdLppVAhadE7faj8d67ON+V9pH7+T62FQ==", - "dev": true, - "dependencies": { - "@material/feature-targeting": "14.0.0-canary.261f2db59.0", - "@material/theme": "14.0.0-canary.261f2db59.0", - "tslib": "^2.1.0" - } - }, - "node_modules/@tootallnate/once": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz", - "integrity": "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==", - "dev": true, - "engines": { - "node": ">= 6" - } - }, - "node_modules/@types/codemirror": { - "version": "5.60.5", - "resolved": "https://registry.npmjs.org/@types/codemirror/-/codemirror-5.60.5.tgz", - "integrity": "sha512-TiECZmm8St5YxjFUp64LK0c8WU5bxMDt9YaAek1UqUb9swrSCoJhh92fWu1p3mTEqlHjhB5sY7OFBhWroJXZVg==", - "dev": true, - "dependencies": { - "@types/tern": "*" - } - }, - "node_modules/@types/estree": { - "version": "0.0.51", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.51.tgz", - "integrity": "sha512-CuPgU6f3eT/XgKKPqKd/gLZV1Xmvf1a2R5POBOGQa6uv82xpls89HU5zKeVoyR8XzHd1RGNOlQlvUe3CFkjWNQ==", - "dev": true - }, - "node_modules/@types/glob": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.2.0.tgz", - "integrity": "sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA==", - "dev": true, - "dependencies": { - "@types/minimatch": "*", - "@types/node": "*" - } - }, - "node_modules/@types/minimatch": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.5.tgz", - "integrity": "sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ==", - "dev": true - }, - "node_modules/@types/mocha": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-9.1.0.tgz", - "integrity": "sha512-QCWHkbMv4Y5U9oW10Uxbr45qMMSzl4OzijsozynUAgx3kEHUdXB00udx2dWDQ7f2TU2a2uuiFaRZjCe3unPpeg==", - "dev": true - }, - "node_modules/@types/node": { - "version": "14.18.12", - "resolved": "https://registry.npmjs.org/@types/node/-/node-14.18.12.tgz", - "integrity": "sha512-q4jlIR71hUpWTnGhXWcakgkZeHa3CCjcQcnuzU8M891BAWA2jHiziiWEPEkdS5pFsz7H9HJiy8BrK7tBRNrY7A==", - "dev": true - }, - "node_modules/@types/tern": { - "version": "0.23.4", - "resolved": "https://registry.npmjs.org/@types/tern/-/tern-0.23.4.tgz", - "integrity": "sha512-JAUw1iXGO1qaWwEOzxTKJZ/5JxVeON9kvGZ/osgZaJImBnyjyn0cjovPsf6FNLmyGY8Vw9DoXZCMlfMkMwHRWg==", - "dev": true, - "dependencies": { - "@types/estree": "*" - } - }, - "node_modules/@types/trusted-types": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/@types/trusted-types/-/trusted-types-2.0.2.tgz", - "integrity": "sha512-F5DIZ36YVLE+PN+Zwws4kJogq47hNgX3Nx6WyDJ3kcplxyke3XIzB8uK5n/Lpm1HBsbGzd6nmGehL8cPekP+Tg==", - "dev": true - }, - "node_modules/@types/vscode": { - "version": "1.65.0", - "resolved": "https://registry.npmjs.org/@types/vscode/-/vscode-1.65.0.tgz", - "integrity": "sha512-wQhExnh2nEzpjDMSKhUvnNmz3ucpd3E+R7wJkOhBNK3No6fG3VUdmVmMOKD0A8NDZDDDiQcLNxe3oGmX5SjJ5w==", - "dev": true - }, - "node_modules/@ungap/promise-all-settled": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@ungap/promise-all-settled/-/promise-all-settled-1.1.2.tgz", - "integrity": "sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q==", - "dev": true - }, - "node_modules/@vscode/test-electron": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/@vscode/test-electron/-/test-electron-2.1.3.tgz", - "integrity": "sha512-ps/yJ/9ToUZtR1dHfWi1mDXtep1VoyyrmGKC3UnIbScToRQvbUjyy1VMqnMEW3EpMmC3g7+pyThIPtPyCLHyow==", - "dev": true, - "dependencies": { - "http-proxy-agent": "^4.0.1", - "https-proxy-agent": "^5.0.0", - "rimraf": "^3.0.2", - "unzipper": "^0.10.11" - }, - "engines": { - "node": ">=8.9.3" - } - }, - "node_modules/agent-base": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", - "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", - "dev": true, - "dependencies": { - "debug": "4" - }, - "engines": { - "node": ">= 6.0.0" - } - }, - "node_modules/ansi-colors": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", - "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/anymatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", - "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", - "dev": true, - "dependencies": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true - }, - "node_modules/balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "dev": true - }, - "node_modules/big-integer": { - "version": "1.6.51", - "resolved": "https://registry.npmjs.org/big-integer/-/big-integer-1.6.51.tgz", - "integrity": "sha512-GPEid2Y9QU1Exl1rpO9B2IPJGHPSupF5GnVIP0blYvNOMer2bTvSWs1jGOUg04hTmu67nmLsQ9TBo1puaotBHg==", - "dev": true, - "engines": { - "node": ">=0.6" - } - }, - "node_modules/binary": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/binary/-/binary-0.3.0.tgz", - "integrity": "sha1-n2BVO8XOjDOG87VTz/R0Yq3sqnk=", - "dev": true, - "dependencies": { - "buffers": "~0.1.1", - "chainsaw": "~0.1.0" - }, - "engines": { - "node": "*" - } - }, - "node_modules/binary-extensions": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", - "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/bluebird": { - "version": "3.4.7", - "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.4.7.tgz", - "integrity": "sha1-9y12C+Cbf3bQjtj66Ysomo0F+rM=", - "dev": true - }, - "node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "dev": true, - "dependencies": { - "fill-range": "^7.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/browser-stdout": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", - "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==", - "dev": true - }, - "node_modules/buffer-indexof-polyfill": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/buffer-indexof-polyfill/-/buffer-indexof-polyfill-1.0.2.tgz", - "integrity": "sha512-I7wzHwA3t1/lwXQh+A5PbNvJxgfo5r3xulgpYDB5zckTu/Z9oUK9biouBKQUjEqzaz3HnAT6TYoovmE+GqSf7A==", - "dev": true, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/buffers": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/buffers/-/buffers-0.1.1.tgz", - "integrity": "sha1-skV5w77U1tOWru5tmorn9Ugqt7s=", - "dev": true, - "engines": { - "node": ">=0.2.0" - } - }, - "node_modules/camelcase": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", - "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/chainsaw": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/chainsaw/-/chainsaw-0.1.0.tgz", - "integrity": "sha1-XqtQsor+WAdNDVgpE4iCi15fvJg=", - "dev": true, - "dependencies": { - "traverse": ">=0.3.0 <0.4" - }, - "engines": { - "node": "*" - } - }, - "node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/chalk/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/chokidar": { - "version": "3.5.3", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", - "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://paulmillr.com/funding/" - } - ], - "dependencies": { - "anymatch": "~3.1.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" - }, - "engines": { - "node": ">= 8.10.0" - }, - "optionalDependencies": { - "fsevents": "~2.3.2" - } - }, - "node_modules/cliui": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", - "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", - "dev": true, - "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^7.0.0" - } - }, - "node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/comlink": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/comlink/-/comlink-4.3.1.tgz", - "integrity": "sha512-+YbhUdNrpBZggBAHWcgQMLPLH1KDF3wJpeqrCKieWQ8RL7atmgsgTQko1XEBK6PsecfopWNntopJ+ByYG1lRaA==", - "dev": true - }, - "node_modules/concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", - "dev": true - }, - "node_modules/core-util-is": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", - "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", - "dev": true - }, - "node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/decamelize": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-4.0.0.tgz", - "integrity": "sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/diff": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/diff/-/diff-5.0.0.tgz", - "integrity": "sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==", - "dev": true, - "engines": { - "node": ">=0.3.1" - } - }, - "node_modules/duplexer2": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.1.4.tgz", - "integrity": "sha1-ixLauHjA1p4+eJEFFmKjL8a93ME=", - "dev": true, - "dependencies": { - "readable-stream": "^2.0.2" - } - }, - "node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true - }, - "node_modules/escalade": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", - "dev": true, - "dependencies": { - "to-regex-range": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/find-up": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", - "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", - "dev": true, - "dependencies": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/flat": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", - "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", - "dev": true, - "bin": { - "flat": "cli.js" - } - }, - "node_modules/fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", - "dev": true - }, - "node_modules/fsevents": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", - "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", - "dev": true, - "hasInstallScript": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" - } - }, - "node_modules/fstream": { - "version": "1.0.12", - "resolved": "https://registry.npmjs.org/fstream/-/fstream-1.0.12.tgz", - "integrity": "sha512-WvJ193OHa0GHPEL+AycEJgxvBEwyfRkN1vhjca23OaPVMCaLCXTd5qAu82AjTcgP1UJmytkOKb63Ypde7raDIg==", - "dev": true, - "dependencies": { - "graceful-fs": "^4.1.2", - "inherits": "~2.0.0", - "mkdirp": ">=0.5 0", - "rimraf": "2" - }, - "engines": { - "node": ">=0.6" - } - }, - "node_modules/fstream/node_modules/rimraf": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", - "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", - "dev": true, - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - } - }, - "node_modules/fuse.js": { - "version": "6.5.3", - "resolved": "https://registry.npmjs.org/fuse.js/-/fuse.js-6.5.3.tgz", - "integrity": "sha512-sA5etGE7yD/pOqivZRBvUBd/NaL2sjAu6QuSaFoe1H2BrJSkH/T/UXAJ8CdXdw7DvY3Hs8CXKYkDWX7RiP5KOg==", - "dev": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/get-caller-file": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", - "dev": true, - "engines": { - "node": "6.* || 8.* || >= 10.*" - } - }, - "node_modules/glob": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", - "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", - "dev": true, - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, - "dependencies": { - "is-glob": "^4.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/graceful-fs": { - "version": "4.2.9", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.9.tgz", - "integrity": "sha512-NtNxqUcXgpW2iMrfqSfR73Glt39K+BLwWsPs94yR63v45T0Wbej7eRmL5cWfwEgqXnmjQp3zaJTshdRW/qC2ZQ==", - "dev": true - }, - "node_modules/growl": { - "version": "1.10.5", - "resolved": "https://registry.npmjs.org/growl/-/growl-1.10.5.tgz", - "integrity": "sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==", - "dev": true, - "engines": { - "node": ">=4.x" - } - }, - "node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/he": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", - "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", - "dev": true, - "bin": { - "he": "bin/he" - } - }, - "node_modules/http-proxy-agent": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz", - "integrity": "sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==", - "dev": true, - "dependencies": { - "@tootallnate/once": "1", - "agent-base": "6", - "debug": "4" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/https-proxy-agent": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz", - "integrity": "sha512-EkYm5BcKUGiduxzSt3Eppko+PiNWNEpa4ySk9vTC6wDsQJW9rHSa+UhGNJoRYp7bz6Ht1eaRIa6QaJqO5rCFbA==", - "dev": true, - "dependencies": { - "agent-base": "6", - "debug": "4" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", - "dev": true, - "dependencies": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "node_modules/inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "dev": true - }, - "node_modules/is-binary-path": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", - "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", - "dev": true, - "dependencies": { - "binary-extensions": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/is-glob": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", - "dev": true, - "dependencies": { - "is-extglob": "^2.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "dev": true, - "engines": { - "node": ">=0.12.0" - } - }, - "node_modules/is-plain-obj": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", - "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/is-unicode-supported": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", - "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", - "dev": true - }, - "node_modules/isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", - "dev": true - }, - "node_modules/js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "dev": true, - "dependencies": { - "argparse": "^2.0.1" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/listenercount": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/listenercount/-/listenercount-1.0.1.tgz", - "integrity": "sha1-hMinKrWcRyUyFIDJdeZQg0LnCTc=", - "dev": true - }, - "node_modules/lit": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/lit/-/lit-2.2.1.tgz", - "integrity": "sha512-dSe++R50JqrvNGXmI9OE13de1z5U/Y3J2dTm/9GC86vedI8ILoR8ZGnxfThFpvQ9m0lR0qRnIR4IiKj/jDCfYw==", - "dev": true, - "dependencies": { - "@lit/reactive-element": "^1.3.0", - "lit-element": "^3.2.0", - "lit-html": "^2.2.0" - } - }, - "node_modules/lit-element": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/lit-element/-/lit-element-3.2.0.tgz", - "integrity": "sha512-HbE7yt2SnUtg5DCrWt028oaU4D5F4k/1cntAFHTkzY8ZIa8N0Wmu92PxSxucsQSOXlODFrICkQ5x/tEshKi13g==", - "dev": true, - "dependencies": { - "@lit/reactive-element": "^1.3.0", - "lit-html": "^2.2.0" - } - }, - "node_modules/lit-element/node_modules/@lit/reactive-element": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/@lit/reactive-element/-/reactive-element-1.3.1.tgz", - "integrity": "sha512-nOJARIr3pReqK3hfFCSW2Zg/kFcFsSAlIE7z4a0C9D2dPrgD/YSn3ZP2ET/rxKB65SXyG7jJbkynBRm+tGlacw==", - "dev": true - }, - "node_modules/lit-html": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/lit-html/-/lit-html-2.2.1.tgz", - "integrity": "sha512-AiJ/Rs0awjICs2FioTnHSh+Np5dhYSkyRczKy3wKjp8qjLhr1Ov+GiHrUQNdX8ou1LMuznpIME990AZsa/tR8g==", - "dev": true, - "dependencies": { - "@types/trusted-types": "^2.0.2" - } - }, - "node_modules/lit/node_modules/@lit/reactive-element": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/@lit/reactive-element/-/reactive-element-1.3.1.tgz", - "integrity": "sha512-nOJARIr3pReqK3hfFCSW2Zg/kFcFsSAlIE7z4a0C9D2dPrgD/YSn3ZP2ET/rxKB65SXyG7jJbkynBRm+tGlacw==", - "dev": true - }, - "node_modules/locate-path": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", - "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", - "dev": true, - "dependencies": { - "p-locate": "^5.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/log-symbols": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", - "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", - "dev": true, - "dependencies": { - "chalk": "^4.1.0", - "is-unicode-supported": "^0.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/minimist": { - "version": "1.2.6", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz", - "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==", - "dev": true - }, - "node_modules/mkdirp": { - "version": "0.5.6", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", - "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", - "dev": true, - "dependencies": { - "minimist": "^1.2.6" - }, - "bin": { - "mkdirp": "bin/cmd.js" - } - }, - "node_modules/mocha": { - "version": "9.2.2", - "resolved": "https://registry.npmjs.org/mocha/-/mocha-9.2.2.tgz", - "integrity": "sha512-L6XC3EdwT6YrIk0yXpavvLkn8h+EU+Y5UcCHKECyMbdUIxyMuZj4bX4U9e1nvnvUUvQVsV2VHQr5zLdcUkhW/g==", - "dev": true, - "dependencies": { - "@ungap/promise-all-settled": "1.1.2", - "ansi-colors": "4.1.1", - "browser-stdout": "1.3.1", - "chokidar": "3.5.3", - "debug": "4.3.3", - "diff": "5.0.0", - "escape-string-regexp": "4.0.0", - "find-up": "5.0.0", - "glob": "7.2.0", - "growl": "1.10.5", - "he": "1.2.0", - "js-yaml": "4.1.0", - "log-symbols": "4.1.0", - "minimatch": "4.2.1", - "ms": "2.1.3", - "nanoid": "3.3.1", - "serialize-javascript": "6.0.0", - "strip-json-comments": "3.1.1", - "supports-color": "8.1.1", - "which": "2.0.2", - "workerpool": "6.2.0", - "yargs": "16.2.0", - "yargs-parser": "20.2.4", - "yargs-unparser": "2.0.0" - }, - "bin": { - "_mocha": "bin/_mocha", - "mocha": "bin/mocha" - }, - "engines": { - "node": ">= 12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/mochajs" - } - }, - "node_modules/mocha/node_modules/debug": { - "version": "4.3.3", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", - "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", - "dev": true, - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/mocha/node_modules/debug/node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - }, - "node_modules/mocha/node_modules/minimatch": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-4.2.1.tgz", - "integrity": "sha512-9Uq1ChtSZO+Mxa/CL1eGizn2vRn3MlLgzhT0Iz8zaY8NdvxvB0d5QdPFmCKf7JKA9Lerx5vRrnwO03jsSfGG9g==", - "dev": true, - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/mocha/node_modules/ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "dev": true - }, - "node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - }, - "node_modules/nanoid": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.1.tgz", - "integrity": "sha512-n6Vs/3KGyxPQd6uO0eH4Bv0ojGSUvuLlIHtC3Y0kEO23YRge8H9x1GCzLn28YX0H66pMkxuaeESFq4tKISKwdw==", - "dev": true, - "bin": { - "nanoid": "bin/nanoid.cjs" - }, - "engines": { - "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" - } - }, - "node_modules/normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", - "dev": true, - "dependencies": { - "wrappy": "1" - } - }, - "node_modules/p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "dev": true, - "dependencies": { - "yocto-queue": "^0.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-locate": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", - "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", - "dev": true, - "dependencies": { - "p-limit": "^3.0.2" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "dev": true, - "engines": { - "node": ">=8.6" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/playground-elements": { - "version": "0.15.2", - "resolved": "https://registry.npmjs.org/playground-elements/-/playground-elements-0.15.2.tgz", - "integrity": "sha512-XL4MnTIVa/dCWvqAtDgZM9KOyvQtZaas4CEUXrZZmhzFRMRMAe572VBtjpHdulFvn51rJvJsxXcJaTp03RhMBQ==", - "dev": true, - "dependencies": { - "@material/mwc-button": "^0.25.1", - "@material/mwc-icon-button": "^0.25.1", - "@material/mwc-linear-progress": "^0.25.1", - "@material/mwc-list": "^0.25.1", - "@material/mwc-menu": "^0.25.1", - "@material/mwc-textfield": "^0.25.1", - "@types/codemirror": "^5.60.0", - "comlink": "=4.3.1", - "fuse.js": "^6.4.6", - "lit": "^2.0.0", - "tslib": "^2.0.3", - "vscode-languageserver": "^7.0.0" - } - }, - "node_modules/process-nextick-args": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", - "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", - "dev": true - }, - "node_modules/randombytes": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", - "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", - "dev": true, - "dependencies": { - "safe-buffer": "^5.1.0" - } - }, - "node_modules/readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "dev": true, - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "node_modules/readable-stream/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, - "node_modules/readdirp": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", - "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", - "dev": true, - "dependencies": { - "picomatch": "^2.2.1" - }, - "engines": { - "node": ">=8.10.0" - } - }, - "node_modules/require-directory": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "dev": true, - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/serialize-javascript": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz", - "integrity": "sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==", - "dev": true, - "dependencies": { - "randombytes": "^2.1.0" - } - }, - "node_modules/setimmediate": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", - "integrity": "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=", - "dev": true - }, - "node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, - "node_modules/string_decoder/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, - "node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-json-comments": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", - "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", - "dev": true, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/supports-color": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/supports-color?sponsor=1" - } - }, - "node_modules/to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dev": true, - "dependencies": { - "is-number": "^7.0.0" - }, - "engines": { - "node": ">=8.0" - } - }, - "node_modules/traverse": { - "version": "0.3.9", - "resolved": "https://registry.npmjs.org/traverse/-/traverse-0.3.9.tgz", - "integrity": "sha1-cXuPIgzAu3tE5AUUwisui7xw2Lk=", - "dev": true, - "engines": { - "node": "*" - } - }, - "node_modules/tslib": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.1.tgz", - "integrity": "sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw==", - "dev": true - }, - "node_modules/typescript": { - "version": "4.6.3", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.6.3.tgz", - "integrity": "sha512-yNIatDa5iaofVozS/uQJEl3JRWLKKGJKh6Yaiv0GLGSuhpFJe7P3SbHZ8/yjAHRQwKRoA6YZqlfjXWmVzoVSMw==", - "dev": true, - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" - }, - "engines": { - "node": ">=4.2.0" - } - }, - "node_modules/unzipper": { - "version": "0.10.11", - "resolved": "https://registry.npmjs.org/unzipper/-/unzipper-0.10.11.tgz", - "integrity": "sha512-+BrAq2oFqWod5IESRjL3S8baohbevGcVA+teAIOYWM3pDVdseogqbzhhvvmiyQrUNKFUnDMtELW3X8ykbyDCJw==", - "dev": true, - "dependencies": { - "big-integer": "^1.6.17", - "binary": "~0.3.0", - "bluebird": "~3.4.1", - "buffer-indexof-polyfill": "~1.0.0", - "duplexer2": "~0.1.4", - "fstream": "^1.0.12", - "graceful-fs": "^4.2.2", - "listenercount": "~1.0.1", - "readable-stream": "~2.3.6", - "setimmediate": "~1.0.4" - } - }, - "node_modules/util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", - "dev": true - }, - "node_modules/vscode-jsonrpc": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/vscode-jsonrpc/-/vscode-jsonrpc-6.0.0.tgz", - "integrity": "sha512-wnJA4BnEjOSyFMvjZdpiOwhSq9uDoK8e/kpRJDTaMYzwlkrhG1fwDIZI94CLsLzlCK5cIbMMtFlJlfR57Lavmg==", - "dev": true, - "engines": { - "node": ">=8.0.0 || >=10.0.0" - } - }, - "node_modules/vscode-languageserver": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/vscode-languageserver/-/vscode-languageserver-7.0.0.tgz", - "integrity": "sha512-60HTx5ID+fLRcgdHfmz0LDZAXYEV68fzwG0JWwEPBode9NuMYTIxuYXPg4ngO8i8+Ou0lM7y6GzaYWbiDL0drw==", - "dev": true, - "dependencies": { - "vscode-languageserver-protocol": "3.16.0" - }, - "bin": { - "installServerIntoExtension": "bin/installServerIntoExtension" - } - }, - "node_modules/vscode-languageserver-protocol": { - "version": "3.16.0", - "resolved": "https://registry.npmjs.org/vscode-languageserver-protocol/-/vscode-languageserver-protocol-3.16.0.tgz", - "integrity": "sha512-sdeUoAawceQdgIfTI+sdcwkiK2KU+2cbEYA0agzM2uqaUy2UpnnGHtWTHVEtS0ES4zHU0eMFRGN+oQgDxlD66A==", - "dev": true, - "dependencies": { - "vscode-jsonrpc": "6.0.0", - "vscode-languageserver-types": "3.16.0" - } - }, - "node_modules/vscode-languageserver-types": { - "version": "3.16.0", - "resolved": "https://registry.npmjs.org/vscode-languageserver-types/-/vscode-languageserver-types-3.16.0.tgz", - "integrity": "sha512-k8luDIWJWyenLc5ToFQQMaSrqCHiLwyKPHKPQZ5zz21vM+vIVUSvsRpcbiECH4WR88K2XZqc4ScRcZ7nk/jbeA==", - "dev": true - }, - "node_modules/which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/workerpool": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.2.0.tgz", - "integrity": "sha512-Rsk5qQHJ9eowMH28Jwhe8HEbmdYDX4lwoMWshiCXugjtHqMD9ZbiqSDLxcsfdqsETPzVUtX5s1Z5kStiIM6l4A==", - "dev": true - }, - "node_modules/wrap-ansi": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, - "node_modules/wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", - "dev": true - }, - "node_modules/y18n": { - "version": "5.0.8", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", - "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", - "dev": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/yargs": { - "version": "16.2.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", - "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", - "dev": true, - "dependencies": { - "cliui": "^7.0.2", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.0", - "y18n": "^5.0.5", - "yargs-parser": "^20.2.2" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/yargs-parser": { - "version": "20.2.4", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.4.tgz", - "integrity": "sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==", - "dev": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/yargs-unparser": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-2.0.0.tgz", - "integrity": "sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==", - "dev": true, - "dependencies": { - "camelcase": "^6.0.0", - "decamelize": "^4.0.0", - "flat": "^5.0.2", - "is-plain-obj": "^2.1.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/yocto-queue": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", - "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - } - }, - "dependencies": { - "@lit/reactive-element": { - "version": "1.0.0-rc.4", - "resolved": "https://registry.npmjs.org/@lit/reactive-element/-/reactive-element-1.0.0-rc.4.tgz", - "integrity": "sha512-dJMha+4NFYdpnUJzRrWTFV5Hdp9QHWFuPnaoqonrKl4lGJVnYez9mu8ev9F/5KM47tjAjh22DuRHrdFDHfOijA==", - "dev": true - }, - "@material/animation": { - "version": "14.0.0-canary.261f2db59.0", - "resolved": "https://registry.npmjs.org/@material/animation/-/animation-14.0.0-canary.261f2db59.0.tgz", - "integrity": "sha512-OjxWJYSRNs4vnPe8NclaNn+TsNc8TR/wHusGtezF5F+wl+5mh+K69BMXAmURtq3idoRg4XaOSC/Ohk1ovD1fMQ==", - "dev": true, - "requires": { - "tslib": "^2.1.0" - } - }, - "@material/base": { - "version": "14.0.0-canary.261f2db59.0", - "resolved": "https://registry.npmjs.org/@material/base/-/base-14.0.0-canary.261f2db59.0.tgz", - "integrity": "sha512-vy5SQt+jcwwdRFfBvtpVdpULUBujecVUKOXcopaQoi2XIzI5EBHuR4gPN0cd1yfmVEucD6p2fvVv2FJ3Ngr61w==", - "dev": true, - "requires": { - "tslib": "^2.1.0" - } - }, - "@material/density": { - "version": "14.0.0-canary.261f2db59.0", - "resolved": "https://registry.npmjs.org/@material/density/-/density-14.0.0-canary.261f2db59.0.tgz", - "integrity": "sha512-zOR5wISqPVr8KS/ERNC1jdRV9O832lzclyS9Ea20rDrWfuOiYsQ9bbIk12xWlxpgsn7r9fxQJyd1O2SURoHdRA==", - "dev": true, - "requires": { - "tslib": "^2.1.0" - } - }, - "@material/dom": { - "version": "14.0.0-canary.261f2db59.0", - "resolved": "https://registry.npmjs.org/@material/dom/-/dom-14.0.0-canary.261f2db59.0.tgz", - "integrity": "sha512-iUpZG6Bb2l/PfNV2Fb/pXfG1p4Bz4PC9A7ATPlKfcU5HioObcnYVc/+Hrtaw8eu28BNIc+VVROtbfpqG/YgKSQ==", - "dev": true, - "requires": { - "@material/feature-targeting": "14.0.0-canary.261f2db59.0", - "tslib": "^2.1.0" - } - }, - "@material/elevation": { - "version": "14.0.0-canary.261f2db59.0", - "resolved": "https://registry.npmjs.org/@material/elevation/-/elevation-14.0.0-canary.261f2db59.0.tgz", - "integrity": "sha512-AqN/tsTGGyBzZ7CtoSMBY9bDYvCuUt98EUfiGjZGXcf4HgoHV3Cn/JSLrhru5Cq8Nx6HF6AmHh3dQCfNCQduew==", - "dev": true, - "requires": { - "@material/animation": "14.0.0-canary.261f2db59.0", - "@material/base": "14.0.0-canary.261f2db59.0", - "@material/feature-targeting": "14.0.0-canary.261f2db59.0", - "@material/rtl": "14.0.0-canary.261f2db59.0", - "@material/theme": "14.0.0-canary.261f2db59.0", - "tslib": "^2.1.0" - } - }, - "@material/feature-targeting": { - "version": "14.0.0-canary.261f2db59.0", - "resolved": "https://registry.npmjs.org/@material/feature-targeting/-/feature-targeting-14.0.0-canary.261f2db59.0.tgz", - "integrity": "sha512-CrVoGNu0ym52OPEKy3kgeNL2oSWOCBYbYxSH3GhERxCq5FwGBN+XmK/ZDLFVQlHYy3v8x4TqVEwXviCeumNTxQ==", - "dev": true, - "requires": { - "tslib": "^2.1.0" - } - }, - "@material/floating-label": { - "version": "14.0.0-canary.261f2db59.0", - "resolved": "https://registry.npmjs.org/@material/floating-label/-/floating-label-14.0.0-canary.261f2db59.0.tgz", - "integrity": "sha512-Cp0/LngkW6/uZWbEDTe3Ox143V4kYtxl9twiM3XLKd6a67JHCzneQWFzC0qSg90b3r5O+1zOkT3ZMF2Pbu2Vwg==", - "dev": true, - "requires": { - "@material/animation": "14.0.0-canary.261f2db59.0", - "@material/base": "14.0.0-canary.261f2db59.0", - "@material/dom": "14.0.0-canary.261f2db59.0", - "@material/feature-targeting": "14.0.0-canary.261f2db59.0", - "@material/rtl": "14.0.0-canary.261f2db59.0", - "@material/theme": "14.0.0-canary.261f2db59.0", - "@material/typography": "14.0.0-canary.261f2db59.0", - "tslib": "^2.1.0" - } - }, - "@material/line-ripple": { - "version": "14.0.0-canary.261f2db59.0", - "resolved": "https://registry.npmjs.org/@material/line-ripple/-/line-ripple-14.0.0-canary.261f2db59.0.tgz", - "integrity": "sha512-LlyiyxpHNlFt0PZ8Q2tvOPbjNcgm3L7tUebXsM7iGyoKXfj0HwyDI31S0KgtU3Vs5DIK4U4mnRWtoAxtBW6Jfg==", - "dev": true, - "requires": { - "@material/animation": "14.0.0-canary.261f2db59.0", - "@material/base": "14.0.0-canary.261f2db59.0", - "@material/feature-targeting": "14.0.0-canary.261f2db59.0", - "@material/theme": "14.0.0-canary.261f2db59.0", - "tslib": "^2.1.0" - } - }, - "@material/linear-progress": { - "version": "14.0.0-canary.261f2db59.0", - "resolved": "https://registry.npmjs.org/@material/linear-progress/-/linear-progress-14.0.0-canary.261f2db59.0.tgz", - "integrity": "sha512-qP/iI4CT7i7HhXuUiNWL5pDN6tyTJ4uLl8e9QImz4mcQLUMU3xrNBIsutS+I5GnBE8FwLDozZFccfCxHh+pvzw==", - "dev": true, - "requires": { - "@material/animation": "14.0.0-canary.261f2db59.0", - "@material/base": "14.0.0-canary.261f2db59.0", - "@material/feature-targeting": "14.0.0-canary.261f2db59.0", - "@material/progress-indicator": "14.0.0-canary.261f2db59.0", - "@material/rtl": "14.0.0-canary.261f2db59.0", - "@material/theme": "14.0.0-canary.261f2db59.0", - "tslib": "^2.1.0" - } - }, - "@material/list": { - "version": "14.0.0-canary.261f2db59.0", - "resolved": "https://registry.npmjs.org/@material/list/-/list-14.0.0-canary.261f2db59.0.tgz", - "integrity": "sha512-bjHXXk2ZeWxAFs4cJxy5J5A5ClUd3FGjRv/LwCYpsh7Dm7e8kSe8Lw2MWb6FXyF3mDJM6xqN3xXQWOh6UEu5wA==", - "dev": true, - "requires": { - "@material/base": "14.0.0-canary.261f2db59.0", - "@material/density": "14.0.0-canary.261f2db59.0", - "@material/dom": "14.0.0-canary.261f2db59.0", - "@material/feature-targeting": "14.0.0-canary.261f2db59.0", - "@material/ripple": "14.0.0-canary.261f2db59.0", - "@material/rtl": "14.0.0-canary.261f2db59.0", - "@material/shape": "14.0.0-canary.261f2db59.0", - "@material/theme": "14.0.0-canary.261f2db59.0", - "@material/typography": "14.0.0-canary.261f2db59.0", - "tslib": "^2.1.0" - } - }, - "@material/menu": { - "version": "14.0.0-canary.261f2db59.0", - "resolved": "https://registry.npmjs.org/@material/menu/-/menu-14.0.0-canary.261f2db59.0.tgz", - "integrity": "sha512-x59UHoTLvEsPKjFdffrKTgEyc0T4W3m58RsizAmapXr59Uthq8+PTFOkAv9R1PV/ZCzxay7Vx+QcekC4qOr40A==", - "dev": true, - "requires": { - "@material/base": "14.0.0-canary.261f2db59.0", - "@material/dom": "14.0.0-canary.261f2db59.0", - "@material/elevation": "14.0.0-canary.261f2db59.0", - "@material/feature-targeting": "14.0.0-canary.261f2db59.0", - "@material/list": "14.0.0-canary.261f2db59.0", - "@material/menu-surface": "14.0.0-canary.261f2db59.0", - "@material/ripple": "14.0.0-canary.261f2db59.0", - "@material/rtl": "14.0.0-canary.261f2db59.0", - "@material/theme": "14.0.0-canary.261f2db59.0", - "tslib": "^2.1.0" - } - }, - "@material/menu-surface": { - "version": "14.0.0-canary.261f2db59.0", - "resolved": "https://registry.npmjs.org/@material/menu-surface/-/menu-surface-14.0.0-canary.261f2db59.0.tgz", - "integrity": "sha512-zv/fv/W3zdSb+c/p6GNcOqA3+wAc/r8MOtV53WJPLlvZZSpGoTwHUp+GPiNeovfbsTSxN95XOXuVQBEfKEb8vA==", - "dev": true, - "requires": { - "@material/animation": "14.0.0-canary.261f2db59.0", - "@material/base": "14.0.0-canary.261f2db59.0", - "@material/elevation": "14.0.0-canary.261f2db59.0", - "@material/feature-targeting": "14.0.0-canary.261f2db59.0", - "@material/rtl": "14.0.0-canary.261f2db59.0", - "@material/shape": "14.0.0-canary.261f2db59.0", - "@material/theme": "14.0.0-canary.261f2db59.0", - "tslib": "^2.1.0" - } - }, - "@material/mwc-base": { - "version": "0.25.3", - "resolved": "https://registry.npmjs.org/@material/mwc-base/-/mwc-base-0.25.3.tgz", - "integrity": "sha512-4wvxZ9dhPr0O4jjOHPmFyn77pafe+h1gHPlT9sbQ+ly8NY/fSn/TXn7/PbxgL8g4ZHxMvD3o7PJopg+6cbHp8Q==", - "dev": true, - "requires": { - "@lit/reactive-element": "1.0.0-rc.4", - "@material/base": "=14.0.0-canary.261f2db59.0", - "@material/dom": "=14.0.0-canary.261f2db59.0", - "lit": "^2.0.0", - "tslib": "^2.0.1" - } - }, - "@material/mwc-button": { - "version": "0.25.3", - "resolved": "https://registry.npmjs.org/@material/mwc-button/-/mwc-button-0.25.3.tgz", - "integrity": "sha512-usHEKchj9hqetY7n0yebTz1Pk9Z+9W/sNZheFoSaiWQCv9XhtCdKkHH0MXTv8SpwxWuEKUf/XjtyvikGIcIn7w==", - "dev": true, - "requires": { - "@material/mwc-icon": "^0.25.3", - "@material/mwc-ripple": "^0.25.3", - "lit": "^2.0.0", - "tslib": "^2.0.1" - } - }, - "@material/mwc-checkbox": { - "version": "0.25.3", - "resolved": "https://registry.npmjs.org/@material/mwc-checkbox/-/mwc-checkbox-0.25.3.tgz", - "integrity": "sha512-PSh9IAgQK4XiDzBwgclheejkA4cbZ3K9V1JTTl/YVRDD/OLLM+Bh8tbnAg/1kGVlPWOUfDrYCcZ0gg472ca7gw==", - "dev": true, - "requires": { - "@material/mwc-base": "^0.25.3", - "@material/mwc-ripple": "^0.25.3", - "lit": "^2.0.0", - "tslib": "^2.0.1" - } - }, - "@material/mwc-floating-label": { - "version": "0.25.3", - "resolved": "https://registry.npmjs.org/@material/mwc-floating-label/-/mwc-floating-label-0.25.3.tgz", - "integrity": "sha512-3uFMi8Y680P0nzP5zih4YuOZJLl/C6Ux9G810Unwo44zblG/ckgJlFiM+T+oR+OH5KM8LbfNlV0ypo7FT5zYJA==", - "dev": true, - "requires": { - "@material/floating-label": "=14.0.0-canary.261f2db59.0", - "lit": "^2.0.0", - "tslib": "^2.0.1" - } - }, - "@material/mwc-icon": { - "version": "0.25.3", - "resolved": "https://registry.npmjs.org/@material/mwc-icon/-/mwc-icon-0.25.3.tgz", - "integrity": "sha512-36076AWZIRSr8qYOLjuDDkxej/HA0XAosrj7TS1ZeLlUBnLUtbDtvc1S7KSa0hqez7ouzOqGaWK24yoNnTa2OA==", - "dev": true, - "requires": { - "lit": "^2.0.0", - "tslib": "^2.0.1" - } - }, - "@material/mwc-icon-button": { - "version": "0.25.3", - "resolved": "https://registry.npmjs.org/@material/mwc-icon-button/-/mwc-icon-button-0.25.3.tgz", - "integrity": "sha512-FexkMpK3ZSHh7NF+PIqvVhvAbBOgFDYPck/lqnxIDC3VGJ0rjD/1MqevDy2fY6IcHGlc8Ai7VuYbdQ6Cvw8WcQ==", - "dev": true, - "requires": { - "@material/mwc-ripple": "^0.25.3", - "lit": "^2.0.0", - "tslib": "^2.0.1" - } - }, - "@material/mwc-line-ripple": { - "version": "0.25.3", - "resolved": "https://registry.npmjs.org/@material/mwc-line-ripple/-/mwc-line-ripple-0.25.3.tgz", - "integrity": "sha512-ANJzSyumb+shBVTIhqF1+YByPU/EpFXxI9CS26qThFqlUDpYXg5xcoZpkMSmZv3Wv/loF1rs2mJfFWOcC6nFnw==", - "dev": true, - "requires": { - "@material/line-ripple": "=14.0.0-canary.261f2db59.0", - "lit": "^2.0.0", - "tslib": "^2.0.1" - } - }, - "@material/mwc-linear-progress": { - "version": "0.25.3", - "resolved": "https://registry.npmjs.org/@material/mwc-linear-progress/-/mwc-linear-progress-0.25.3.tgz", - "integrity": "sha512-iAsM5zo78rYXXzwEg1RT0+jShxkUjOEUK0Yj6KxqxbXy1VKPTZ4HRB5Fy6wChWQi/Xl8wFlfI6nNAQtH7pakeA==", - "dev": true, - "requires": { - "@material/linear-progress": "=14.0.0-canary.261f2db59.0", - "@material/mwc-base": "^0.25.3", - "@material/theme": "=14.0.0-canary.261f2db59.0", - "lit": "^2.0.0", - "tslib": "^2.0.1" - } - }, - "@material/mwc-list": { - "version": "0.25.3", - "resolved": "https://registry.npmjs.org/@material/mwc-list/-/mwc-list-0.25.3.tgz", - "integrity": "sha512-2T297qVaQsKv+QDNP2ag9g04RLKO1tm2F6BwwqvdbXTsY+LKYOJe2/aSe0kX2tQLayX4ydy2RnTevo9Ld+c+4g==", - "dev": true, - "requires": { - "@material/base": "=14.0.0-canary.261f2db59.0", - "@material/dom": "=14.0.0-canary.261f2db59.0", - "@material/list": "=14.0.0-canary.261f2db59.0", - "@material/mwc-base": "^0.25.3", - "@material/mwc-checkbox": "^0.25.3", - "@material/mwc-radio": "^0.25.3", - "@material/mwc-ripple": "^0.25.3", - "lit": "^2.0.0", - "tslib": "^2.0.1" - } - }, - "@material/mwc-menu": { - "version": "0.25.3", - "resolved": "https://registry.npmjs.org/@material/mwc-menu/-/mwc-menu-0.25.3.tgz", - "integrity": "sha512-jr5R61BfqrJC0lsAI63y4BsEM2eY3n6kiCy2ZnwinmxrfFrS709T/zuSUUW/xG9b9inSku4WjjSkDhPzQrmS3g==", - "dev": true, - "requires": { - "@material/menu": "=14.0.0-canary.261f2db59.0", - "@material/menu-surface": "=14.0.0-canary.261f2db59.0", - "@material/mwc-base": "^0.25.3", - "@material/mwc-list": "^0.25.3", - "@material/shape": "=14.0.0-canary.261f2db59.0", - "@material/theme": "=14.0.0-canary.261f2db59.0", - "lit": "^2.0.0", - "tslib": "^2.0.1" - } - }, - "@material/mwc-notched-outline": { - "version": "0.25.3", - "resolved": "https://registry.npmjs.org/@material/mwc-notched-outline/-/mwc-notched-outline-0.25.3.tgz", - "integrity": "sha512-8jvU8GD0Pke+pfTQ0PdXpZmkU3XIHhMVY6AHM/2IQrXHkVZmAm9kbwL7ne3Ao+6f5n+DeXDGd+SG9U6ZZjD7gw==", - "dev": true, - "requires": { - "@material/mwc-base": "^0.25.3", - "@material/notched-outline": "=14.0.0-canary.261f2db59.0", - "lit": "^2.0.0", - "tslib": "^2.0.1" - } - }, - "@material/mwc-radio": { - "version": "0.25.3", - "resolved": "https://registry.npmjs.org/@material/mwc-radio/-/mwc-radio-0.25.3.tgz", - "integrity": "sha512-SXpVDrsQnz7+2w/kfBxcOJ4P+uJ0RxBd9mCLE7wVyN53gDLkNHqA0npdl2PNpRaaMavVrt27L8wWo5QIT+7zWA==", - "dev": true, - "requires": { - "@material/mwc-base": "^0.25.3", - "@material/mwc-ripple": "^0.25.3", - "@material/radio": "=14.0.0-canary.261f2db59.0", - "lit": "^2.0.0", - "tslib": "^2.0.1" - } - }, - "@material/mwc-ripple": { - "version": "0.25.3", - "resolved": "https://registry.npmjs.org/@material/mwc-ripple/-/mwc-ripple-0.25.3.tgz", - "integrity": "sha512-G/gt/csxgME6/sAku3GiuB0O2LLvoPWsRTLq/9iABpaGLJjqaKHvNg/IVzNDdF3YZT7EORgR9cBWWl7umA4i4Q==", - "dev": true, - "requires": { - "@material/dom": "=14.0.0-canary.261f2db59.0", - "@material/mwc-base": "^0.25.3", - "@material/ripple": "=14.0.0-canary.261f2db59.0", - "lit": "^2.0.0", - "tslib": "^2.0.1" - } - }, - "@material/mwc-textfield": { - "version": "0.25.3", - "resolved": "https://registry.npmjs.org/@material/mwc-textfield/-/mwc-textfield-0.25.3.tgz", - "integrity": "sha512-stpZ8sEyo2Mb9fG2XCoTc1Kom8oRXZiVI5rU88GtfcBU7nH0em8S4grq9X1mVfUG6Cfi1G/T+avCSIhzbYtr0w==", - "dev": true, - "requires": { - "@material/floating-label": "=14.0.0-canary.261f2db59.0", - "@material/line-ripple": "=14.0.0-canary.261f2db59.0", - "@material/mwc-base": "^0.25.3", - "@material/mwc-floating-label": "^0.25.3", - "@material/mwc-line-ripple": "^0.25.3", - "@material/mwc-notched-outline": "^0.25.3", - "@material/textfield": "=14.0.0-canary.261f2db59.0", - "lit": "^2.0.0", - "tslib": "^2.0.1" - } - }, - "@material/notched-outline": { - "version": "14.0.0-canary.261f2db59.0", - "resolved": "https://registry.npmjs.org/@material/notched-outline/-/notched-outline-14.0.0-canary.261f2db59.0.tgz", - "integrity": "sha512-gtn+IKAiX2rbfbX3a9aDlfUoKCEYrlAPOZifKXUaZ4UJYMNLzZuAqy7l5Ds30emtqUE22mySTEWqhzK6dePKsA==", - "dev": true, - "requires": { - "@material/base": "14.0.0-canary.261f2db59.0", - "@material/feature-targeting": "14.0.0-canary.261f2db59.0", - "@material/floating-label": "14.0.0-canary.261f2db59.0", - "@material/rtl": "14.0.0-canary.261f2db59.0", - "@material/shape": "14.0.0-canary.261f2db59.0", - "@material/theme": "14.0.0-canary.261f2db59.0", - "tslib": "^2.1.0" - } - }, - "@material/progress-indicator": { - "version": "14.0.0-canary.261f2db59.0", - "resolved": "https://registry.npmjs.org/@material/progress-indicator/-/progress-indicator-14.0.0-canary.261f2db59.0.tgz", - "integrity": "sha512-qm+zUMvFYhHuVB2OdgWTO/Dv1hMFEdIT3loX5OJMpvQ66l6rez/3F7blwHkm6W4mfuxRS3zdDdYbP5QdFcuHuA==", - "dev": true, - "requires": { - "tslib": "^2.1.0" - } - }, - "@material/radio": { - "version": "14.0.0-canary.261f2db59.0", - "resolved": "https://registry.npmjs.org/@material/radio/-/radio-14.0.0-canary.261f2db59.0.tgz", - "integrity": "sha512-AvrsOqhP8UZ5d58RWgaTmQVlWQRULwk2BXhsEhtxz56CmTsyVM49thNbaNnc/TzuY9Ssxv/L2wYVbR2B3BX9Yw==", - "dev": true, - "requires": { - "@material/animation": "14.0.0-canary.261f2db59.0", - "@material/base": "14.0.0-canary.261f2db59.0", - "@material/density": "14.0.0-canary.261f2db59.0", - "@material/dom": "14.0.0-canary.261f2db59.0", - "@material/feature-targeting": "14.0.0-canary.261f2db59.0", - "@material/ripple": "14.0.0-canary.261f2db59.0", - "@material/theme": "14.0.0-canary.261f2db59.0", - "@material/touch-target": "14.0.0-canary.261f2db59.0", - "tslib": "^2.1.0" - } - }, - "@material/ripple": { - "version": "14.0.0-canary.261f2db59.0", - "resolved": "https://registry.npmjs.org/@material/ripple/-/ripple-14.0.0-canary.261f2db59.0.tgz", - "integrity": "sha512-3FLCLj8X7KrFfuYBHJg1b7Odb3V/AW7fxk3m1i1zhDnygKmlQ/abVucH1s2qbX3Y+JIiq+5/C5407h9BFtOf+A==", - "dev": true, - "requires": { - "@material/animation": "14.0.0-canary.261f2db59.0", - "@material/base": "14.0.0-canary.261f2db59.0", - "@material/dom": "14.0.0-canary.261f2db59.0", - "@material/feature-targeting": "14.0.0-canary.261f2db59.0", - "@material/rtl": "14.0.0-canary.261f2db59.0", - "@material/theme": "14.0.0-canary.261f2db59.0", - "tslib": "^2.1.0" - } - }, - "@material/rtl": { - "version": "14.0.0-canary.261f2db59.0", - "resolved": "https://registry.npmjs.org/@material/rtl/-/rtl-14.0.0-canary.261f2db59.0.tgz", - "integrity": "sha512-bVnXBbUsHs57+EXdeFbcwaKy3lT/itI/qTLmJ88ar0qaGEujO1GmESHm3ioqkeo4kQpTfDhBwQGeEi1aDaTdFg==", - "dev": true, - "requires": { - "@material/theme": "14.0.0-canary.261f2db59.0", - "tslib": "^2.1.0" - } - }, - "@material/shape": { - "version": "14.0.0-canary.261f2db59.0", - "resolved": "https://registry.npmjs.org/@material/shape/-/shape-14.0.0-canary.261f2db59.0.tgz", - "integrity": "sha512-VjcQltd1uF9ugvLExMy00SMISjy/370o8lsZlb1T+xHyhXHL3UxeuWYLW5Amq6mbx65+c9Df9WmlXXOdebpEkw==", - "dev": true, - "requires": { - "@material/feature-targeting": "14.0.0-canary.261f2db59.0", - "@material/rtl": "14.0.0-canary.261f2db59.0", - "@material/theme": "14.0.0-canary.261f2db59.0", - "tslib": "^2.1.0" - } - }, - "@material/textfield": { - "version": "14.0.0-canary.261f2db59.0", - "resolved": "https://registry.npmjs.org/@material/textfield/-/textfield-14.0.0-canary.261f2db59.0.tgz", - "integrity": "sha512-KBPgpvvVFBfLx9nc6+wWOS2hJ40JVwh5KBjMoYbiOEFLf0O7SgCAVREHaFAXrPsC8AeTyUipx6TReONIGfMCPQ==", - "dev": true, - "requires": { - "@material/animation": "14.0.0-canary.261f2db59.0", - "@material/base": "14.0.0-canary.261f2db59.0", - "@material/density": "14.0.0-canary.261f2db59.0", - "@material/dom": "14.0.0-canary.261f2db59.0", - "@material/feature-targeting": "14.0.0-canary.261f2db59.0", - "@material/floating-label": "14.0.0-canary.261f2db59.0", - "@material/line-ripple": "14.0.0-canary.261f2db59.0", - "@material/notched-outline": "14.0.0-canary.261f2db59.0", - "@material/ripple": "14.0.0-canary.261f2db59.0", - "@material/rtl": "14.0.0-canary.261f2db59.0", - "@material/shape": "14.0.0-canary.261f2db59.0", - "@material/theme": "14.0.0-canary.261f2db59.0", - "@material/typography": "14.0.0-canary.261f2db59.0", - "tslib": "^2.1.0" - } - }, - "@material/theme": { - "version": "14.0.0-canary.261f2db59.0", - "resolved": "https://registry.npmjs.org/@material/theme/-/theme-14.0.0-canary.261f2db59.0.tgz", - "integrity": "sha512-bUqyFT0QF8Nxx02fekt3CXIfC9DEPOPdo2hjgdtvhrNP+vftbkI2tKZ5/uRUnVA+zqQAOyIl5z6FOMg4fyemCA==", - "dev": true, - "requires": { - "@material/feature-targeting": "14.0.0-canary.261f2db59.0", - "tslib": "^2.1.0" - } - }, - "@material/touch-target": { - "version": "14.0.0-canary.261f2db59.0", - "resolved": "https://registry.npmjs.org/@material/touch-target/-/touch-target-14.0.0-canary.261f2db59.0.tgz", - "integrity": "sha512-xA6TTHN7aOTXg/+c6mQJlogzTD+Sp8WPC5TK8RBXbQxEykGXGW15p+H9pG+rX/gzD5iehnHRBrDUFmAGoskhcQ==", - "dev": true, - "requires": { - "@material/base": "14.0.0-canary.261f2db59.0", - "@material/feature-targeting": "14.0.0-canary.261f2db59.0", - "@material/rtl": "14.0.0-canary.261f2db59.0", - "tslib": "^2.1.0" - } - }, - "@material/typography": { - "version": "14.0.0-canary.261f2db59.0", - "resolved": "https://registry.npmjs.org/@material/typography/-/typography-14.0.0-canary.261f2db59.0.tgz", - "integrity": "sha512-WOCdcNkD5KBRAwICcRqWBRG3cDkyrwK5USTNmG0oxnwnZAN7daOpPTdLppVAhadE7faj8d67ON+V9pH7+T62FQ==", - "dev": true, - "requires": { - "@material/feature-targeting": "14.0.0-canary.261f2db59.0", - "@material/theme": "14.0.0-canary.261f2db59.0", - "tslib": "^2.1.0" - } - }, - "@tootallnate/once": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz", - "integrity": "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==", - "dev": true - }, - "@types/codemirror": { - "version": "5.60.5", - "resolved": "https://registry.npmjs.org/@types/codemirror/-/codemirror-5.60.5.tgz", - "integrity": "sha512-TiECZmm8St5YxjFUp64LK0c8WU5bxMDt9YaAek1UqUb9swrSCoJhh92fWu1p3mTEqlHjhB5sY7OFBhWroJXZVg==", - "dev": true, - "requires": { - "@types/tern": "*" - } - }, - "@types/estree": { - "version": "0.0.51", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.51.tgz", - "integrity": "sha512-CuPgU6f3eT/XgKKPqKd/gLZV1Xmvf1a2R5POBOGQa6uv82xpls89HU5zKeVoyR8XzHd1RGNOlQlvUe3CFkjWNQ==", - "dev": true - }, - "@types/glob": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.2.0.tgz", - "integrity": "sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA==", - "dev": true, - "requires": { - "@types/minimatch": "*", - "@types/node": "*" - } - }, - "@types/minimatch": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.5.tgz", - "integrity": "sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ==", - "dev": true - }, - "@types/mocha": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-9.1.0.tgz", - "integrity": "sha512-QCWHkbMv4Y5U9oW10Uxbr45qMMSzl4OzijsozynUAgx3kEHUdXB00udx2dWDQ7f2TU2a2uuiFaRZjCe3unPpeg==", - "dev": true - }, - "@types/node": { - "version": "14.18.12", - "resolved": "https://registry.npmjs.org/@types/node/-/node-14.18.12.tgz", - "integrity": "sha512-q4jlIR71hUpWTnGhXWcakgkZeHa3CCjcQcnuzU8M891BAWA2jHiziiWEPEkdS5pFsz7H9HJiy8BrK7tBRNrY7A==", - "dev": true - }, - "@types/tern": { - "version": "0.23.4", - "resolved": "https://registry.npmjs.org/@types/tern/-/tern-0.23.4.tgz", - "integrity": "sha512-JAUw1iXGO1qaWwEOzxTKJZ/5JxVeON9kvGZ/osgZaJImBnyjyn0cjovPsf6FNLmyGY8Vw9DoXZCMlfMkMwHRWg==", - "dev": true, - "requires": { - "@types/estree": "*" - } - }, - "@types/trusted-types": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/@types/trusted-types/-/trusted-types-2.0.2.tgz", - "integrity": "sha512-F5DIZ36YVLE+PN+Zwws4kJogq47hNgX3Nx6WyDJ3kcplxyke3XIzB8uK5n/Lpm1HBsbGzd6nmGehL8cPekP+Tg==", - "dev": true - }, - "@types/vscode": { - "version": "1.65.0", - "resolved": "https://registry.npmjs.org/@types/vscode/-/vscode-1.65.0.tgz", - "integrity": "sha512-wQhExnh2nEzpjDMSKhUvnNmz3ucpd3E+R7wJkOhBNK3No6fG3VUdmVmMOKD0A8NDZDDDiQcLNxe3oGmX5SjJ5w==", - "dev": true - }, - "@ungap/promise-all-settled": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@ungap/promise-all-settled/-/promise-all-settled-1.1.2.tgz", - "integrity": "sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q==", - "dev": true - }, - "@vscode/test-electron": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/@vscode/test-electron/-/test-electron-2.1.3.tgz", - "integrity": "sha512-ps/yJ/9ToUZtR1dHfWi1mDXtep1VoyyrmGKC3UnIbScToRQvbUjyy1VMqnMEW3EpMmC3g7+pyThIPtPyCLHyow==", - "dev": true, - "requires": { - "http-proxy-agent": "^4.0.1", - "https-proxy-agent": "^5.0.0", - "rimraf": "^3.0.2", - "unzipper": "^0.10.11" - } - }, - "agent-base": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", - "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", - "dev": true, - "requires": { - "debug": "4" - } - }, - "ansi-colors": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", - "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", - "dev": true - }, - "ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true - }, - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "anymatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", - "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", - "dev": true, - "requires": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - } - }, - "argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true - }, - "balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "dev": true - }, - "big-integer": { - "version": "1.6.51", - "resolved": "https://registry.npmjs.org/big-integer/-/big-integer-1.6.51.tgz", - "integrity": "sha512-GPEid2Y9QU1Exl1rpO9B2IPJGHPSupF5GnVIP0blYvNOMer2bTvSWs1jGOUg04hTmu67nmLsQ9TBo1puaotBHg==", - "dev": true - }, - "binary": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/binary/-/binary-0.3.0.tgz", - "integrity": "sha1-n2BVO8XOjDOG87VTz/R0Yq3sqnk=", - "dev": true, - "requires": { - "buffers": "~0.1.1", - "chainsaw": "~0.1.0" - } - }, - "binary-extensions": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", - "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", - "dev": true - }, - "bluebird": { - "version": "3.4.7", - "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.4.7.tgz", - "integrity": "sha1-9y12C+Cbf3bQjtj66Ysomo0F+rM=", - "dev": true - }, - "brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "dev": true, - "requires": { - "fill-range": "^7.0.1" - } - }, - "browser-stdout": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", - "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==", - "dev": true - }, - "buffer-indexof-polyfill": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/buffer-indexof-polyfill/-/buffer-indexof-polyfill-1.0.2.tgz", - "integrity": "sha512-I7wzHwA3t1/lwXQh+A5PbNvJxgfo5r3xulgpYDB5zckTu/Z9oUK9biouBKQUjEqzaz3HnAT6TYoovmE+GqSf7A==", - "dev": true - }, - "buffers": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/buffers/-/buffers-0.1.1.tgz", - "integrity": "sha1-skV5w77U1tOWru5tmorn9Ugqt7s=", - "dev": true - }, - "camelcase": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", - "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", - "dev": true - }, - "chainsaw": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/chainsaw/-/chainsaw-0.1.0.tgz", - "integrity": "sha1-XqtQsor+WAdNDVgpE4iCi15fvJg=", - "dev": true, - "requires": { - "traverse": ">=0.3.0 <0.4" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "dependencies": { - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "chokidar": { - "version": "3.5.3", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", - "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", - "dev": true, - "requires": { - "anymatch": "~3.1.2", - "braces": "~3.0.2", - "fsevents": "~2.3.2", - "glob-parent": "~5.1.2", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.6.0" - } - }, - "cliui": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", - "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", - "dev": true, - "requires": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^7.0.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "comlink": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/comlink/-/comlink-4.3.1.tgz", - "integrity": "sha512-+YbhUdNrpBZggBAHWcgQMLPLH1KDF3wJpeqrCKieWQ8RL7atmgsgTQko1XEBK6PsecfopWNntopJ+ByYG1lRaA==", - "dev": true - }, - "concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", - "dev": true - }, - "core-util-is": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", - "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", - "dev": true - }, - "debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, - "requires": { - "ms": "2.1.2" - } - }, - "decamelize": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-4.0.0.tgz", - "integrity": "sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==", - "dev": true - }, - "diff": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/diff/-/diff-5.0.0.tgz", - "integrity": "sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==", - "dev": true - }, - "duplexer2": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.1.4.tgz", - "integrity": "sha1-ixLauHjA1p4+eJEFFmKjL8a93ME=", - "dev": true, - "requires": { - "readable-stream": "^2.0.2" - } - }, - "emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true - }, - "escalade": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", - "dev": true - }, - "escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", - "dev": true - }, - "fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", - "dev": true, - "requires": { - "to-regex-range": "^5.0.1" - } - }, - "find-up": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", - "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", - "dev": true, - "requires": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" - } - }, - "flat": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", - "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", - "dev": true - }, - "fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", - "dev": true - }, - "fsevents": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", - "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", - "dev": true, - "optional": true - }, - "fstream": { - "version": "1.0.12", - "resolved": "https://registry.npmjs.org/fstream/-/fstream-1.0.12.tgz", - "integrity": "sha512-WvJ193OHa0GHPEL+AycEJgxvBEwyfRkN1vhjca23OaPVMCaLCXTd5qAu82AjTcgP1UJmytkOKb63Ypde7raDIg==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "inherits": "~2.0.0", - "mkdirp": ">=0.5 0", - "rimraf": "2" - }, - "dependencies": { - "rimraf": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", - "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", - "dev": true, - "requires": { - "glob": "^7.1.3" - } - } - } - }, - "fuse.js": { - "version": "6.5.3", - "resolved": "https://registry.npmjs.org/fuse.js/-/fuse.js-6.5.3.tgz", - "integrity": "sha512-sA5etGE7yD/pOqivZRBvUBd/NaL2sjAu6QuSaFoe1H2BrJSkH/T/UXAJ8CdXdw7DvY3Hs8CXKYkDWX7RiP5KOg==", - "dev": true - }, - "get-caller-file": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", - "dev": true - }, - "glob": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", - "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", - "dev": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, - "requires": { - "is-glob": "^4.0.1" - } - }, - "graceful-fs": { - "version": "4.2.9", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.9.tgz", - "integrity": "sha512-NtNxqUcXgpW2iMrfqSfR73Glt39K+BLwWsPs94yR63v45T0Wbej7eRmL5cWfwEgqXnmjQp3zaJTshdRW/qC2ZQ==", - "dev": true - }, - "growl": { - "version": "1.10.5", - "resolved": "https://registry.npmjs.org/growl/-/growl-1.10.5.tgz", - "integrity": "sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==", - "dev": true - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "he": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", - "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", - "dev": true - }, - "http-proxy-agent": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz", - "integrity": "sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==", - "dev": true, - "requires": { - "@tootallnate/once": "1", - "agent-base": "6", - "debug": "4" - } - }, - "https-proxy-agent": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz", - "integrity": "sha512-EkYm5BcKUGiduxzSt3Eppko+PiNWNEpa4ySk9vTC6wDsQJW9rHSa+UhGNJoRYp7bz6Ht1eaRIa6QaJqO5rCFbA==", - "dev": true, - "requires": { - "agent-base": "6", - "debug": "4" - } - }, - "inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", - "dev": true, - "requires": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "dev": true - }, - "is-binary-path": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", - "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", - "dev": true, - "requires": { - "binary-extensions": "^2.0.0" - } - }, - "is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true - }, - "is-glob": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", - "dev": true, - "requires": { - "is-extglob": "^2.1.1" - } - }, - "is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "dev": true - }, - "is-plain-obj": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", - "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", - "dev": true - }, - "is-unicode-supported": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", - "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", - "dev": true - }, - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", - "dev": true - }, - "isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", - "dev": true - }, - "js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "dev": true, - "requires": { - "argparse": "^2.0.1" - } - }, - "listenercount": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/listenercount/-/listenercount-1.0.1.tgz", - "integrity": "sha1-hMinKrWcRyUyFIDJdeZQg0LnCTc=", - "dev": true - }, - "lit": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/lit/-/lit-2.2.1.tgz", - "integrity": "sha512-dSe++R50JqrvNGXmI9OE13de1z5U/Y3J2dTm/9GC86vedI8ILoR8ZGnxfThFpvQ9m0lR0qRnIR4IiKj/jDCfYw==", - "dev": true, - "requires": { - "@lit/reactive-element": "^1.3.0", - "lit-element": "^3.2.0", - "lit-html": "^2.2.0" - }, - "dependencies": { - "@lit/reactive-element": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/@lit/reactive-element/-/reactive-element-1.3.1.tgz", - "integrity": "sha512-nOJARIr3pReqK3hfFCSW2Zg/kFcFsSAlIE7z4a0C9D2dPrgD/YSn3ZP2ET/rxKB65SXyG7jJbkynBRm+tGlacw==", - "dev": true - } - } - }, - "lit-element": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/lit-element/-/lit-element-3.2.0.tgz", - "integrity": "sha512-HbE7yt2SnUtg5DCrWt028oaU4D5F4k/1cntAFHTkzY8ZIa8N0Wmu92PxSxucsQSOXlODFrICkQ5x/tEshKi13g==", - "dev": true, - "requires": { - "@lit/reactive-element": "^1.3.0", - "lit-html": "^2.2.0" - }, - "dependencies": { - "@lit/reactive-element": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/@lit/reactive-element/-/reactive-element-1.3.1.tgz", - "integrity": "sha512-nOJARIr3pReqK3hfFCSW2Zg/kFcFsSAlIE7z4a0C9D2dPrgD/YSn3ZP2ET/rxKB65SXyG7jJbkynBRm+tGlacw==", - "dev": true - } - } - }, - "lit-html": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/lit-html/-/lit-html-2.2.1.tgz", - "integrity": "sha512-AiJ/Rs0awjICs2FioTnHSh+Np5dhYSkyRczKy3wKjp8qjLhr1Ov+GiHrUQNdX8ou1LMuznpIME990AZsa/tR8g==", - "dev": true, - "requires": { - "@types/trusted-types": "^2.0.2" - } - }, - "locate-path": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", - "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", - "dev": true, - "requires": { - "p-locate": "^5.0.0" - } - }, - "log-symbols": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", - "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", - "dev": true, - "requires": { - "chalk": "^4.1.0", - "is-unicode-supported": "^0.1.0" - } - }, - "minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "minimist": { - "version": "1.2.6", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz", - "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==", - "dev": true - }, - "mkdirp": { - "version": "0.5.6", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", - "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", - "dev": true, - "requires": { - "minimist": "^1.2.6" - } - }, - "mocha": { - "version": "9.2.2", - "resolved": "https://registry.npmjs.org/mocha/-/mocha-9.2.2.tgz", - "integrity": "sha512-L6XC3EdwT6YrIk0yXpavvLkn8h+EU+Y5UcCHKECyMbdUIxyMuZj4bX4U9e1nvnvUUvQVsV2VHQr5zLdcUkhW/g==", - "dev": true, - "requires": { - "@ungap/promise-all-settled": "1.1.2", - "ansi-colors": "4.1.1", - "browser-stdout": "1.3.1", - "chokidar": "3.5.3", - "debug": "4.3.3", - "diff": "5.0.0", - "escape-string-regexp": "4.0.0", - "find-up": "5.0.0", - "glob": "7.2.0", - "growl": "1.10.5", - "he": "1.2.0", - "js-yaml": "4.1.0", - "log-symbols": "4.1.0", - "minimatch": "4.2.1", - "ms": "2.1.3", - "nanoid": "3.3.1", - "serialize-javascript": "6.0.0", - "strip-json-comments": "3.1.1", - "supports-color": "8.1.1", - "which": "2.0.2", - "workerpool": "6.2.0", - "yargs": "16.2.0", - "yargs-parser": "20.2.4", - "yargs-unparser": "2.0.0" - }, - "dependencies": { - "debug": { - "version": "4.3.3", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", - "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", - "dev": true, - "requires": { - "ms": "2.1.2" - }, - "dependencies": { - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - } - } - }, - "minimatch": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-4.2.1.tgz", - "integrity": "sha512-9Uq1ChtSZO+Mxa/CL1eGizn2vRn3MlLgzhT0Iz8zaY8NdvxvB0d5QdPFmCKf7JKA9Lerx5vRrnwO03jsSfGG9g==", - "dev": true, - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "dev": true - } - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - }, - "nanoid": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.1.tgz", - "integrity": "sha512-n6Vs/3KGyxPQd6uO0eH4Bv0ojGSUvuLlIHtC3Y0kEO23YRge8H9x1GCzLn28YX0H66pMkxuaeESFq4tKISKwdw==", - "dev": true - }, - "normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "dev": true - }, - "once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", - "dev": true, - "requires": { - "wrappy": "1" - } - }, - "p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "dev": true, - "requires": { - "yocto-queue": "^0.1.0" - } - }, - "p-locate": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", - "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", - "dev": true, - "requires": { - "p-limit": "^3.0.2" - } - }, - "path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true - }, - "path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", - "dev": true - }, - "picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "dev": true - }, - "playground-elements": { - "version": "0.15.2", - "resolved": "https://registry.npmjs.org/playground-elements/-/playground-elements-0.15.2.tgz", - "integrity": "sha512-XL4MnTIVa/dCWvqAtDgZM9KOyvQtZaas4CEUXrZZmhzFRMRMAe572VBtjpHdulFvn51rJvJsxXcJaTp03RhMBQ==", - "dev": true, - "requires": { - "@material/mwc-button": "^0.25.1", - "@material/mwc-icon-button": "^0.25.1", - "@material/mwc-linear-progress": "^0.25.1", - "@material/mwc-list": "^0.25.1", - "@material/mwc-menu": "^0.25.1", - "@material/mwc-textfield": "^0.25.1", - "@types/codemirror": "^5.60.0", - "comlink": "=4.3.1", - "fuse.js": "^6.4.6", - "lit": "^2.0.0", - "tslib": "^2.0.3", - "vscode-languageserver": "^7.0.0" - } - }, - "process-nextick-args": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", - "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", - "dev": true - }, - "randombytes": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", - "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", - "dev": true, - "requires": { - "safe-buffer": "^5.1.0" - } - }, - "readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "dev": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - }, - "dependencies": { - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - } - } - }, - "readdirp": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", - "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", - "dev": true, - "requires": { - "picomatch": "^2.2.1" - } - }, - "require-directory": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", - "dev": true - }, - "rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "dev": true, - "requires": { - "glob": "^7.1.3" - } - }, - "safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "dev": true - }, - "serialize-javascript": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz", - "integrity": "sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==", - "dev": true, - "requires": { - "randombytes": "^2.1.0" - } - }, - "setimmediate": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", - "integrity": "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=", - "dev": true - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "requires": { - "safe-buffer": "~5.1.0" - }, - "dependencies": { - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - } - } - }, - "string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, - "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - } - }, - "strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "requires": { - "ansi-regex": "^5.0.1" - } - }, - "strip-json-comments": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", - "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", - "dev": true - }, - "supports-color": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - }, - "to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dev": true, - "requires": { - "is-number": "^7.0.0" - } - }, - "traverse": { - "version": "0.3.9", - "resolved": "https://registry.npmjs.org/traverse/-/traverse-0.3.9.tgz", - "integrity": "sha1-cXuPIgzAu3tE5AUUwisui7xw2Lk=", - "dev": true - }, - "tslib": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.1.tgz", - "integrity": "sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw==", - "dev": true - }, - "typescript": { - "version": "4.6.3", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.6.3.tgz", - "integrity": "sha512-yNIatDa5iaofVozS/uQJEl3JRWLKKGJKh6Yaiv0GLGSuhpFJe7P3SbHZ8/yjAHRQwKRoA6YZqlfjXWmVzoVSMw==", - "dev": true - }, - "unzipper": { - "version": "0.10.11", - "resolved": "https://registry.npmjs.org/unzipper/-/unzipper-0.10.11.tgz", - "integrity": "sha512-+BrAq2oFqWod5IESRjL3S8baohbevGcVA+teAIOYWM3pDVdseogqbzhhvvmiyQrUNKFUnDMtELW3X8ykbyDCJw==", - "dev": true, - "requires": { - "big-integer": "^1.6.17", - "binary": "~0.3.0", - "bluebird": "~3.4.1", - "buffer-indexof-polyfill": "~1.0.0", - "duplexer2": "~0.1.4", - "fstream": "^1.0.12", - "graceful-fs": "^4.2.2", - "listenercount": "~1.0.1", - "readable-stream": "~2.3.6", - "setimmediate": "~1.0.4" - } - }, - "util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", - "dev": true - }, - "vscode-jsonrpc": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/vscode-jsonrpc/-/vscode-jsonrpc-6.0.0.tgz", - "integrity": "sha512-wnJA4BnEjOSyFMvjZdpiOwhSq9uDoK8e/kpRJDTaMYzwlkrhG1fwDIZI94CLsLzlCK5cIbMMtFlJlfR57Lavmg==", - "dev": true - }, - "vscode-languageserver": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/vscode-languageserver/-/vscode-languageserver-7.0.0.tgz", - "integrity": "sha512-60HTx5ID+fLRcgdHfmz0LDZAXYEV68fzwG0JWwEPBode9NuMYTIxuYXPg4ngO8i8+Ou0lM7y6GzaYWbiDL0drw==", - "dev": true, - "requires": { - "vscode-languageserver-protocol": "3.16.0" - } - }, - "vscode-languageserver-protocol": { - "version": "3.16.0", - "resolved": "https://registry.npmjs.org/vscode-languageserver-protocol/-/vscode-languageserver-protocol-3.16.0.tgz", - "integrity": "sha512-sdeUoAawceQdgIfTI+sdcwkiK2KU+2cbEYA0agzM2uqaUy2UpnnGHtWTHVEtS0ES4zHU0eMFRGN+oQgDxlD66A==", - "dev": true, - "requires": { - "vscode-jsonrpc": "6.0.0", - "vscode-languageserver-types": "3.16.0" - } - }, - "vscode-languageserver-types": { - "version": "3.16.0", - "resolved": "https://registry.npmjs.org/vscode-languageserver-types/-/vscode-languageserver-types-3.16.0.tgz", - "integrity": "sha512-k8luDIWJWyenLc5ToFQQMaSrqCHiLwyKPHKPQZ5zz21vM+vIVUSvsRpcbiECH4WR88K2XZqc4ScRcZ7nk/jbeA==", - "dev": true - }, - "which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, - "requires": { - "isexe": "^2.0.0" - } - }, - "workerpool": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.2.0.tgz", - "integrity": "sha512-Rsk5qQHJ9eowMH28Jwhe8HEbmdYDX4lwoMWshiCXugjtHqMD9ZbiqSDLxcsfdqsETPzVUtX5s1Z5kStiIM6l4A==", - "dev": true - }, - "wrap-ansi": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "dev": true, - "requires": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - } - }, - "wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", - "dev": true - }, - "y18n": { - "version": "5.0.8", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", - "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", - "dev": true - }, - "yargs": { - "version": "16.2.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", - "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", - "dev": true, - "requires": { - "cliui": "^7.0.2", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.0", - "y18n": "^5.0.5", - "yargs-parser": "^20.2.2" - } - }, - "yargs-parser": { - "version": "20.2.4", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.4.tgz", - "integrity": "sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==", - "dev": true - }, - "yargs-unparser": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-2.0.0.tgz", - "integrity": "sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==", - "dev": true, - "requires": { - "camelcase": "^6.0.0", - "decamelize": "^4.0.0", - "flat": "^5.0.2", - "is-plain-obj": "^2.1.0" - } - }, - "yocto-queue": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", - "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", - "dev": true - } - } -} diff --git a/packages/lit-dev-tutorial-plugin/package.json b/packages/lit-dev-tutorial-plugin/package.json index 9cd76216c..fc6aeef24 100644 --- a/packages/lit-dev-tutorial-plugin/package.json +++ b/packages/lit-dev-tutorial-plugin/package.json @@ -3,7 +3,7 @@ "private": true, "displayName": "lit.dev Tutorial Editor", "description": "Helps you create tutorials for lit.dev", - "version": "0.0.1", + "version": "0.0.0", "author": "Google LLC", "license": "BSD-3-Clause", "main": "./out/extension.js", @@ -180,21 +180,42 @@ }, "scripts": { "vscode:prepublish": "npm run build", - "build": "tsc -p ./", - "watch": "tsc -watch -p ./", - "pretest": "npm run build", - "test": "node ./out/test/runTest.js", - "clean": "rm -rf out .vscode-test .test-bin" + "build": "wireit", + "test": "wireit" }, "devDependencies": { - "@types/glob": "^7.2.0", - "@types/mocha": "^9.1.0", - "@types/node": "14.x", - "@types/vscode": "^1.65.0", - "@vscode/test-electron": "^2.1.2", - "glob": "^7.2.0", - "mocha": "^9.2.1", - "playground-elements": "^0.15.2", - "typescript": "^4.5.5" + "@types/mocha": "^10.0.6", + "@types/node": "^16.0.0", + "@types/vscode": "^1.87.0", + "@vscode/test-electron": "^2.3.9", + "glob": "^10.3.0", + "mocha": "^10.0.6" + }, + "wireit": { + "build": { + "command": "tsc --build --pretty --incremental", + "files": [ + "./src/**/*.ts", + "tsconfig.json" + ], + "output": [ + "./out/", + "./tsconfig.tsbuildinfo" + ], + "clean": "if-file-deleted" + }, + "test": { + "command": "node ./out/test/runTest.js", + "dependencies": [ + "build" + ], + "files": [ + "./out/test/" + ], + "output": [ + "./.vscode-test", + "./.test-bin" + ] + } } } diff --git a/packages/lit-dev-tutorial-plugin/src/fs-helpers.ts b/packages/lit-dev-tutorial-plugin/src/fs-helpers.ts index 43fe0c696..678cc693a 100644 --- a/packages/lit-dev-tutorial-plugin/src/fs-helpers.ts +++ b/packages/lit-dev-tutorial-plugin/src/fs-helpers.ts @@ -37,9 +37,12 @@ export const addTutorialTo11tyData = ( let categoryLines: {cat: TutorialCategory; line: number}[] = []; for (const [i, line] of lines.entries()) { - if (line.includes(`const tutorials = await Promise.all([`)) { + if (line.includes(`return await Promise.all([`)) { arrayStartLine = i; } else if (line.includes(` ]);`)) { + if (arrayStartLine === -1) { + continue; + } arrayEndLine = i; break; } else if ( @@ -54,7 +57,7 @@ export const addTutorialTo11tyData = ( } if (arrayStartLine === -1 || arrayEndLine === -1) { - vscode.window.showErrorMessage('Malformed tutorials.11tydata.js'); + vscode.window.showErrorMessage('Malformed _data/tutorials.js'); return; } @@ -71,7 +74,7 @@ export const addTutorialTo11tyData = ( if (line === -1) { vscode.window.showErrorMessage( - 'Cannot find category ${category} in tutorials.11tydata.js' + 'Cannot find category ${category} in _data/tutorials.js' ); return; } diff --git a/packages/lit-dev-tutorial-plugin/src/test/suite/extension.test.ts b/packages/lit-dev-tutorial-plugin/src/test/suite/extension.test.ts index f2da84b43..217eef725 100644 --- a/packages/lit-dev-tutorial-plugin/src/test/suite/extension.test.ts +++ b/packages/lit-dev-tutorial-plugin/src/test/suite/extension.test.ts @@ -15,6 +15,7 @@ import {beforeEach, afterEach, before} from 'mocha'; suite('Tutorial Extension', () => { vscode.window.showInformationMessage('Start all tests.'); + let litDevPath: string; let litDevContentPath!: string; before(async () => { diff --git a/packages/lit-dev-tutorial-plugin/src/test/suite/index.ts b/packages/lit-dev-tutorial-plugin/src/test/suite/index.ts index 5b329ffae..e7eb86905 100644 --- a/packages/lit-dev-tutorial-plugin/src/test/suite/index.ts +++ b/packages/lit-dev-tutorial-plugin/src/test/suite/index.ts @@ -6,42 +6,38 @@ import * as path from 'path'; import * as Mocha from 'mocha'; -import * as glob from 'glob'; +import {glob} from 'glob'; export function run(): Promise { - // Create the mocha test - const mocha = new Mocha({ - ui: 'tdd', - color: true - }); + // Create the mocha test + const mocha = new Mocha({ + ui: 'tdd', + color: true, + }); - const testsRoot = path.resolve(__dirname, '..'); + const testsRoot = path.resolve(__dirname, '..'); - return new Promise((c, e) => { - glob('**/**.test.js', { cwd: testsRoot }, (err, files) => { - console.log(files); - if (err) { - return e(err); - } + return new Promise(async (c, e) => { + const files = await glob('**/**.test.js', {cwd: testsRoot}); + console.log(files); - console.log(path.resolve(testsRoot, files[0])); + console.log(path.resolve(testsRoot, files[0])); - // Add files to the test suite - files.forEach(f => mocha.addFile(path.resolve(testsRoot, f))); + // Add files to the test suite + files.forEach((f) => mocha.addFile(path.resolve(testsRoot, f))); - try { - // Run the mocha test - mocha.run(failures => { - if (failures > 0) { - e(new Error(`${failures} tests failed.`)); - } else { - c(); - } - }); - } catch (err) { - console.error(err); - e(err); - } - }); - }); + try { + // Run the mocha test + mocha.run((failures) => { + if (failures > 0) { + e(new Error(`${failures} tests failed.`)); + } else { + c(); + } + }); + } catch (err) { + console.error(err); + e(err); + } + }); } diff --git a/packages/lit-dev-tutorial-plugin/src/test/util.ts b/packages/lit-dev-tutorial-plugin/src/test/util.ts index 836044902..40c2c9232 100644 --- a/packages/lit-dev-tutorial-plugin/src/test/util.ts +++ b/packages/lit-dev-tutorial-plugin/src/test/util.ts @@ -26,6 +26,12 @@ export const createEmptyLitDevRepo = async () => { 'site', 'tutorials' ); + const litDevSite11tydataPath = path.join( + litDevContentPath, + 'site', + '_data', + 'tutorials.js' + ); const litDevSiteTutorialContentPath = path.join( litDevSiteTutorialPath, 'content' @@ -76,10 +82,7 @@ export const createEmptyLitDevRepo = async () => { path.join(litDevSampleTutorialPath, 'base.json'), JSON.stringify(baseJson, null, 2) ), - fs.writeFile( - path.join(litDevSiteTutorialPath, 'tutorials.11tydata.js'), - tutorials11tyData - ), + fs.writeFile(litDevSite11tydataPath, tutorials11tyData), ]); return {litDevPath, litDevContentPath}; @@ -110,17 +113,19 @@ export const prepopulateTutorial = async ( 'site', 'tutorials' ); + const litDevSite11tydataPath = path.join( + litDevContentPath, + 'site', + '_data', + 'tutorials.js' + ); const litDevSiteTutorialContentPath = path.join( litDevSiteTutorialPath, 'content' ); const promises: Promise[] = []; - const dataFile = await ( - await fs.readFile( - path.join(litDevSiteTutorialPath, 'tutorials.11tydata.js') - ) - ).toString(); + const dataFile = await (await fs.readFile(litDevSite11tydataPath)).toString(); const dataFileLines = dataFile.split('\n'); for (const tutorial of options.tutorials) { @@ -193,7 +198,7 @@ export const prepopulateTutorial = async ( for (let i = options.tutorials.length - 1; i >= 0; i--) { const tutorial = options.tutorials[i]; - const tutorialSection = tutorial.category; + const tutorialSection = (tutorial as typeof tutorial & {category ?: 'Learn'|'Build'}).category ?? 'Learn'; const tutorialIndex = dataFileLines.findIndex((line) => line.includes(`// ${tutorialSection}`) ); @@ -202,12 +207,7 @@ export const prepopulateTutorial = async ( dataFileLines.splice(tutorialIndex + 1, 0, tutorialLine); } - promises.push( - fs.writeFile( - path.join(litDevSiteTutorialPath, 'tutorials.11tydata.js'), - dataFileLines.join('\n') - ) - ); + promises.push(fs.writeFile(litDevSite11tydataPath, dataFileLines.join('\n'))); await Promise.all(promises); }; diff --git a/packages/lit-dev-tutorial-plugin/src/tree-items/before-after-dir.ts b/packages/lit-dev-tutorial-plugin/src/tree-items/before-after-dir.ts index e4982e68e..9538c1eea 100644 --- a/packages/lit-dev-tutorial-plugin/src/tree-items/before-after-dir.ts +++ b/packages/lit-dev-tutorial-plugin/src/tree-items/before-after-dir.ts @@ -61,7 +61,11 @@ export class BeforeAfterDir extends vscode.TreeItem { } } - static create(tutorialStep: TutorialStep, name: 'before' | 'after') { + static create( + tutorialStep: TutorialStep, + name: 'before' | 'after', + checkable?: boolean + ) { const provider = tutorialStep.provider; const newDir = new BeforeAfterDir(provider, tutorialStep, name); newDir.contextValue = `${name}Dir`; @@ -89,6 +93,9 @@ export class BeforeAfterDir extends vscode.TreeItem { extends: '/samples/base.json', files: {}, }; + if (checkable) { + projectJson.extends = '/samples/checkable-tutorial-base.json'; + } GenericFile.create( provider, path.join(newDir.path, 'project.json'), @@ -103,11 +110,31 @@ export class BeforeAfterDir extends vscode.TreeItem { - +${ + checkable + ? ' \n' + : '' +} ` ); + if (checkable) { + PlaygroundFile.create( + newDir, + '_check-code.js', + {hidden: true}, + `import {installCodeChecker} from './_check-code-helpers.js'; + +installCodeChecker(async () => { + let passed = true; + let message = ''; + + window.location.reload(); + return {passed, message}; +});` + ); + } provider.refresh(); diff --git a/packages/lit-dev-tutorial-plugin/src/tree-items/tutorial-step.ts b/packages/lit-dev-tutorial-plugin/src/tree-items/tutorial-step.ts index 11c04ff41..e59c521b1 100644 --- a/packages/lit-dev-tutorial-plugin/src/tree-items/tutorial-step.ts +++ b/packages/lit-dev-tutorial-plugin/src/tree-items/tutorial-step.ts @@ -288,7 +288,7 @@ export class TutorialStep extends vscode.TreeItem { const step = new TutorialStep(provider, tutorial, dirName, hideSolve); tutorial.pushStep(step); - const beforeStep = BeforeAfterDir.create(step, 'before'); + const beforeStep = BeforeAfterDir.create(step, 'before', checkable); step.beforeDir = beforeStep; if (hasAfter && !hideSolve) { diff --git a/packages/lit-dev-tutorial-plugin/src/tree-items/tutorial.ts b/packages/lit-dev-tutorial-plugin/src/tree-items/tutorial.ts index 785d17804..a4303adb5 100644 --- a/packages/lit-dev-tutorial-plugin/src/tree-items/tutorial.ts +++ b/packages/lit-dev-tutorial-plugin/src/tree-items/tutorial.ts @@ -110,23 +110,12 @@ export class Tutorial extends vscode.TreeItem { { placeHolder: 'Difficulty', } - )) as TutorialDifficulty|undefined; + )) as TutorialDifficulty | undefined; if (difficulty === undefined) { return; } - const size = (await vscode.window.showQuickPick( - ['tiny', 'small', 'medium', 'large'], - { - title: 'Card size', - } - )) as TutorialCardSize|undefined; - - if (size === undefined) { - return; - } - const duration = (await vscode.window.showInputBox({ prompt: 'Duration (mins)', value: '0', @@ -143,23 +132,12 @@ export class Tutorial extends vscode.TreeItem { return null; }, - })) as unknown as number|undefined; + })) as unknown as number | undefined; if (duration === undefined) { return; } - const category = (await vscode.window.showQuickPick( - ['Learn', 'Build', 'Draft'], - { - title: 'Catalog Category', - } - )) as TutorialCategory|undefined; - - if (category === undefined) { - return; - } - const imgSrc = await vscode.window.showInputBox({ prompt: 'Card Image source (optional)', placeHolder: '/images/tutorials/my-tutorial/card-image.png', @@ -192,14 +170,16 @@ export class Tutorial extends vscode.TreeItem { fs.mkdirSync(tutorialContentPath); } catch (_e) {} + const dateObj = new Date(); + const date = `${dateObj.getFullYear()}-${dateObj.getMonth() + 1}-${dateObj.getDate()}`; + const tutorialJson: TutorialJson = { header: name, difficulty: difficulty, - size: size, duration: duration, - category: category, imgSrc, imgAlt, + date, steps: [], }; @@ -210,11 +190,7 @@ export class Tutorial extends vscode.TreeItem { fs.writeFileSync(path.join(tutorialPath, 'description.md'), ''); - await addTutorialTo11tyData( - dirName, - category, - path.join(provider.siteTutorialsPath, 'tutorials.11tydata.js') - ); + await addTutorialTo11tyData(dirName, 'Learn', provider.site11tyDataPath); provider.refresh(); @@ -223,14 +199,10 @@ export class Tutorial extends vscode.TreeItem { delete() { fs.rmSync(this.path, {recursive: true}); - fs.rmSync( - path.join(this.provider.siteTutorialsContentPath, this.dirName), - {recursive: true} - ); - removeTutorialFrom11tyData( - this.dirName, - path.join(this.provider.siteTutorialsPath, 'tutorials.11tydata.js') - ); + fs.rmSync(path.join(this.provider.siteTutorialsContentPath, this.dirName), { + recursive: true, + }); + removeTutorialFrom11tyData(this.dirName, this.provider.site11tyDataPath); this.provider.refresh(); } diff --git a/packages/lit-dev-tutorial-plugin/src/tree-provider.ts b/packages/lit-dev-tutorial-plugin/src/tree-provider.ts index 430d5c3df..7e152bfff 100644 --- a/packages/lit-dev-tutorial-plugin/src/tree-provider.ts +++ b/packages/lit-dev-tutorial-plugin/src/tree-provider.ts @@ -47,6 +47,10 @@ export class LitDevTutorialTreeProvider return path.join(this.contentPath, 'site', 'tutorials'); } + get site11tyDataPath() { + return path.join(this.contentPath, 'site', '_data', 'tutorials.js'); + } + get siteTutorialsContentPath() { return path.join(this.contentPath, 'site', 'tutorials', 'content'); } @@ -224,10 +228,7 @@ export class LitDevTutorialTreeProvider dir.name !== 'tsconfig.json' ); - const tutorialDataFilePath = path.join( - this.siteTutorialsPath, - 'tutorials.11tydata.js' - ); + const tutorialDataFilePath = this.site11tyDataPath; const tutorials: Tutorial[] = []; diff --git a/packages/lit-dev-tutorial-plugin/src/types.ts b/packages/lit-dev-tutorial-plugin/src/types.ts index 593bb508e..572a89a99 100644 --- a/packages/lit-dev-tutorial-plugin/src/types.ts +++ b/packages/lit-dev-tutorial-plugin/src/types.ts @@ -18,10 +18,9 @@ export interface TutorialJsonStep { export interface TutorialJson { header: string; difficulty: TutorialDifficulty; - size: TutorialCardSize; duration: number; - category: TutorialCategory; imgSrc?: string; imgAlt?: string; steps: TutorialJsonStep[]; + date: string; } From ab298c17ed005d6229f984ad315b1dc91401240f Mon Sep 17 00:00:00 2001 From: Elliott Marquez <5981958+e111077@users.noreply.github.com> Date: Mon, 18 Mar 2024 17:14:14 -0700 Subject: [PATCH 10/10] format --- .prettierignore | 3 + .../.vscode/launch.json | 50 ++++---- .../.vscode/settings.json | 18 +-- .../.vscode/tasks.json | 32 ++--- .../lit-dev-tutorial-plugin/src/extension.ts | 111 +++++++++++------- .../src/test/runTest.ts | 28 ++--- .../src/test/suite/extension.test.ts | 5 +- .../lit-dev-tutorial-plugin/src/test/util.ts | 4 +- .../src/tree-items/generic-file.ts | 4 +- .../src/tree-items/playground-file.ts | 4 +- .../src/tree-items/tutorial-step.ts | 17 +-- .../src/tree-items/tutorial.ts | 4 +- .../src/tree-provider.ts | 57 +++++---- .../lit-dev-tutorial-plugin/tsconfig.json | 30 +++-- 14 files changed, 202 insertions(+), 165 deletions(-) diff --git a/.prettierignore b/.prettierignore index 41c915fed..e260f6508 100644 --- a/.prettierignore +++ b/.prettierignore @@ -8,6 +8,9 @@ package-lock.json /packages/lit-dev-content/_dev/ /packages/lit-dev-content/_site/ /packages/lit-dev-content/rollupout/ +/packages/lit-dev-tutorial-plugin/.vscode-test/ +/packages/lit-dev-tutorial-plugin/.test-bin/ +/packages/lit-dev-tutorial-plugin/out/ # TODO(aomarks) Would be nice to format samples, but Prettier doesn't always do # a great job compared to our manual formatting. /packages/lit-dev-content/samples/ diff --git a/packages/lit-dev-tutorial-plugin/.vscode/launch.json b/packages/lit-dev-tutorial-plugin/.vscode/launch.json index 670d6e66c..1210201da 100644 --- a/packages/lit-dev-tutorial-plugin/.vscode/launch.json +++ b/packages/lit-dev-tutorial-plugin/.vscode/launch.json @@ -3,32 +3,26 @@ // Hover to view descriptions of existing attributes. // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 { - "version": "0.2.0", - "configurations": [ - { - "name": "Run Extension", - "type": "extensionHost", - "request": "launch", - "args": [ - "--extensionDevelopmentPath=${workspaceFolder}" - ], - "outFiles": [ - "${workspaceFolder}/out/**/*.js" - ], - "preLaunchTask": "${defaultBuildTask}" - }, - { - "name": "Extension Tests", - "type": "extensionHost", - "request": "launch", - "args": [ - "--extensionDevelopmentPath=${workspaceFolder}", - "--extensionTestsPath=${workspaceFolder}/out/test/suite/index" - ], - "outFiles": [ - "${workspaceFolder}/out/test/**/*.js" - ], - "preLaunchTask": "${defaultBuildTask}" - } - ] + "version": "0.2.0", + "configurations": [ + { + "name": "Run Extension", + "type": "extensionHost", + "request": "launch", + "args": ["--extensionDevelopmentPath=${workspaceFolder}"], + "outFiles": ["${workspaceFolder}/out/**/*.js"], + "preLaunchTask": "${defaultBuildTask}" + }, + { + "name": "Extension Tests", + "type": "extensionHost", + "request": "launch", + "args": [ + "--extensionDevelopmentPath=${workspaceFolder}", + "--extensionTestsPath=${workspaceFolder}/out/test/suite/index" + ], + "outFiles": ["${workspaceFolder}/out/test/**/*.js"], + "preLaunchTask": "${defaultBuildTask}" + } + ] } diff --git a/packages/lit-dev-tutorial-plugin/.vscode/settings.json b/packages/lit-dev-tutorial-plugin/.vscode/settings.json index 30bf8c2d3..ffeaf91cb 100644 --- a/packages/lit-dev-tutorial-plugin/.vscode/settings.json +++ b/packages/lit-dev-tutorial-plugin/.vscode/settings.json @@ -1,11 +1,11 @@ // Place your settings in this file to overwrite default and user settings. { - "files.exclude": { - "out": false // set this to true to hide the "out" folder with the compiled JS files - }, - "search.exclude": { - "out": true // set this to false to include "out" folder in search results - }, - // Turn off tsc task auto detection since we have the necessary tasks as npm scripts - "typescript.tsc.autoDetect": "off" -} \ No newline at end of file + "files.exclude": { + "out": false // set this to true to hide the "out" folder with the compiled JS files + }, + "search.exclude": { + "out": true // set this to false to include "out" folder in search results + }, + // Turn off tsc task auto detection since we have the necessary tasks as npm scripts + "typescript.tsc.autoDetect": "off" +} diff --git a/packages/lit-dev-tutorial-plugin/.vscode/tasks.json b/packages/lit-dev-tutorial-plugin/.vscode/tasks.json index 3b17e53b6..078ff7e01 100644 --- a/packages/lit-dev-tutorial-plugin/.vscode/tasks.json +++ b/packages/lit-dev-tutorial-plugin/.vscode/tasks.json @@ -1,20 +1,20 @@ // See https://go.microsoft.com/fwlink/?LinkId=733558 // for the documentation about the tasks.json format { - "version": "2.0.0", - "tasks": [ - { - "type": "npm", - "script": "watch", - "problemMatcher": "$tsc-watch", - "isBackground": true, - "presentation": { - "reveal": "never" - }, - "group": { - "kind": "build", - "isDefault": true - } - } - ] + "version": "2.0.0", + "tasks": [ + { + "type": "npm", + "script": "watch", + "problemMatcher": "$tsc-watch", + "isBackground": true, + "presentation": { + "reveal": "never" + }, + "group": { + "kind": "build", + "isDefault": true + } + } + ] } diff --git a/packages/lit-dev-tutorial-plugin/src/extension.ts b/packages/lit-dev-tutorial-plugin/src/extension.ts index 55b8ba098..82b293b21 100644 --- a/packages/lit-dev-tutorial-plugin/src/extension.ts +++ b/packages/lit-dev-tutorial-plugin/src/extension.ts @@ -5,18 +5,19 @@ */ import * as vscode from 'vscode'; -import { BeforeAfterDir } from './tree-items/before-after-dir.js'; -import { GenericFile } from './tree-items/generic-file.js'; -import { PlaygroundFile } from './tree-items/playground-file.js'; -import { TutorialStep } from './tree-items/tutorial-step.js'; -import { Tutorial } from './tree-items/tutorial.js'; +import {BeforeAfterDir} from './tree-items/before-after-dir.js'; +import {GenericFile} from './tree-items/generic-file.js'; +import {PlaygroundFile} from './tree-items/playground-file.js'; +import {TutorialStep} from './tree-items/tutorial-step.js'; +import {Tutorial} from './tree-items/tutorial.js'; import {LitDevTutorialTreeProvider, TutorialTreeItem} from './tree-provider.js'; export async function activate() { const rootPath = - vscode.workspace.workspaceFolders && vscode.workspace.workspaceFolders.length > 0 - ? vscode.workspace.workspaceFolders[0].uri.fsPath - : undefined; + vscode.workspace.workspaceFolders && + vscode.workspace.workspaceFolders.length > 0 + ? vscode.workspace.workspaceFolders[0].uri.fsPath + : undefined; if (!rootPath) { return; @@ -36,38 +37,68 @@ export async function activate() { vscode.commands.registerCommand('litDevTutorial.createTutorial', () => { provider.createTutorial(); }); - vscode.commands.registerCommand('litDevTutorial.addStep', (tutorial: Tutorial) => { - TutorialStep.create(tutorial); - }); - vscode.commands.registerCommand('litDevTutorial.moveStepUp', (step: TutorialStep) => { - step.moveUp(); - }); - vscode.commands.registerCommand('litDevTutorial.moveStepDown', (step: TutorialStep) => { - step.moveDown(); - }); - vscode.commands.registerCommand('litDevTutorial.addAfterStep', (step: TutorialStep) => { - BeforeAfterDir.create(step, 'after'); - }); - vscode.commands.registerCommand('litDevTutorial.delete', (item: TutorialTreeItem) => { - item.delete(); - }); - vscode.commands.registerCommand('litDevTutorial.makeSolvable', (item: TutorialStep) => { - item.solvable = true; - item.provider.refresh(); - }); - vscode.commands.registerCommand('litDevTutorial.makeUnsolvable', (item: TutorialStep) => { - item.solvable = false; - item.provider.refresh(); - }); - vscode.commands.registerCommand('litDevTutorial.createPlaygroundFile', (dir: BeforeAfterDir) => { - PlaygroundFile.create(dir); - }); - vscode.commands.registerCommand('litDevTutorial.revealInSidebar', (item: GenericFile | PlaygroundFile) => { - item.revealInSidebar(); - }); - vscode.commands.registerCommand('litDevTutorial.renameStep', (item: TutorialStep) => { - item.rename(); - }); + vscode.commands.registerCommand( + 'litDevTutorial.addStep', + (tutorial: Tutorial) => { + TutorialStep.create(tutorial); + } + ); + vscode.commands.registerCommand( + 'litDevTutorial.moveStepUp', + (step: TutorialStep) => { + step.moveUp(); + } + ); + vscode.commands.registerCommand( + 'litDevTutorial.moveStepDown', + (step: TutorialStep) => { + step.moveDown(); + } + ); + vscode.commands.registerCommand( + 'litDevTutorial.addAfterStep', + (step: TutorialStep) => { + BeforeAfterDir.create(step, 'after'); + } + ); + vscode.commands.registerCommand( + 'litDevTutorial.delete', + (item: TutorialTreeItem) => { + item.delete(); + } + ); + vscode.commands.registerCommand( + 'litDevTutorial.makeSolvable', + (item: TutorialStep) => { + item.solvable = true; + item.provider.refresh(); + } + ); + vscode.commands.registerCommand( + 'litDevTutorial.makeUnsolvable', + (item: TutorialStep) => { + item.solvable = false; + item.provider.refresh(); + } + ); + vscode.commands.registerCommand( + 'litDevTutorial.createPlaygroundFile', + (dir: BeforeAfterDir) => { + PlaygroundFile.create(dir); + } + ); + vscode.commands.registerCommand( + 'litDevTutorial.revealInSidebar', + (item: GenericFile | PlaygroundFile) => { + item.revealInSidebar(); + } + ); + vscode.commands.registerCommand( + 'litDevTutorial.renameStep', + (item: TutorialStep) => { + item.rename(); + } + ); } // this method is called when your extension is deactivated diff --git a/packages/lit-dev-tutorial-plugin/src/test/runTest.ts b/packages/lit-dev-tutorial-plugin/src/test/runTest.ts index 72d334a3e..d3bb4d710 100644 --- a/packages/lit-dev-tutorial-plugin/src/test/runTest.ts +++ b/packages/lit-dev-tutorial-plugin/src/test/runTest.ts @@ -6,24 +6,24 @@ import * as path from 'path'; -import { runTests } from '@vscode/test-electron'; +import {runTests} from '@vscode/test-electron'; async function main() { - try { - // The folder containing the Extension Manifest package.json - // Passed to `--extensionDevelopmentPath` - const extensionDevelopmentPath = path.resolve(__dirname, '../../'); + try { + // The folder containing the Extension Manifest package.json + // Passed to `--extensionDevelopmentPath` + const extensionDevelopmentPath = path.resolve(__dirname, '../../'); - // The path to test runner - // Passed to --extensionTestsPath - const extensionTestsPath = path.resolve(__dirname, './suite/index'); + // The path to test runner + // Passed to --extensionTestsPath + const extensionTestsPath = path.resolve(__dirname, './suite/index'); - // Download VS Code, unzip it and run the integration test - await runTests({ extensionDevelopmentPath, extensionTestsPath }); - } catch (err) { - console.error('Failed to run tests'); - process.exit(1); - } + // Download VS Code, unzip it and run the integration test + await runTests({extensionDevelopmentPath, extensionTestsPath}); + } catch (err) { + console.error('Failed to run tests'); + process.exit(1); + } } main(); diff --git a/packages/lit-dev-tutorial-plugin/src/test/suite/extension.test.ts b/packages/lit-dev-tutorial-plugin/src/test/suite/extension.test.ts index 217eef725..bbe9b6043 100644 --- a/packages/lit-dev-tutorial-plugin/src/test/suite/extension.test.ts +++ b/packages/lit-dev-tutorial-plugin/src/test/suite/extension.test.ts @@ -30,7 +30,10 @@ suite('Tutorial Extension', () => { suite('startup', () => { test('recognizes lit.dev repo', async () => { - await vscode.commands.executeCommand('vscode.openFolder', vscode.Uri.file(litDevPath)); + await vscode.commands.executeCommand( + 'vscode.openFolder', + vscode.Uri.file(litDevPath) + ); console.log('opened!'); }); }); diff --git a/packages/lit-dev-tutorial-plugin/src/test/util.ts b/packages/lit-dev-tutorial-plugin/src/test/util.ts index 40c2c9232..ed1614cfd 100644 --- a/packages/lit-dev-tutorial-plugin/src/test/util.ts +++ b/packages/lit-dev-tutorial-plugin/src/test/util.ts @@ -198,7 +198,9 @@ export const prepopulateTutorial = async ( for (let i = options.tutorials.length - 1; i >= 0; i--) { const tutorial = options.tutorials[i]; - const tutorialSection = (tutorial as typeof tutorial & {category ?: 'Learn'|'Build'}).category ?? 'Learn'; + const tutorialSection = + (tutorial as typeof tutorial & {category?: 'Learn' | 'Build'}).category ?? + 'Learn'; const tutorialIndex = dataFileLines.findIndex((line) => line.includes(`// ${tutorialSection}`) ); diff --git a/packages/lit-dev-tutorial-plugin/src/tree-items/generic-file.ts b/packages/lit-dev-tutorial-plugin/src/tree-items/generic-file.ts index ea70ae277..354af39e7 100644 --- a/packages/lit-dev-tutorial-plugin/src/tree-items/generic-file.ts +++ b/packages/lit-dev-tutorial-plugin/src/tree-items/generic-file.ts @@ -72,6 +72,8 @@ export class GenericFile extends vscode.TreeItem { revealInSidebar() { vscode.commands.executeCommand('vscode.open', vscode.Uri.file(this.path)); - vscode.commands.executeCommand('workbench.files.action.showActiveFileInExplorer'); + vscode.commands.executeCommand( + 'workbench.files.action.showActiveFileInExplorer' + ); } } diff --git a/packages/lit-dev-tutorial-plugin/src/tree-items/playground-file.ts b/packages/lit-dev-tutorial-plugin/src/tree-items/playground-file.ts index 67529981c..49a200d67 100644 --- a/packages/lit-dev-tutorial-plugin/src/tree-items/playground-file.ts +++ b/packages/lit-dev-tutorial-plugin/src/tree-items/playground-file.ts @@ -127,6 +127,8 @@ export class PlaygroundFile extends vscode.TreeItem { revealInSidebar() { vscode.commands.executeCommand('vscode.open', vscode.Uri.file(this.path)); - vscode.commands.executeCommand('workbench.files.action.showActiveFileInExplorer'); + vscode.commands.executeCommand( + 'workbench.files.action.showActiveFileInExplorer' + ); } } diff --git a/packages/lit-dev-tutorial-plugin/src/tree-items/tutorial-step.ts b/packages/lit-dev-tutorial-plugin/src/tree-items/tutorial-step.ts index e59c521b1..50f912cac 100644 --- a/packages/lit-dev-tutorial-plugin/src/tree-items/tutorial-step.ts +++ b/packages/lit-dev-tutorial-plugin/src/tree-items/tutorial-step.ts @@ -18,7 +18,7 @@ export class TutorialStep extends vscode.TreeItem { private _hasAfter = false; checkable = false; beforeDir!: BeforeAfterDir; - afterDir: BeforeAfterDir|undefined = undefined; + afterDir: BeforeAfterDir | undefined = undefined; get dirName() { return `${this.step}`.padStart(2, '0'); @@ -68,10 +68,7 @@ export class TutorialStep extends vscode.TreeItem { this._hasAfter = value; - const tutorialJsonPath = path.join( - this.tutorial.path, - 'tutorial.json' - ); + const tutorialJsonPath = path.join(this.tutorial.path, 'tutorial.json'); let tutorialJson = getJson(tutorialJsonPath)!; if (value) { @@ -97,15 +94,11 @@ export class TutorialStep extends vscode.TreeItem { } this._solvable = solvable; - const tutorialJsonPath = path.join( - this.tutorial.path, - 'tutorial.json' - ); + const tutorialJsonPath = path.join(this.tutorial.path, 'tutorial.json'); let tutorialJson = getJson(tutorialJsonPath)!; if (solvable) { delete tutorialJson.steps[this.step].noSolve; - } else { this.hasAfter = false; tutorialJson = getJson(tutorialJsonPath)!; @@ -219,7 +212,7 @@ export class TutorialStep extends vscode.TreeItem { return; } - const isSolvableStr = await vscode.window.showQuickPick(['Yes', 'No'],{ + const isSolvableStr = await vscode.window.showQuickPick(['Yes', 'No'], { title: 'Should this step have a "solve" button?', }); @@ -231,7 +224,7 @@ export class TutorialStep extends vscode.TreeItem { let hasAfter = false; if (!hideSolve) { - const hasAfterStr = await vscode.window.showQuickPick(['Yes', 'No'],{ + const hasAfterStr = await vscode.window.showQuickPick(['Yes', 'No'], { title: 'Is "after" step the "before" of the next step?', }); diff --git a/packages/lit-dev-tutorial-plugin/src/tree-items/tutorial.ts b/packages/lit-dev-tutorial-plugin/src/tree-items/tutorial.ts index a4303adb5..c8292ee35 100644 --- a/packages/lit-dev-tutorial-plugin/src/tree-items/tutorial.ts +++ b/packages/lit-dev-tutorial-plugin/src/tree-items/tutorial.ts @@ -171,7 +171,9 @@ export class Tutorial extends vscode.TreeItem { } catch (_e) {} const dateObj = new Date(); - const date = `${dateObj.getFullYear()}-${dateObj.getMonth() + 1}-${dateObj.getDate()}`; + const date = `${dateObj.getFullYear()}-${ + dateObj.getMonth() + 1 + }-${dateObj.getDate()}`; const tutorialJson: TutorialJson = { header: name, diff --git a/packages/lit-dev-tutorial-plugin/src/tree-provider.ts b/packages/lit-dev-tutorial-plugin/src/tree-provider.ts index 7e152bfff..f20ab719b 100644 --- a/packages/lit-dev-tutorial-plugin/src/tree-provider.ts +++ b/packages/lit-dev-tutorial-plugin/src/tree-provider.ts @@ -13,7 +13,7 @@ import {TutorialStep} from './tree-items/tutorial-step'; import {getJson} from './fs-helpers'; import {BeforeAfterDir} from './tree-items/before-after-dir'; import {PlaygroundFile} from './tree-items/playground-file'; -import { TutorialJson } from './types'; +import {TutorialJson} from './types'; interface PackageJson { name?: string; @@ -140,15 +140,15 @@ export class LitDevTutorialTreeProvider file.isFile() ); - const tutorialJson = getJson(path.join(element.path, 'tutorial.json'))!; + const tutorialJson = getJson( + path.join(element.path, 'tutorial.json') + )!; const jsonSteps = tutorialJson.steps; - const steps = tutorialStepEntries.map( - (step, index) => { - const jsonStep = jsonSteps[index]; - return new TutorialStep(this, element, step.name, !jsonStep.noSolve) - } - ); + const steps = tutorialStepEntries.map((step, index) => { + const jsonStep = jsonSteps[index]; + return new TutorialStep(this, element, step.name, !jsonStep.noSolve); + }); const files = tutorialFileEntries.map( (file) => new GenericFile(this, path.join(tutorialPath, file.name)) ); @@ -158,23 +158,28 @@ export class LitDevTutorialTreeProvider private onTutorialStep(element: TutorialStep) { const tutorialPath = element.path; const tutorialEntries = fs.readdirSync(tutorialPath, {withFileTypes: true}); - const tutorialDirEntries = tutorialEntries.filter( - (file) => - (file.isDirectory() && file.name === 'before') || file.name === 'after' - ).reverse(); - - const beforeAfterDirs = tutorialDirEntries.map( - (entry) => { - const dir = new BeforeAfterDir(this, element, entry.name as 'before' | 'after') - if (entry.name === 'before') { - element.beforeDir = dir; - } else if (entry.name === 'after') { - element.afterDir = dir; - } - - return dir; + const tutorialDirEntries = tutorialEntries + .filter( + (file) => + (file.isDirectory() && file.name === 'before') || + file.name === 'after' + ) + .reverse(); + + const beforeAfterDirs = tutorialDirEntries.map((entry) => { + const dir = new BeforeAfterDir( + this, + element, + entry.name as 'before' | 'after' + ); + if (entry.name === 'before') { + element.beforeDir = dir; + } else if (entry.name === 'after') { + element.afterDir = dir; } - ); + + return dir; + }); const stepInstructionsMdFile = new GenericFile( this, @@ -206,7 +211,9 @@ export class LitDevTutorialTreeProvider }); const projectJsonFile = files.find((file) => file instanceof GenericFile)!; - const playgroundFiles = files.filter((file) => !(file instanceof GenericFile)); + const playgroundFiles = files.filter( + (file) => !(file instanceof GenericFile) + ); return [...playgroundFiles, projectJsonFile]; } diff --git a/packages/lit-dev-tutorial-plugin/tsconfig.json b/packages/lit-dev-tutorial-plugin/tsconfig.json index fe565bea9..fb305d5e8 100644 --- a/packages/lit-dev-tutorial-plugin/tsconfig.json +++ b/packages/lit-dev-tutorial-plugin/tsconfig.json @@ -1,18 +1,16 @@ { - "compilerOptions": { - "module": "commonjs", - "target": "ES2020", - "outDir": "out", - "lib": [ - "ES2020" - ], - "sourceMap": true, - "rootDir": "src", - "strict": true, /* enable all strict type-checking options */ - "skipLibCheck": true - /* Additional Checks */ - // "noImplicitReturns": true, /* Report error when not all code paths in function return a value. */ - // "noFallthroughCasesInSwitch": true, /* Report errors for fallthrough cases in switch statement. */ - // "noUnusedParameters": true, /* Report errors on unused parameters. */ - } + "compilerOptions": { + "module": "commonjs", + "target": "ES2020", + "outDir": "out", + "lib": ["ES2020"], + "sourceMap": true, + "rootDir": "src", + "strict": true /* enable all strict type-checking options */, + "skipLibCheck": true + /* Additional Checks */ + // "noImplicitReturns": true, /* Report error when not all code paths in function return a value. */ + // "noFallthroughCasesInSwitch": true, /* Report errors for fallthrough cases in switch statement. */ + // "noUnusedParameters": true, /* Report errors on unused parameters. */ + } }