diff --git a/.github/workflows/lighthouse.yml b/.github/workflows/lighthouse.yml
index dee53fa0..7cd07238 100644
--- a/.github/workflows/lighthouse.yml
+++ b/.github/workflows/lighthouse.yml
@@ -8,42 +8,21 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: Checkout the project
- uses: actions/checkout@v2
+ uses: actions/checkout@v3
- - name: Use Node.js 14.x (LTS)
- uses: actions/setup-node@v1
+ - name: Use Node.js 16.x (LTS)
+ uses: actions/setup-node@v3
with:
- node-version: 14.x
+ node-version: 16.x
+ cache: 'npm'
+ - run: npm ci
- - name: Use Ruby 2.7
- uses: actions/setup-ruby@v1
+ - name: Use Ruby 2.7.3
+ uses: ruby/setup-ruby@v1
with:
- ruby-version: '2.7'
-
- - name: Restore npm cache
- uses: actions/cache@v2
- with:
- path: ~/.npm
- key: ${{ runner.os }}-node-${{ hashFiles('**/package-lock.json') }}
- restore-keys: |
- ${{ runner.os }}-node-
-
- - name: Restore Bundler cache
- uses: actions/cache@v2
- with:
- path: docs/vendor/bundle
- key: ${{ runner.os }}-gems-${{ hashFiles('**/Gemfile.lock') }}
- restore-keys: |
- ${{ runner.os }}-gems-
-
- - name: Configure Bundler cache
- run: |
- bundle config path vendor/bundle
-
- - name: Install dependencies
- run: |
- npm ci
- cd docs && bundle install && cd ..
+ ruby-version: '2.7.3'
+ bundler-cache: true
+ working-directory: docs
- name: Build docs
run: npm run build:docs
@@ -51,7 +30,7 @@ jobs:
JEKYLL_GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- name: Run Lighthouse CI
- run: npx @lhci/cli@0.7.x autorun
+ run: npx @lhci/cli@0.9.x autorun
env:
JEKYLL_GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
LHCI_GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
diff --git a/.github/workflows/nodejs.yml b/.github/workflows/nodejs.yml
index e907b9f3..6d84019f 100644
--- a/.github/workflows/nodejs.yml
+++ b/.github/workflows/nodejs.yml
@@ -3,8 +3,6 @@ name: Build
on:
pull_request:
push:
- branches:
- - main
jobs:
test-node:
@@ -12,20 +10,13 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: Checkout the project
- uses: actions/checkout@v2
- - name: Cache node modules
- uses: actions/cache@v2
+ uses: actions/checkout@v3
+ - name: Use Node.js 16.x (LTS)
+ uses: actions/setup-node@v3
with:
- path: ~/.npm
- key: ${{ runner.os }}-node-${{ hashFiles('**/yarn.lock') }}
- restore-keys: |
- ${{ runner.os }}-node-
- - name: Use Node.js 13.11.0
- uses: actions/setup-node@v1
- with:
- node-version: 13.11.0
- - name: Install dependencies
- run: npm i
+ node-version: 16.x
+ cache: 'npm'
+ - run: npm ci
- name: Lint Codebase
run: npm run lint
- name: Run Node.js Tests
diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml
index c3434a69..264bdd37 100644
--- a/.github/workflows/publish.yml
+++ b/.github/workflows/publish.yml
@@ -8,10 +8,12 @@ jobs:
publish-npm:
runs-on: ubuntu-latest
steps:
- - uses: actions/checkout@v3
- - uses: actions/setup-node@v3
+ - name: Checkout the project
+ uses: actions/checkout@v3
+ - name: Use Node.js 16.x (LTS)
+ uses: actions/setup-node@v3
with:
- node-version: 14
+ node-version: 16.x
registry-url: https://registry.npmjs.org/
cache: npm
- run: npm ci
diff --git a/.gitignore b/.gitignore
index 9d37538e..732d3771 100644
--- a/.gitignore
+++ b/.gitignore
@@ -4,3 +4,4 @@ _site
lib/
.jekyll-cache
.lighthouseci
+coverage
diff --git a/docs/Gemfile b/docs/Gemfile
index 8487316a..433346ac 100644
--- a/docs/Gemfile
+++ b/docs/Gemfile
@@ -2,10 +2,10 @@
source 'https://rubygems.org'
-gem 'jekyll', '~> 4.1.1'
+gem 'jekyll'
group :jekyll_plugins do
- gem 'jekyll-commonmark-ghpages', '~> 0.1.5'
+ gem 'jekyll-commonmark-ghpages'
gem 'jekyll-github-metadata'
gem 'jekyll-gzip'
end
diff --git a/docs/Gemfile.lock b/docs/Gemfile.lock
index cae5367f..3b3e7f35 100644
--- a/docs/Gemfile.lock
+++ b/docs/Gemfile.lock
@@ -4,92 +4,107 @@ GEM
addressable (2.8.0)
public_suffix (>= 2.0.2, < 5.0)
colorator (1.1.0)
- commonmarker (0.17.13)
- ruby-enum (~> 0.5)
- concurrent-ruby (1.1.7)
- em-websocket (0.5.2)
+ commonmarker (0.23.4)
+ concurrent-ruby (1.1.10)
+ em-websocket (0.5.3)
eventmachine (>= 0.12.9)
- http_parser.rb (~> 0.6.0)
+ http_parser.rb (~> 0)
eventmachine (1.2.7)
- faraday (1.0.0)
+ faraday (1.10.0)
+ faraday-em_http (~> 1.0)
+ faraday-em_synchrony (~> 1.0)
+ faraday-excon (~> 1.1)
+ faraday-httpclient (~> 1.0)
+ faraday-multipart (~> 1.0)
+ faraday-net_http (~> 1.0)
+ faraday-net_http_persistent (~> 1.0)
+ faraday-patron (~> 1.0)
+ faraday-rack (~> 1.0)
+ faraday-retry (~> 1.0)
+ ruby2_keywords (>= 0.0.4)
+ faraday-em_http (1.0.0)
+ faraday-em_synchrony (1.0.0)
+ faraday-excon (1.1.0)
+ faraday-httpclient (1.0.1)
+ faraday-multipart (1.0.3)
multipart-post (>= 1.2, < 3)
- ffi (1.13.1)
+ faraday-net_http (1.0.1)
+ faraday-net_http_persistent (1.2.0)
+ faraday-patron (1.0.0)
+ faraday-rack (1.0.0)
+ faraday-retry (1.0.3)
+ ffi (1.15.5)
forwardable-extended (2.6.0)
- http_parser.rb (0.6.0)
- i18n (1.8.5)
+ http_parser.rb (0.8.0)
+ i18n (0.9.5)
concurrent-ruby (~> 1.0)
- jekyll (4.1.1)
+ jekyll (3.9.2)
addressable (~> 2.4)
colorator (~> 1.0)
em-websocket (~> 0.5)
- i18n (~> 1.0)
- jekyll-sass-converter (~> 2.0)
+ i18n (~> 0.7)
+ jekyll-sass-converter (~> 1.0)
jekyll-watch (~> 2.0)
- kramdown (~> 2.1)
- kramdown-parser-gfm (~> 1.0)
+ kramdown (>= 1.17, < 3)
liquid (~> 4.0)
- mercenary (~> 0.4.0)
+ mercenary (~> 0.3.3)
pathutil (~> 0.9)
- rouge (~> 3.0)
+ rouge (>= 1.7, < 4)
safe_yaml (~> 1.0)
- terminal-table (~> 1.8)
- jekyll-commonmark (1.3.1)
- commonmarker (~> 0.14)
- jekyll (>= 3.7, < 5.0)
- jekyll-commonmark-ghpages (0.1.6)
- commonmarker (~> 0.17.6)
- jekyll-commonmark (~> 1.2)
+ jekyll-commonmark (1.4.0)
+ commonmarker (~> 0.22)
+ jekyll-commonmark-ghpages (0.2.0)
+ commonmarker (~> 0.23.4)
+ jekyll (~> 3.9.0)
+ jekyll-commonmark (~> 1.4.0)
rouge (>= 2.0, < 4.0)
- jekyll-github-metadata (2.13.0)
+ jekyll-github-metadata (2.14.0)
jekyll (>= 3.4, < 5.0)
octokit (~> 4.0, != 4.4.0)
- jekyll-gzip (2.4.2)
+ jekyll-gzip (2.5.1)
jekyll (>= 3.0, < 5.0)
- jekyll-sass-converter (2.1.0)
- sassc (> 2.0.1, < 3.0)
+ jekyll-sass-converter (1.5.2)
+ sass (~> 3.4)
jekyll-watch (2.2.1)
listen (~> 3.0)
- kramdown (2.3.1)
+ kramdown (2.4.0)
rexml
- kramdown-parser-gfm (1.1.0)
- kramdown (~> 2.0)
liquid (4.0.3)
- listen (3.3.3)
+ listen (3.7.1)
rb-fsevent (~> 0.10, >= 0.10.3)
rb-inotify (~> 0.9, >= 0.9.10)
- mercenary (0.4.0)
+ mercenary (0.3.6)
multipart-post (2.1.1)
- octokit (4.16.0)
+ octokit (4.22.0)
faraday (>= 0.9)
sawyer (~> 0.8.0, >= 0.5.3)
pathutil (0.16.2)
forwardable-extended (~> 2.6)
- public_suffix (4.0.6)
- rb-fsevent (0.10.4)
+ public_suffix (4.0.7)
+ rb-fsevent (0.11.1)
rb-inotify (0.10.1)
ffi (~> 1.0)
rexml (3.2.5)
- rouge (3.25.0)
- ruby-enum (0.7.2)
- i18n
+ rouge (3.28.0)
+ ruby2_keywords (0.0.5)
safe_yaml (1.0.5)
- sassc (2.4.0)
- ffi (~> 1.9)
+ sass (3.7.4)
+ sass-listen (~> 4.0.0)
+ sass-listen (4.0.0)
+ rb-fsevent (~> 0.9, >= 0.9.4)
+ rb-inotify (~> 0.9, >= 0.9.7)
sawyer (0.8.2)
addressable (>= 2.3.5)
faraday (> 0.8, < 2.0)
- terminal-table (1.8.0)
- unicode-display_width (~> 1.1, >= 1.1.1)
- unicode-display_width (1.7.0)
PLATFORMS
- ruby
+ x86_64-linux
DEPENDENCIES
- jekyll (~> 4.1.1)
- jekyll-commonmark-ghpages (~> 0.1.5)
+ jekyll
+ jekyll-commonmark-ghpages
jekyll-github-metadata
jekyll-gzip
BUNDLED WITH
- 2.1.4
+ 2.3.13
diff --git a/docs/_config.yml b/docs/_config.yml
index 9a330ec2..6defd492 100644
--- a/docs/_config.yml
+++ b/docs/_config.yml
@@ -11,6 +11,7 @@ exclude:
- Gemfile
- Gemfile.lock
- node_modules
+ - vendor
collections:
guide:
diff --git a/docs/_guide/abilities.md b/docs/_guide/abilities.md
new file mode 100644
index 00000000..592751a8
--- /dev/null
+++ b/docs/_guide/abilities.md
@@ -0,0 +1,51 @@
+---
+chapter: 14
+subtitle: Abilities
+---
+
+Under the hood Catalyst's controller decorator is comprised of a handful of separate "abilities". An "ability" is essentially a mixin or perhaps "higher order class". An ability takes a class and returns an extended class that adds additional behaviours. By convention all abilities exported by Catalyst are suffixed with `able` which we think is a nice way to denote that something is an ability and should be used as such.
+
+### Using Abilities
+
+Abilities are fundementally just class decorators, and so can be used just like the `@controller` decorator. For example to add only the `actionable` decorator (which automatically binds events based on `data-action` attributes):
+
+```typescript
+import {actionable} from '@github/catalyst'
+
+@actionable
+class HelloWorld extends HTMLElement {
+}
+```
+
+### Using Marks
+
+Abilities also come with complementary field decorators which we call "marks" (we give them a distinctive name because they're a more restrictive subset of field decorators). Marks annotate fields which abilities can then extend with custom logic, both [Targets]({{ site.baseurl }}/guide/targets) and [Attrs]({{ site.baseurl }}/guide/attrs) are abilities that use marks. The `targetable` ability includes `target` & `targets` marks, and the `attrable` ability includes the `attr` mark. Marks decorate individual fields, like so:
+
+```typescript
+import {targetable, target, targets} from '@github/catalyst'
+
+@targetable
+class HelloWorldElement extends HTMLElement {
+ @target name
+ @targets people
+}
+```
+
+Marks _can_ decorate over fields, get/set functions, or class methods - but individual marks can set their own validation logic, for example enforcing a naming pattern or disallowing application on methods.
+
+### Built-In Abilities
+
+Catalyst ships with a set of built in abilities. The `@controller` decorator applies the following built-in abilities:
+
+- `controllable` - the base ability which other abilities require for functionality.
+- `targetable` - the ability to define `@target` and `@targets` properties. See [Targets]({{ site.baseurl }}/guide/targets) for more.
+- `actionable` - the ability to automatically bind events based on `data-action` attributes. See [Actions]({{ site.baseurl }}/guide/actions) for more.
+- `attrable` - the ability to define `@attr`s. See [Attrs]({{ site.baseurl }}/guide/attrs) for more.
+
+The `@controller` decorator also applies the `@register` decorator which automatically registers the element in the Custom Element registry, however this decorator isn't an "ability".
+
+The following abilities are shipped with Catalyst but require manually applying as they aren't considered critical functionality:
+
+ - `providable` - the ability to define `provider` and `consumer` properties. See [Providable]({{ site.baseurl }}/guide/providable) for more.
+
+In addition to the provided abilities, Catalyst provides all of the tooling to create your own custom abilities. Take a look at the [Create Ability]({{ site.baseurl }}/guide/create-ability) documentation for more!
diff --git a/docs/_guide/attrs.md b/docs/_guide/attrs.md
index 1947af2e..38273340 100644
--- a/docs/_guide/attrs.md
+++ b/docs/_guide/attrs.md
@@ -7,19 +7,70 @@ Components may sometimes manage state, or configuration. We encourage the use of
As Catalyst elements are really just Web Components, they have the `hasAttribute`, `getAttribute`, `setAttribute`, `toggleAttribute`, and `removeAttribute` set of methods available, as well as [`dataset`](https://developer.mozilla.org/en-US/docs/Web/API/HTMLOrForeignElement/dataset), but these can be a little tedious to use; requiring null checking code with each call.
-Catalyst includes the `@attr` decorator, which provides nice syntax sugar to simplify, standardise, and encourage use of attributes. `@attr` has the following benefits over the basic `*Attribute` methods:
+Catalyst includes the `@attr` decorator which provides nice syntax sugar to simplify, standardise, and encourage use of attributes. `@attr` has the following benefits over the basic `*Attribute` methods:
+
+ - It dasherizes a property name, making it safe for HTML serialization without conflicting with [built-in global attributes](https://developer.mozilla.org/en-US/docs/Web/HTML/Global_attributes). This works the same as the class name, so for example `@attr pathName` will be `path-name` in HTML, `@attr srcURL` will be `src-url` in HTML.
+ - An `@attr` property automatically casts based on the initial value - if the initial value is a `string`, `boolean`, or `number` - it will never be `null` or `undefined`. No more null checking!
+ - It is automatically synced with the HTML attribute. This means setting the class property will update the HTML attribute, and setting the HTML attribute will update the class property!
+ - Assigning a value in the class description will make that value the _default_ value so if the HTML attribute isn't set, or is set but later removed the _default_ value will apply.
+
+This behaves similarly to existing HTML elements where the class field is synced with the html attribute, for example the ` ` element's `type` field:
+
+```ts
+const input = document.createElement('input')
+console.assert(input.type === 'text') // default value
+console.assert(input.hasAttribute('type') === false) // no attribute to override
+input.setAttribute('type', 'number')
+console.assert(input.type === 'number') // overrides based on attribute
+input.removeAttribute('type')
+console.assert(input.type === 'text') // back to default value
+```
- - It maps whatever the property name is to `data-*`, [similar to how `dataset` does](https://developer.mozilla.org/en-US/docs/Web/API/HTMLOrForeignElement/dataset#name_conversion), but with more intuitive naming (e.g. `URL` maps to `data-url` not `data--u-r-l`).
- - An `@attr` property is limited to `string`, `boolean`, or `number`, it will never be `null` or `undefined` - instead it has an "empty" value. No more null checking!
- - The attribute name is automatically [observed, meaning `attributeChangedCallback` will fire when it changes](https://developer.mozilla.org/en-US/docs/Web/Web_Components/Using_custom_elements#using_the_lifecycle_callbacks).
- - Assigning a value in the class description will make that value the _default_ value, so when the element is connected that value is set (unless the element has the attribute defined already).
+{% capture callout %}
+An important part of `@attr`s is that they _must_ comprise of two words, so that they get a dash when serialised to HTML. This is intentional, to avoid conflicting with [built-in global attributes](https://developer.mozilla.org/en-US/docs/Web/HTML/Global_attributes). To see how JavaScript property names convert to HTML dasherized names, try typing the name of an `@attr` below:
+{% endcapture %}{% include callout.md %}
-To use the `@attr` decorator, attach it to a class field, and it will get/set the value of the matching `data-*` attribute.
+
+
+To use the `@attr` decorator, attach it to a class field, and it will get/set the value of the matching dasherized HTML attribute.
### Example
```js
@@ -27,51 +78,50 @@ import { controller, attr } from "@github/catalyst"
@controller
class HelloWorldElement extends HTMLElement {
- @attr foo = 'hello'
+ @attr fooBar = 'hello'
}
```
-This is the equivalent to:
+This is somewhat equivalent to:
```js
import { controller } from "@github/catalyst"
@controller
class HelloWorldElement extends HTMLElement {
- get foo(): string {
- return this.getAttribute('data-foo') || ''
+ get fooBar(): string {
+ return this.getAttribute('foo-bar') || ''
}
- set foo(value: string): void {
- return this.setAttribute('data-foo', value)
+ set fooBar(value: string): void {
+ return this.setAttribute('foo-bar', value)
}
connectedCallback() {
- if (!this.hasAttribute('data-foo')) this.foo = 'Hello'
+ if (!this.hasAttribute('foo-bar')) this.fooBar = 'Hello'
}
- static observedAttributes = ['data-foo']
}
```
### Attribute Types
-The _type_ of an attribute is automatically inferred based on the type it is first set to. This means once a value is set it cannot change type; if it is set a `string` it will never be anything but a `string`. An attribute can only be one of either a `string`, `number`, or `boolean`. The types have small differences in how they behave in the DOM.
+The _type_ of an attribute is automatically inferred based on the type it is first set to. This means once a value is initially set it cannot change type; if it is set a `string` it will never be anything but a `string`. An attribute can only be one of either a `string`, `number`, or `boolean`. The types have small differences in how they behave in the DOM.
Below is a handy reference for the small differences, this is all explained in more detail below that.
-| Type | "Empty" value | When `get` is called | When `set` is called |
-|:----------|:--------------|----------------------|:---------------------|
-| `string` | `''` | `getAttribute` | `setAttribute` |
-| `number` | `0` | `getAttribute` | `setAttribute` |
-| `boolean` | `false` | `hasAttribute` | `toggleAttribute` |
+| Type | When `get` is called | When `set` is called |
+|:----------|----------------------|:---------------------|
+| `string` | `getAttribute` | `setAttribute` |
+| `number` | `getAttribute` | `setAttribute` |
+| `boolean` | `hasAttribute` | `toggleAttribute` |
#### String Attributes
-If an attribute is first set to a `string`, then it can only ever be a `string` during the lifetime of an element. The property will return an empty string (`''`) if the attribute doesn't exist, and trying to set it to something that isn't a string will turn it into one before assignment.
+If an attribute is first set to a `string`, then it can only ever be a `string` during the lifetime of an element. The property will revert to the initial value if the attribute doesn't exist, and trying to set it to something that isn't a string will turn it into one before assignment.
```js
@@ -79,14 +129,17 @@ import { controller, attr } from "@github/catalyst"
@controller
class HelloWorldElement extends HTMLElement {
- @attr foo = 'Hello'
+ @attr fooBar = 'Hello'
connectedCallback() {
- console.assert(this.foo === 'Hello')
- this.foo = null // TypeScript won't like this!
- console.assert(this.foo === 'null')
- delete this.dataset.foo // Removes the attribute
- console.assert(this.foo === '') // If the attribute doesn't exist, its an empty string!
+ console.assert(this.fooBar === 'Hello')
+ this.fooBar = 'Goodbye'
+ console.assert(this.fooBar === 'Goodbye'')
+ console.assert(this.getAttribute('foo-bar') === 'Goodbye')
+
+ this.removeAttribute('foo-bar')
+ // If the attribute doesn't exist, it'll output the initial value!
+ console.assert(this.fooBar === 'Hello')
}
}
```
@@ -104,24 +157,24 @@ import { controller, attr } from "@github/catalyst"
@controller
class HelloWorldElement extends HTMLElement {
- @attr foo = false
+ @attr fooBar = false
connectedCallback() {
- console.assert(this.hasAttribute('data-foo') === false)
- this.foo = true
- console.assert(this.hasAttribute('data-foo') === true)
- this.setAttribute('data-foo', 'this value doesnt matter!')
- console.assert(this.foo === true)
+ console.assert(this.hasAttribute('foo-bar') === false)
+ this.fooBar = true
+ console.assert(this.hasAttribute('foo-bar') === true)
+ this.setAttribute('foo-bar', 'this value doesnt matter!')
+ console.assert(this.fooBar === true)
}
}
```
#### Number Attributes
-If an attribute is first set to a number, then it can only ever be a number during the lifetime of an element. This is sort of like the [`maxlength` attribute on inputs](https://developer.mozilla.org/en-US/docs/Web/HTML/Attributes/maxlength). The property will return `0` if the attribute doesn't exist, and will be coerced to `Number` if it does - this means it is _possible_ to get back `NaN`. Negative numbers and floats are also valid.
+If an attribute is first set to a number, then it can only ever be a number during the lifetime of an element. This is sort of like the [`maxlength` attribute on inputs](https://developer.mozilla.org/en-US/docs/Web/HTML/Attributes/maxlength). The property will return the initial value if the attribute doesn't exist, and will be coerced to `Number` if it does - this means it is _possible_ to get back `NaN`. Negative numbers and floats are also valid.
```js
@@ -129,14 +182,15 @@ import { controller, attr } from "@github/catalyst"
@controller
class HelloWorldElement extends HTMLElement {
- @attr foo = 1
+ @attr fooBar = 1
connectedCallback() {
- console.assert(this.getAttribute('data-foo') === '1')
- this.setAttribute('data-foo', 'not a number')
- console.assert(Number.isNaN(this.foo))
- this.foo = -3.14
- console.assert(this.getAttribute('data-foo') === '-3.14')
+ this.fooBar = 2
+ console.assert(this.getAttribute('foo-bar') === '2')
+ this.setAttribute('foo-bar', 'not a number')
+ console.assert(Number.isNaN(this.fooBar))
+ this.fooBar = -3.14
+ console.assert(this.getAttribute('foo-bar') === '-3.14')
}
}
```
@@ -146,7 +200,7 @@ class HelloWorldElement extends HTMLElement {
When an element gets connected to the DOM, the attr is initialized. During this phase Catalyst will determine if the default value should be applied. The default value is defined in the class property. The basic rules are as such:
- If the class property has a value, that is the _default_
- - When connected, if the element _does not_ have a matching attribute, the default _is_ applied.
+ - When connected, if the element _does not_ have a matching attribute, the _default is_ applied.
- When connected, if the element _does_ have a matching attribute, the default _is not_ applied, the property will be assigned to the value of the attribute instead.
{% capture callout %}
@@ -163,9 +217,9 @@ attr name: Maps to get/setAttribute('data-name')
import { controller, attr } from "@github/catalyst"
@controller
class HelloWorldElement extends HTMLElement {
- @attr name = 'World'
+ @attr dataName = 'World'
connectedCallback() {
- this.textContent = `Hello ${this.name}`
+ this.textContent = `Hello ${this.dataName}`
}
}
```
@@ -185,24 +239,45 @@ data-name ".*": Will set the value of `name`
// This will render `Hello `
```
-### What about without Decorators?
+### Advanced usage
-If you're not using decorators, then you won't be able to use the `@attr` decorator, but there is still a way to achieve the same result. Under the hood `@attr` simply tags a field, but `initializeAttrs` and `defineObservedAttributes` do all of the logic.
+#### Determining when an @attr changes value
-Calling `initializeAttrs` in your connected callback, with the list of properties you'd like to initialize, and calling `defineObservedAttributes` with the class, can achieve the same result as `@attr`. The class fields can still be defined in your class, and they'll be overridden as described above. For example:
-
-```js
-import {initializeAttrs, defineObservedAttributes} from '@github/catalyst'
+To be notified when an `@attr` changes value, you can use the decorator over
+"setter" method instead, and the method will be called with the new value
+whenever it is re-assigned, either through HTML or JavaScript:
+```typescript
+import { controller, attr } from "@github/catalyst"
+@controller
class HelloWorldElement extends HTMLElement {
- foo = 1
- connectedCallback() {
- initializeAttrs(this, ['foo'])
+ @attr get dataName() {
+ return 'World' // Used to get the intial value
}
+ // Called whenever `name` changes
+ @attr set dataName(newValue: string) {
+ this.textContent = `Hello ${newValue}`
+ }
+}
+```
+
+### What about without Decorators?
+
+If you're not using decorators, then the `@attr` decorator has an escape hatch: You can define a static class field using the `[attr.static]` computed property, as an array of key names. Like so:
+
+```js
+import {controller, attr} from '@github/catalyst'
+
+controller(
+class HelloWorldElement extends HTMLElement {
+ // Same as @attr fooBar
+ [attr.static] = ['fooBar']
+ // Field can still be defined
+ fooBar = 1
}
-defineObservedAttributes(HelloWorldElement, ['foo'])
+)
```
This example is functionally identical to:
@@ -212,6 +287,6 @@ import {controller, attr} from '@github/catalyst'
@controller
class HelloWorldElement extends HTMLElement {
- @attr foo = 1
+ @attr fooBar = 1
}
```
diff --git a/docs/_guide/conventions.md b/docs/_guide/conventions.md
index 4d9d01fd..e38472af 100644
--- a/docs/_guide/conventions.md
+++ b/docs/_guide/conventions.md
@@ -5,13 +5,18 @@ subtitle: Conventions
Catalyst strives for convention over code. Here are a few conventions we recommend when writing Catalyst code:
-### Use `Element` to suffix your controller class
+### Suffix your controllers consistently, for symmetry
-Built in HTML elements all extend from the `HTMLElement` constructor, and are all suffixed with `Element` (for example `HTMLElement`, `SVGElement`, `HTMLInputElement` and so on). Catalyst components should be no different, they should behave as closely to the built-ins as possible.
+Catalyst components can be suffixed with `Element`, `Component` or `Controller`. We think elements should behave as closely to the built-ins as possible, so we like to use `Element` (existing elements do this, for example `HTMLDivElement`, `SVGElement`). If you're using a server side comoponent framework such as [ViewComponent](https://viewcomponent.org/), it's probably better to suffix `Component` for symmetry with that framework.
```typescript
@controller
-class UserListElement extends HTMLElement {}
+class UserListElement extends HTMLElement {} // ` `
+```
+
+```typescript
+@controller
+class UserListComponent extends HTMLElement {} // ` `
```
### The best class-names are two word descriptions
diff --git a/docs/_guide/create-ability.md b/docs/_guide/create-ability.md
new file mode 100644
index 00000000..7e0e93f5
--- /dev/null
+++ b/docs/_guide/create-ability.md
@@ -0,0 +1,228 @@
+---
+chapter: 16
+subtitle: Create your own abilities
+---
+
+Catalyst provides the functionality to create your own abilities, with a few helper methods and a `controllable` base-level ability. These are explained in detail below, but for a quick summary they are:
+
+ - `createAbility` - a helper function to make new abilities (class decorators).
+ - `createMark` - a helper function to generate class field & method decorators.
+ - `tag-observer` - a set of helper functions to watch for tagged children in an element's subtree.
+ - `controllable` - the base ability which allows interacting with semi-private parts of an element.
+
+## createAbility
+
+This function allows you to make your own [Ability]({{ site.baseurl }}/guide/abilities). Abilities are really Class Decorators, but there's a couple of things that `createAbility` provides to simplify the ergonomics of Class Decorators:
+
+ - TypeScript can be a little tricky when working with Class Decorators. `createAbility` simplifies this a bit.
+ - JavaScript does not copy over the `name` property when extending a class (e.g. via a decorator), and it can be a little cumbersome to do this, so `createAbility` does this for you.
+ - Abilities are [idempotent](https://en.wikipedia.org/wiki/Idempotence). Class decorators are not idempotent by default, which means applying a decorator multiple times can cause issues. `createAbility` mitigates this by memoizing the classes it has applied to, meaning applying an ability multiple times has no effect past the first application.
+
+The above three features of `createAbility` make it really useful when creating mixins for web components, and makes them much easier for developers as they can trust an ability to not be sensitive to these problems.
+
+To create an ability, call the `createAbility` method and pass in a callback function which takes a `CustomElementClass` and returns a new class. You can also provide extra types if your returned class adds new methods or fields. Here's an example, using TypeScript:
+
+
+```typescript
+import type {CustomElementClass} from '@github/catalyst'
+import {createAbility} from '@github/catalyst'
+
+// by convention, abilities end in "able"
+interface Fooable {
+ foo(): void // This interface has additional methods on top of `CustomElementClass`!
+}
+
+// Fooable: automatically calls `foo()` on `connectedCallback`
+export const fooable = createAbility(
+ // ↓ Notice the `& { new (): Fooable }`
+ (Class: T): T & { new (): Fooable } =>
+ class extends Class {
+ connectedCallback() {
+ this.foo()
+ }
+
+ foo() {
+ console.log('Foo was called!')
+ }
+ }
+)
+```
+
+Inside the `class extends Class` block, you can author custom element logic that you might want to make reusable across a multitude of elements. You can also adjust the input type to subclass `CustomElementClass`, which can be useful for setting up a contract between your Ability and the classes that rely on it:
+
+```typescript
+import type {CustomElementClass} from '@github/catalyst'
+import {createAbility} from '@github/catalyst'
+
+// by convention, abilities end in "able"
+interface Fooable {
+ foo(): void // This interface has additional methods on top of `CustomElementClass`!
+}
+
+interface FooableClass {
+ new(...args: any[]): Fooable
+}
+
+// Fooable: automatically calls `foo()` on `connectedCallback`
+export const fooable = createAbility(
+ // ↓ Notice the `& FooableClass`
+ (Class: T): T =>
+ class extends Class {
+ // TypeScript will expect the constructor to be defined for a mixin
+ constructor(...args: any[]) {
+ super(...args)
+ }
+
+ connectedCallback() {
+ // Classes that apply this ability _must_ implement `foo()`.
+ super.foo()
+ }
+ }
+```
+
+If you're interested in some advanced examples, you can take a look at the Catalyst source code - every feature of Catalyst is an Ability!
+
+## createMark
+
+This function allows you to make annotations for fields (like `@attr` and `@target`). Marks are really Field/Method Decorators, but with simpler ergonomics:
+
+ - Marks are only initialized on instances, which makes them easier to reason about.
+ - Marks are not configurable, which keeps them simple.
+ - They are built to ease a transition between TypeScript decorators and ECMAScript decorators, which will help as decorators become standardised.
+
+`createMark` can be called with a `validate` and an `init` function, and gives back a tuple of 3 functions: the decorator itself, a function to get a list of marks that an instance has, and a function that will initialise the marks on an instance. It can be used like so:
+
+```typescript
+
+// Makes the @prop decorator
+const [prop, getProps, initProps] = createMark(
+ ({name, kind}) => {
+ // Validate the name and kind that a mark can have.
+ // Name will be the PropertyKey that was decorated, and `kind` will be one of:
+ // "method", "field", "getter", "setter".
+ if (kind === "method") {
+ throw new Error(`@prop cannot be used to mark a method`)
+ }
+ },
+ (instance: CustomElement, {name, kind, access}) => {
+ // Put field initialization logic here.
+ // Return a property descriptor to define a field's functionality:
+ let value = kind === 'field' ? access.value : access.get?.call(instance)
+ return {
+ get() { return value }
+ set(newValue) {
+ value = newValue
+ instance.propChanged(name, newValue)
+ }
+ }
+ }
+)
+```
+
+If you want to find some examples of how marks work, take a look at the Catalyst source code! All field decorators (`@attr`, `@target`, `@provide`, `@consume` and so on) use `createMark`.
+
+## tag-observer
+
+Tag Observer provides a set of functions to observe elements marked with well-known attributes across the DOM, allowing classes to be reactive to DOM mutations. These functions operate over a `MutationObserver` set up to detect new elements coming into the page that have a registered attribute. To call register a new tag you can use the `registerTag` function which takes an attribute name to observe, a parse function (that parses the attribute value), and a found function (which is called for each element that has the attribute):
+
+```typescript
+registerTag(
+ `data-foo`,
+ (value: string) => value.split('.'),
+ (el: Element, controller: Element | ShadowRoot, ...meta: string[]) => {
+ // ...
+ }
+)
+```
+
+Tag Observer also provides a `observeElementForTags` function, which can be called on an element to adopt it into observation. A good place to use this is in your Abilities `connectedCallback`. This function can also take a `shadowRoot` if you're interested in observing tags within the shadow DOM (recommended). This function will find the root element (`ownerDocument`) and begin observing it.
+
+```typescript
+export const fooable = createAbility(
+ (Class: T): T =>
+ class extends Class {
+ connectedCallback() {
+ observeElementForTags(this) // This elements ownerDocument will now look out for new tags
+ }
+ }
+```
+
+Whenever an element appears on the page with the matching attribute (e.g. `data-foo`), the value is extracted, split by whitespace, and each substring is then given to `parse` to turn into an array of strings. The first value in the array that the parse function returns must be a parent selector, which is then used to find the controller this attribute could pertain to. If the element is a child of the given controller selector, then the found function is called with the element, the controller, and any additional metadata that the parse function extracted. Let's see an example for how this might work, given the above registered tag:
+
+```html
+
+
+
+```
+
+- Our `data-foo` attribute is found in the DOM, belonging to the `div` element.
+- The value is extracted and split by whitespace.
+- Our parse function gets called twice, firstly with `my-element.foo.bar`
+ - The parse function splits this by `.` which gets us `['my-element', 'foo', 'bar']`.
+ - Tag observer uses `my-element` as the parent selector and calls `div.closest('my-element')`,
+ - The `` controller is found.
+ - Our found function is called with `(
, , ['foo', 'bar'])`
+- The parse function is also called with `other-element.baz.bing`.
+ - The parse function splits this by `.` which gets us `['other-element', 'baz', 'bing']`.
+ - Tag observer uses `other-element` as the parent selector and calls `div.closest('other-element')`,
+ - No parent element is found, so the found function is not called.
+
+To take a look at how Tag Observer is used in Catalyst, you can look at [`data-action` (the Actionable ability)]({{ site.baseurl }}/guide/actions) or [`data-target` & `data-targets` (the Targetable ability)]({{ site.baseurl }}/guide/targets).
+
+## controllable
+
+`controllable` is a basic ability which other abilities can use to simplify connecting to a custom elements private state. This ability isn't _required_ to be used when creating your own abilities, but it's very useful for abilities which expect to use either the [ShadowDOM](https://developer.mozilla.org/en-US/docs/Web/API/ShadowRoot) or [ElementInternals](https://developer.mozilla.org/en-US/docs/Web/API/ElementInternals).
+
+You can create an ability that itself uses the `controllable` ability like so:
+
+```typescript
+import type {CustomElementClass} from '@github/catalyst'
+import {createAbility, controllable} from '@github/catalyst'
+
+createAbility((Class: CustomElementClass) => class extends controllable(Class) {
+ // Your behaviour goes here!
+}
+```
+
+The `controllable` ability provides 2 _custom_ callbacks which allow you to safely & robustly intercept the attachment of a ShadowRoot, and the attachment of ElementInternals. Let's look at each:
+
+### `[attachShadowCallback](shadowRoot: ShadowRoot)`
+
+```typescript
+import type {CustomElementClass} from '@github/catalyst'
+import {createAbility, attachShadowCallback, controllable} from '@github/catalyst'
+
+createAbility((Class: CustomElementClass) => class extends controllable(Class) {
+ [attachShadowCallback](shadowRoot: ShadowRoot) {
+ super[attachShadowCallback](shadowRoot)
+ // Do stuff with the `shadowRoot`.
+ }
+}
+```
+
+`attachShadowCallback` is a special `Symbol()` which allows you to make a method mostly hidden from other classes. `controllable` will call this symbol method whenever a ShadowRoot is attached to the element, which can be attached in 2 different ways:
+
+ - During the constructor, where the element might recieve a declarative ShadowDOM root (closed or open).
+ - Any time the `attachShadow()` function is called.
+
+This method is _usually_ called zero or once, but may be called twice if the element recieves a Declarative ShadowDOM root, and overrides this with another call to `attachShadow()`.
+
+Simply overriding `this.attachShadow` or trying to access `this.shadowRoot` can be a little tricky (if an element has a closed declarative shadow root this can be especially difficult to access within mixins), so this callback can be especially useful for working around the various ways a shadowRoot can be created.
+
+### `[attachInternalsCallback](internals: ElementInternals)`
+
+```typescript
+import type {CustomElementClass} from '@github/catalyst'
+import {createAbility, attachInternalsCallback, controllable} from '@github/catalyst'
+
+createAbility((Class: CustomElementClass) => class extends controllable(Class) {
+ [attachInternalsCallback](internals: ElementInternals) {
+ super[attachInternalsCallback](internals)
+ // Do stuff with the `internals`.
+ }
+}
+```
+
+`attachInternalsCallback` is a special `Symbol()` which allows you to make a method mostly hidden from other classes. `controllable` will call this symbol method whenever an element is constructed, giving it the element's `ElementInternals`. This enables custom enablies [Abilities]({{ site.baseurl }}/guide/abilities) to also have access to `ElementInternals`. It does so while also preserving the ability for `attachInternals()` to be called again (usually `attachInternals()` will error if called twice).
+
+If you need access to the internals, then the `attachInternalsCallback` can be very useful as it protects you from calling `attachInternals` in a way which the concrete classes will then fail.
diff --git a/docs/_guide/decorators.md b/docs/_guide/decorators.md
index 806e30fa..10d08343 100644
--- a/docs/_guide/decorators.md
+++ b/docs/_guide/decorators.md
@@ -37,7 +37,51 @@ class HelloWorldElement extends HTMLElement {
Class Field decorators get given the class and the field name so they can add custom functionality to the field. Because they operate on the fields, they must be put on top of or to the left of the field.
-#### Supporting `strictPropertyInitialization`
+### Method Decorators
+
+Method decorators work just like Field Decorators. Put them on top or on the left of the method, like so:
+
+
+```js
+class HelloWorldElement extends HTMLElement {
+
+ @log
+ submit() {
+ // ...
+ }
+
+ // Alternative style
+
+ @log load() {
+ // ...
+ }
+
+}
+```
+
+### Getter/Setter
+
+Decorators can also be used over a `get` or `set` field. These work just like Field Decorators, but you can put them over one or both the `get` or `set` field. Some decorators might throw an error if you put them over a `get` field, when they expect to be put over a `set` field:
+
+
+```js
+class HelloWorldElement extends HTMLElement {
+
+ @target set something() {
+ // ...
+ }
+
+ // Can be used over just one field
+ @attr get data() {
+ return {}
+ }
+ set data() {
+
+ }
+}
+```
+
+### Supporting `strictPropertyInitialization`
TypeScript comes with various "strict" mode settings, one of which is `strictPropertyInitialization` which lets TypeScript catch potential class properties which might not be assigned during construction of a class. This option conflicts with Catalyst's `@target`/`@targets` decorators, which safely do the assignment but TypeScript's simple heuristics cannot detect this. There are two ways to work around this:
@@ -63,28 +107,6 @@ TypeScript comes with various "strict" mode settings, one of which is `strictPro
}
```
-### Method Decorators
-
-Catalyst doesn't currently ship with any method decorators, but you might see them in code. They work just like Field Decorators (in fact they're the same thing). Put them on top or on the left of the method, like so:
-
-
-```js
-class HelloWorldElement extends HTMLElement {
-
- @log
- submit() {
- // ...
- }
-
- // Alternative style
-
- @log load() {
- // ...
- }
-
-}
-```
-
### Function Calling Decorators
You might see some decorators that look like function calls, and that's because they are! Some decorators allow for customisation; calling with additional arguments. Decorators that expect to be called are generally not interchangeable with the non-call variant, a decorators documentation should tell you how to use it.
diff --git a/docs/_guide/providable.md b/docs/_guide/providable.md
new file mode 100644
index 00000000..ec51bcd6
--- /dev/null
+++ b/docs/_guide/providable.md
@@ -0,0 +1,144 @@
+---
+chapter: 15
+subtitle: The Provider pattern
+---
+
+The [Provider pattern](https://www.patterns.dev/posts/provider-pattern/) allows for deeply nested children to ask ancestors for values. This can be useful for decoupling state inside a component, centralising it higher up in the DOM heirarchy. A top level container component might store values, and many children can consume those values, without having logic duplicated across the app. It's quite an abstract pattern so is better explained with examples...
+
+Say for example a set of your components are built to perform actions on a user, but need a User ID. One way to handle this is to set the User ID as an attribute on each element, but this can lead to a lot of duplication. Instead these actions can request the ID from a parent component, which can provide the User ID without creating an explicit relationship (which can lead to brittle code).
+
+The `@providable` ability allows a Catalyst controller to become a provider or consumer (or both) of one or many properties. To provide a property to nested controllers that ask for it, mark a property as `@provide`. To consume a property from a parent, mark a property as `@consume`. Let's try implementing the user actions using `@providable`:
+
+```typescript
+import {providable, consume, provide, controller} from '@github/catalyst'
+
+@controller
+@providable
+class BlockUser extends HTMLElement {
+ // This will request `userId`, and default to '' if not provided.
+ @consume userId = ''
+ // This will request `userName`, and default to '' if not provided.
+ @consume userName = ''
+
+ async handleEvent() {
+ if (confirm(`Would you like to block ${this.userName}?`)) {
+ await fetch(`/users/${userId}/delete`)
+ }
+ }
+}
+
+@controller
+@providable
+class FollowUser extends HTMLElement {
+ // This will request `userId`, and default to '' if not provided.
+ @consume userId = ''
+ // This will request `userName`, and default to '' if not provided.
+ @consume userName = ''
+
+ async handleEvent() {
+ if (confirm(`Would you like to follow ${this.userName}?`)) {
+ await fetch(`/users/${userId}/delete`)
+ }
+ }
+}
+
+@controller
+@providable
+class UserRow extends HTMLElement {
+ // This will provide `userId` as '123' to any nested children that request it.
+ @provide userId = '123'
+ // This will provide `userName` as 'Alex' to any nested children that request it.
+ @provide userName = 'Alex'
+}
+```
+
+```html
+
+
+
+
+```
+
+This shows how the basic pattern works, but `UserRow` having fixed strings isn't very useful. The `@provide` decorator can be combined with other decorators to make it more powerful, for example `@attr`:
+
+```typescript
+import {providable, consume, provide, @attr, controller} from '@github/catalyst'
+
+@controller
+@providable
+class UserRow extends HTMLElement {
+ @provide @attr userId = ''
+ @provide @attr userName = ''
+}
+```
+```html
+
+
+
+
+
+
+
+
+```
+
+Values aren't just limited to strings, they can be any type; for example functions, classes, or even other controllers! We could implement a custom dialog component which exists as a sibling and invoke it using providers and `@target`:
+
+
+```typescript
+import {providable, consume, provide, target, attr, controller} from '@github/catalyst'
+
+@controller
+@providable
+class UserList extends HTMLElement {
+ @provide @target dialog: UserDialogElement
+}
+
+@controller
+class UserDialog extends HTMLElement {
+ setTitle(title: string) {
+ this.title.textContent = title
+ }
+ confirm() {
+ this.show()
+ return this.untilClosed()
+ }
+ //...
+}
+
+@controller
+@providable
+class FollowUser extends HTMLElement {
+ // This will request `userId`, and default to '' if not provided.
+ @consume userId = ''
+ // This will request `userName`, and default to '' if not provided.
+ @consume userName = ''
+ // This will request `dialog`, defaulting it to `null` if not provided:
+ @consume dialog: UserDialog | null = null
+
+ async handleEvent() {
+ if (!this.dialog) return
+ this.dialog.setTitle(`Would you like to follow ${this.userName}?`)
+ if (await this.dialog.confirm()) {
+ await fetch(`/users/${this.userId}/delete`)
+ }
+ }
+}
+```
+```html
+
+
+
+
+
+
+
+
+
+
+
+
+
+```
+
+If you're interested to find out how the Provider pattern works, you can look at the [context community-protocol as part of webcomponents-cg](https://github.com/webcomponents-cg/community-protocols/blob/main/proposals/context.md).
diff --git a/docs/_guide/rendering.md b/docs/_guide/rendering.md
index c380a92f..69bcd601 100644
--- a/docs/_guide/rendering.md
+++ b/docs/_guide/rendering.md
@@ -11,15 +11,15 @@ Remember to _always_ make your JavaScript progressively enhanced, where possible
By leveraging the native [`ShadowDOM`](https://developer.mozilla.org/en-US/docs/Web/Web_Components/Using_shadow_DOM) feature, Catalyst components can render complex sub-trees, fully encapsulated from the rest of the page.
-Catalyst will automatically look for elements that match the `template[data-shadowroot]` selector, within your controller. If it finds one as a direct-child of your controller, it will use that to create a shadowRoot.
+[Actions]({{ site.baseurl }}/guide/actions) and [Targets]({{ site.baseurl }}/guide/targets) all work within an elements ShadowRoot.
-Catalyst Controllers will search for a direct child of `template[data-shadowroot]` and load its contents as the `shadowRoot` of the element. [Actions]({{ site.baseurl }}/guide/actions) and [Targets]({{ site.baseurl }}/guide/targets) all work within an elements ShadowRoot.
+You can also leverage the [declarative shadow DOM](https://web.dev/declarative-shadow-dom/) and render a template inline to your HTML, which will automatically be attached (this may require a polyfill for browsers which are yet to support this feature).
### Example
```html
-
+
Hello World
@@ -41,12 +41,34 @@ class HelloWorldElement extends HTMLElement {
}
```
-Providing the `` element as a direct child of the `hello-world` element tells Catalyst to render the templates contents automatically, and so all `HelloWorldElements` with this template will be rendered with the contents.
-
{% capture callout %}
-Remember that _all_ instances of your controller _must_ add the `` HTML. If an instance does not have the `` as a direct child, then the shadow DOM won't be rendered for it!
+Remember that _all_ instances of your controller _must_ add the `` HTML. If an instance does not have the `` as a direct child, then the shadow DOM won't be rendered for it!
{% endcapture %}{% include callout.md %}
+
+It is also possible to attach a shadowRoot to your element during the `connectedCallback`, like so:
+
+```typescript
+import { controller, target } from "@github/catalyst"
+
+@controller
+class HelloWorldElement extends HTMLElement {
+ @target nameEl: HTMLElement
+ get name() {
+ return this.nameEl.textContent
+ }
+ set name(value: string) {
+ this.nameEl.textContent = value
+ }
+
+ connectedCallback() {
+ this.attachShadow({ mode: 'open' }).innerHTML = `
+ Hello World
+
`
+ }
+}
+```
+
### Updating a Template element using JS templates
Sometimes you wont have a template that is server rendered, and instead want to make a template using JS. Catalyst does not support this out of the box, but it is possible to use another library: `@github/jtml`. This library can be used to write declarative templates using JS. Let's re-work the above example using `@github/jtml`:
diff --git a/docs/_guide/targets.md b/docs/_guide/targets.md
index f52dd3de..e9d477b9 100644
--- a/docs/_guide/targets.md
+++ b/docs/_guide/targets.md
@@ -5,7 +5,7 @@ subtitle: Querying Descendants
One of the three [core patterns]({{ site.baseurl }}/guide/introduction#three-core-concepts-observe-listen-query) is Querying. In Catalyst, Targets are the preferred way to query. Targets use `querySelector` under the hood, but in a way that makes it a lot simpler to work with.
-Catalyst Components are really just Web Components, so you could simply use `querySelector` or `querySelectorAll` to select descendants of the element. Targets avoid some of the problems of `querySelector`; they provide a more consistent interface, avoid coupling CSS classes or HTML tag names to JS, and they handle subtle issues like nested components. Targets are also a little more ergonomic to reuse in a class. We'd recommend using Targets over `querySelector` wherever you can.
+Catalyst Components are really just Web Components, so you could use `querySelector` or `querySelectorAll` to select descendants of the element. Targets avoid some of the problems of `querySelector`; they provide a more consistent interface, avoid coupling CSS classes or HTML tag names to JS, and they handle subtle issues like nested components. Targets are also a little more ergonomic to reuse in a class. We'd recommend using Targets over `querySelector` wherever you can.
To create a Target, use the `@target` decorator on a class field, and add the matching `data-target` attribute to your HTML, like so:
@@ -136,21 +136,32 @@ Important to note here is that nodes from the `shadowRoot` get returned _first_.
### What about without Decorators?
-If you're using decorators, then the `@target` and `@targets` decorators will turn the decorated properties into getters.
+If you're not using decorators, then the `@target` and `@targets` decorators have an escape hatch: you can define a static class field using the `[target.static]` computed property, as an array of key names. Like so:
-If you're not using decorators, then you'll need to make a `getter`, and call `findTarget(this, key)` or `findTargets(this, key)` in the getter, for example:
+```js
+import {controller, target, targets} from '@github/catalyst'
+
+controller(class HelloWorldElement extends HTMLElement {
+ // The same as `@target output`
+ [target.static] = ['output']
+
+ // The same as `@targets pages; @targets links`
+ [targets.static] = ['pages', 'links']
+
+})
+```
+
+This is functionally identical to:
```js
-import {findTarget, findTargets} from '@github/catalyst'
-class HelloWorldElement extends HTMLElement {
+import {controller} from '@github/catalyst'
- get output() {
- return findTarget(this, 'output')
- }
+@controller
+class HelloWorldElement extends HTMLElement {
+ @target output
- get pages() {
- return findTargets(this, 'pages')
- }
+ @targets pages
+ @targets links
}
-```
+```
\ No newline at end of file
diff --git a/docs/_guide/testing.md b/docs/_guide/testing.md
new file mode 100644
index 00000000..9bf224be
--- /dev/null
+++ b/docs/_guide/testing.md
@@ -0,0 +1,85 @@
+---
+chapter: 13
+subtitle: Testing
+---
+
+Catalyst controllers are based on Web Components, and as such need the Web Platform environment to run in, including in tests. It's possible to run these tests in "browser like" environments such as NodeJS or Deno with libraries like jsdom, but it's best to run tests directly in the browser.
+
+### Recommended Libraries
+
+We recommend using [`@web/test-runner`](https://modern-web.dev/docs/test-runner/overview/), which provides the `web-test-runner` command line tool that can run [mocha](https://mochajs.org/) test files in a headless Chromium instance. We also recommend using [`@open-wc/testing`](https://open-wc.org/docs/testing/testing-package/) which provides a set of testing functions, including `expect` from [Chai](https://www.chaijs.com/api/bdd/). If you're using TypeScript, it may be worth also installing [`@web/dev-server-esbuild`](https://modern-web.dev/docs/dev-server/overview/) which can transpile TypeScript to JavaScript, allowing the use of TypeScript within test files themselves.
+
+With these installed and configured your `package.json` might look something like:
+
+```json
+{
+ "name": "my-catalyst-component",
+ "scripts": {
+ "test": "web-test-server"
+ },
+ "devDependencies": {
+ "@web/dev-server-esbuild": "^0.3.0",
+ "@web/test-runner": "^0.13.27",
+ "@open-wc/testing": "^3.1.2"
+ }
+}
+```
+
+You can configure the `web-test-server` by writing a `web-test-runner.config.js` file, which sets up the esbuild plugin to transpile TypeScript, and configure the directory containing your test files:
+
+```typescript
+import {esbuildPlugin} from '@web/dev-server-esbuild'
+
+export default {
+ files: ['test/*'],
+ nodeResolve: true,
+ plugins: [esbuildPlugin({ts: true})]
+}
+```
+
+#### Example Test File
+
+With this set-up, the boilerplate for an Element test suite might look something like this:
+
+```typescript
+// test/my-controller.ts
+import {expect, fixture, html} from '@open-wc/testing'
+import {MyController} from '../src/my-controller'
+
+describe('MyController', () => {
+ let instance
+ beforeEach(async () => {
+ instance = await fixture(html`
+
+ `)
+ })
+
+ it('is a Catalyst controller', () => {
+ expect(instance).to.have.attribute('data-catalyst')
+ })
+
+ it('matches snapshot', () => {
+ expect(instance).dom.to.equalSnapshot()
+ })
+
+ it('passes Axe tests', () =>
+ expect(instance).to.be.accessible()
+ })
+
+ it('...') // Fill out the rest
+})
+```
+
+##### Useful Assertions
+
+The `@open-wc/testing` package exports the `expect` function from Chai, but also automatically registers a set of plugins useful for writing web components, including [chai-a11y-axe](https://www.npmjs.com/package/chai-a11y-axe) and [chai-dom](https://www.npmjs.com/package/chai-dom). Here are some handy example assertions which may be commonly written:
+
+
+- `expect(instance).to.be.accessible()` - Runs a suite of [Axe](https://www.npmjs.com/package/axe) accessibility tests on the element.
+- `expect(instance).dom.to.equalSnapshot()` - Stores a snaphsot test of the existing DOM, which can be tested against later, for regressions.
+- `expect(instance).shadowDom.to.equalSnapshot()` - Stores a snaphsot test of the existing ShadowDOM, which can be tested against later, for regressions.
+- `expect(instance).to.have.class('foo')` - Checks the element has the `foo` class (like `el.classList.contains('foo')`).
+- `expect(instance).to.have.attribute('foo')` - Checks the element has the `foo` attribute (like `el.hasAttribute('foo')`).
+- `expect(instance).to.have.attribute('foo')` - Checks the element has the `foo` attribute (like `el.hasAttribute('foo')`).
+- `expect(instance).to.have.descendants('.foo')` - Checks the element has elements matching the selector `.foo` attribute (like `el.querySelectorAll('foo')`).
+
diff --git a/docs/_guide/you-will-need.md b/docs/_guide/you-will-need.md
index 67681cca..90af6080 100644
--- a/docs/_guide/you-will-need.md
+++ b/docs/_guide/you-will-need.md
@@ -23,4 +23,72 @@ Please note this list may increase over time. Catalyst will never ship with poly
When using build tools, some JavaScript minifiers modify the class name that Catalyst relies on. You know you have an issue if you encounter the error `"c" is not a valid custom element name`.
-A best practice is to allow class names that end with `Element`. For instance, for Terser, you can use the following config: `{ keep_classnames: /Element$/ }`
+The preferred way to handle this is to disable renaming class names in your build tools.
+
+#### ESBuild
+
+When using ESBuild you can turn off all class and function name minification with the [`keep_names`](https://esbuild.github.io/api/#keep-names) option. Setting this to `true` in your build will opt-out all classes and all functions from minification.
+
+
+```ts
+{ keep_names: true }
+// Or --keep-names on the CLI
+```
+
+#### Terser
+
+When using Terser you have a bit more control, and can explicitly opt just classes, or just certain class names out of minification. For example to opt-out class names that end with `Element` you can set the following config:
+
+```ts
+{ keep_classnames: /Element$/ }
+```
+
+It is also possible to set `keep_classnames` to `true` (or pass `--keep-classnames` to the CLI tool), which will opt-out all class names. [You can read more about the minification options on Terser's docs](https://terser.org/docs/api-reference#minify-options)
+
+#### SWC
+
+When using SWC you can use the `keep_classnames` option just like Terser. As SWC also handles Transpilation, you should be sure to enable native class syntax by specifiying `target` to at least `es2016`. [Take a look at the SWC docs for more about compression options](https://swc.rs/docs/configuration/minification#jscminifycompress).
+
+```json
+{
+ "jsc": {
+ "target": "es2016",
+ "minify": {
+ "compress": {
+ "keep_classnames": true
+ }
+ }
+ }
+}
+```
+
+#### Other alternatives
+
+If your tool chain does not support opting out of minification, or if you would prefer to keep name minification on, you can instead selectively re-assign the `name` field to Catalyst controllers:
+
+```ts
+@controller
+class UserList extends HTMLElement {
+ static name = 'UserList'
+}
+```
+
+TypeScript will need the `useDefineForClassFields` set to `true` for the above to work, alternatively you can use the following syntax with `useDefineForClassFields` kept off:
+
+```ts
+@controller
+class UserList extends HTMLElement {
+ static get name() { return 'UserList' }
+}
+```
+
+You'll need to keep the class name either way. TypeScript decorators only support _class declarations_ which require a name between `class` and `extends`. For example the following will be a SyntaxError:
+
+```ts
+@controller
+class extends HTMLElement { // You can't do this!
+ static name = 'UserList'
+}
+```
+
+
diff --git a/docs/_guide/your-first-component.md b/docs/_guide/your-first-component.md
index 5b6348d7..8d92d1d6 100644
--- a/docs/_guide/your-first-component.md
+++ b/docs/_guide/your-first-component.md
@@ -25,12 +25,12 @@ class HelloWorldElement extends HTMLElement {
```
-Catalyst will automatically convert the classes name; removing the trailing `Element` suffix and lowercasing all capital letters, separating them with a dash.
+Catalyst will automatically convert the classes name so the HTML tag will be ``. It removes the trailing `Element` suffix and lowercases all capital letters, separating them with a dash.
-By convention Catalyst controllers end in `Element`; Catalyst will omit this when generating a tag name. The `Element` suffix is _not_ required - just convention. All examples in this guide use `Element` suffixed names.
+Catalyst controllers can end in `Element`, `Controller`, or `Component` and Catalyst will remove this suffix when generating a tag name. Adding one of these suffixes is _not_ required - just convention. All examples in this guide use `Element` suffixed names (see our [convention note on this for more]({{ site.baseurl }}/guide/conventions#suffix-your-controllers-consistently-for-symmetry)).
{% capture callout %}
-Remember! A class name _must_ include at least two CamelCased words (not including the `Element` suffix). One-word elements will raise exceptions. Example of good names: `UserListElement`, `SubTaskElement`, `PagerContainerElement`
+Remember! A class name _must_ include at least two CamelCased words (not including the `Element`, `Controller` or `Component` suffix). One-word elements will raise exceptions. Example of good names: `UserListElement`, `SubTaskController`, `PagerContainerComponent`
{% endcapture %}{% include callout.md %}
@@ -40,33 +40,28 @@ The `@controller` decorator ties together the various other decorators within Ca
- Derives a tag name based on your class name, removing the trailing `Element` suffix and lowercasing all capital letters, separating them with a dash.
- Calls `window.customElements.define` with the newly derived tag name and your class.
- - Calls `defineObservedAttributes` with the class to add map any `@attr` decorators. See [attrs]({{ site.baseurl }}/guide/attrs) for more on this.
- - Injects the following code inside of the `connectedCallback()` function of your class:
- - `bind(this)`; ensures that as your element connects it picks up any `data-action` handlers. See [actions]({{ site.baseurl }}/guide/actions) for more on this.
- - `autoShadowRoot(this)`; ensures that your element loads any `data-shadowroot` templates. See [rendering]({{ site.baseurl }}/guide/rendering) for more on this.
- - `initializeAttrs(this)`; ensures that your element binds any `data-*` attributes to props. See [attrs]({{ site.baseurl }}/guide/attrs) for more on this.
+ - Loads the `attrable` decorator, which provides the ability to define `@attr` decorators. See [attrs]({{ site.baseurl }}/guide/attrs) for more on this.
+ - Loads the `actionable` decorator, which provides the ability to bind actions. See [actions]({{ site.baseurl }}/guide/actions) for more on this.
+ - Loads the `targetable` decorator, which provides Target querying. See [targets]({{ site.baseurl }}/guide/targets) for more on this.
You can do all of this manually; for example here's the above `HelloWorldElement`, written without the `@controller` annotation:
```js
-import {bind, autoShadowRoot, initializeAttrs, defineObservedAttributes} from '@github/catalyst'
+import {attrable, targetable, actionable} from '@github/catalyst'
+
+@register
+@actionable
+@attrable
+@targetable
class HelloWorldElement extends HTMLElement {
- connectedCallback() {
- autoShadowRoot(this)
- initializeAttrs(this)
- this.innerHTML = 'Hello World!'
- bind(this)
- }
}
-defineObservedAttributes(HelloWorldElement)
-window.customElements.define('hello-world', HelloWorldElement)
```
-Using the `@controller` decorator saves on having to write this boilerplate for each element.
+The `@controller` decorator saves on having to write this boilerplate for each element.
### What about without TypeScript Decorators?
-If you don't want to use TypeScript decorators, you can use `controller` as a regular function, and just pass it your class:
+If you don't want to use TypeScript decorators, you can use `controller` as a regular function by passing it to your class:
```js
import {controller} from '@github/catalyst'
diff --git a/docs/_includes/sidebar.html b/docs/_includes/sidebar.html
index 7643936d..8c62fec0 100644
--- a/docs/_includes/sidebar.html
+++ b/docs/_includes/sidebar.html
@@ -2,12 +2,14 @@
{% for item in sidebarItems %}
+ {% unless item.hidden %}
{{ item.title || item.name }}
{% if item.subtitle %}
{{ item.subtitle }}
{% endif %}
+ {% endunless %}
{% endfor %}
diff --git a/lighthouserc.json b/lighthouserc.json
index c86a7656..3fc84d9a 100644
--- a/lighthouserc.json
+++ b/lighthouserc.json
@@ -12,10 +12,11 @@
"uses-text-compression": "off",
"render-blocking-resources": "off",
"uses-rel-preload": "off",
- "first-contentful-paint": ["warn", {"minScore": 0.8}],
- "first-meaningful-paint": ["warn", {"minScore": 0.8}],
- "largest-contentful-paint": ["warn", {"minScore": 0.8}],
- "deprecations": "off"
+ "first-contentful-paint": ["error", {"minScore": 0.6}],
+ "first-meaningful-paint": ["error", {"maxNumericValue": 3000}],
+ "largest-contentful-paint": ["error", {"maxNumericValue": 3000}],
+ "deprecations": "off",
+ "csp-xss": "off"
}
},
"upload": {
diff --git a/package-lock.json b/package-lock.json
index e7436fff..aef4bcbc 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -10,18 +10,18 @@
"license": "MIT",
"devDependencies": {
"@github/prettier-config": "^0.0.4",
- "@lhci/cli": "^0.7.0",
- "@open-wc/testing": "^3.1.2",
+ "@lhci/cli": "^0.9.0",
+ "@open-wc/testing": "^3.1.4",
"@size-limit/preset-small-lib": "^7.0.8",
- "@typescript-eslint/eslint-plugin": "^5.16.0",
- "@typescript-eslint/parser": "^5.16.0",
+ "@typescript-eslint/eslint-plugin": "^5.22.0",
+ "@typescript-eslint/parser": "^5.22.0",
"@web/dev-server-esbuild": "^0.3.0",
"@web/test-runner": "^0.13.27",
- "eslint": "^8.12.0",
+ "eslint": "^8.14.0",
"eslint-plugin-github": "^4.3.6",
"sinon": "^13.0.1",
"size-limit": "^7.0.8",
- "tslib": "^2.3.1",
+ "tslib": "^2.4.0",
"typescript": "^4.6.3"
}
},
@@ -47,9 +47,9 @@
}
},
"node_modules/@babel/highlight": {
- "version": "7.16.10",
- "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.16.10.tgz",
- "integrity": "sha512-5FnTQLSLswEj6IkgVw5KusNUUFY9ZGqe/TRFnP/BKYHYgfh7tc+C7mwiy95/yNP7Dh9x580Vv8r7u7ZfTBFxdw==",
+ "version": "7.17.9",
+ "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.17.9.tgz",
+ "integrity": "sha512-J9PfEKCbFIv2X5bjTMiZu6Vf341N05QIY+d6FvVKynkG1S7G0j3I0QoRtWIrXhZ+/Nlb5Q0MzqL7TokEJ5BNHg==",
"dev": true,
"dependencies": {
"@babel/helper-validator-identifier": "^7.16.7",
@@ -60,24 +60,10 @@
"node": ">=6.9.0"
}
},
- "node_modules/@babel/highlight/node_modules/chalk": {
- "version": "2.4.2",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
- "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
- "dev": true,
- "dependencies": {
- "ansi-styles": "^3.2.1",
- "escape-string-regexp": "^1.0.5",
- "supports-color": "^5.3.0"
- },
- "engines": {
- "node": ">=4"
- }
- },
"node_modules/@eslint/eslintrc": {
- "version": "1.2.1",
- "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.2.1.tgz",
- "integrity": "sha512-bxvbYnBPN1Gibwyp6NrpnFzA3YtRL3BBAyEAFVIpNTm2Rn4Vy87GA5M4aSn3InRrlsbX5N0GW7XIx+U4SAEKdQ==",
+ "version": "1.2.2",
+ "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.2.2.tgz",
+ "integrity": "sha512-lTVWHs7O2hjBFZunXTZYnYqtB9GakA1lnxIf+gKq2nY5gxkkNi/lQvveW6t8gFdOHTg6nG50Xs95PrLqVpcaLg==",
"dev": true,
"dependencies": {
"ajv": "^6.12.4",
@@ -113,9 +99,9 @@
}
},
"node_modules/@esm-bundle/chai": {
- "version": "4.3.4",
- "resolved": "https://registry.npmjs.org/@esm-bundle/chai/-/chai-4.3.4.tgz",
- "integrity": "sha512-6Tx35wWiNw7X0nLY9RMx8v3EL8SacCFW+eEZOE9Hc+XxmU5HFE2AFEg+GehUZpiyDGwVvPH75ckGlqC7coIPnA==",
+ "version": "4.3.4-fix.0",
+ "resolved": "https://registry.npmjs.org/@esm-bundle/chai/-/chai-4.3.4-fix.0.tgz",
+ "integrity": "sha512-26SKdM4uvDWlY8/OOOxSB1AqQWeBosCX3wRYUZO7enTAj03CtVxIiCimYVG2WpULcyV51qapK4qTovwkUr5Mlw==",
"dev": true,
"dependencies": {
"@types/chai": "^4.2.12"
@@ -148,19 +134,19 @@
"dev": true
},
"node_modules/@lhci/cli": {
- "version": "0.7.0",
- "resolved": "https://registry.npmjs.org/@lhci/cli/-/cli-0.7.0.tgz",
- "integrity": "sha512-MyV+KtoOnXbhvu4Y4iE8EE5haL+czO9+RpVgU/cFL8jueFfXV9FxJ7QmAs+U68HmjK+fOTgmkPu0k7nGn8K0pw==",
+ "version": "0.9.0",
+ "resolved": "https://registry.npmjs.org/@lhci/cli/-/cli-0.9.0.tgz",
+ "integrity": "sha512-cEfWHCWuBQKUrwy3minHxRYtiAZ//m8XRSZvFQ2zX2Lzz+J/3xlBKQTfSiln3sIXTTWzEHaucDs70rQS8EQ/vQ==",
"dev": true,
"dependencies": {
- "@lhci/utils": "0.7.0",
+ "@lhci/utils": "0.9.0",
"chrome-launcher": "^0.13.4",
"compression": "^1.7.4",
"debug": "^4.3.1",
"express": "^4.17.1",
"inquirer": "^6.3.1",
"isomorphic-fetch": "^3.0.0",
- "lighthouse": "7.0.0",
+ "lighthouse": "9.3.0",
"lighthouse-logger": "1.2.0",
"open": "^7.1.0",
"tmp": "^0.1.0",
@@ -173,51 +159,29 @@
"lhci": "src/cli.js"
}
},
- "node_modules/@lhci/cli/node_modules/tmp": {
- "version": "0.1.0",
- "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.1.0.tgz",
- "integrity": "sha512-J7Z2K08jbGcdA1kkQpJSqLF6T0tdQqpR2pnSUXsIchbPdTI9v3e85cLW0d6WDhwuAleOV71j2xWs8qMPfK7nKw==",
- "dev": true,
- "dependencies": {
- "rimraf": "^2.6.3"
- },
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/@lhci/cli/node_modules/yargs-parser": {
- "version": "13.1.2",
- "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.2.tgz",
- "integrity": "sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==",
- "dev": true,
- "dependencies": {
- "camelcase": "^5.0.0",
- "decamelize": "^1.2.0"
- }
- },
"node_modules/@lhci/utils": {
- "version": "0.7.0",
- "resolved": "https://registry.npmjs.org/@lhci/utils/-/utils-0.7.0.tgz",
- "integrity": "sha512-YDAoNWc4ThMwmOl8xJ9qdy00f37Zq0f634QoKcOMw3sqQRd6wNWztY9kiM4gEDhigoEy99y0GaB+hYokI313Fg==",
+ "version": "0.9.0",
+ "resolved": "https://registry.npmjs.org/@lhci/utils/-/utils-0.9.0.tgz",
+ "integrity": "sha512-uHpGX71Mqay4XLxkuMdZhH+goKKygTW9Uc2s2SewRW64TLjUNRSMn2L6wG9cZx6gntD4zBdKFZWoF+dg2yx9MA==",
"dev": true,
"dependencies": {
"debug": "^4.3.1",
"isomorphic-fetch": "^3.0.0",
"js-yaml": "^3.13.1",
- "lighthouse": "7.0.0",
+ "lighthouse": "9.3.0",
"tree-kill": "^1.2.1"
}
},
"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==",
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/@lit/reactive-element/-/reactive-element-1.3.2.tgz",
+ "integrity": "sha512-A2e18XzPMrIh35nhIdE4uoqRzoIpEU5vZYuQN4S3Ee1zkGdYC27DP12pewbw/RLgPHzaE4kx/YqxMzebOpm0dA==",
"dev": true
},
"node_modules/@mdn/browser-compat-data": {
- "version": "4.1.17",
- "resolved": "https://registry.npmjs.org/@mdn/browser-compat-data/-/browser-compat-data-4.1.17.tgz",
- "integrity": "sha512-o7hCdjCR5S1beYsOlfwqeXMujqlryV8/nJlM7xmv8HIAb4E4SN/YOE4cwmvZErUkgiVZkApvUDePDnIcxthmAQ==",
+ "version": "4.1.19",
+ "resolved": "https://registry.npmjs.org/@mdn/browser-compat-data/-/browser-compat-data-4.1.19.tgz",
+ "integrity": "sha512-zDrdjvX2dwunW4HOGwpibLHvfnDRQOJ89bGnkQ7TXZ7H7JSehbg2Gf0zNbML+R/03QItZ7EI6QHloOJ2znFSdA==",
"dev": true
},
"node_modules/@nodelib/fs.scandir": {
@@ -278,60 +242,34 @@
"dev": true
},
"node_modules/@open-wc/scoped-elements": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/@open-wc/scoped-elements/-/scoped-elements-2.0.1.tgz",
- "integrity": "sha512-JS6ozxUFwFX3+Er91v9yQzNIaFn7OnE0iESKTbFvkkKdNwvAPtp1fpckBKIvWk8Ae9ZcoI9DYZuT2DDbMPcadA==",
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/@open-wc/scoped-elements/-/scoped-elements-2.1.1.tgz",
+ "integrity": "sha512-qQAtVIK2H1oUIM2oSrCBnf1+ZGHd2nIowt1tete+Dn9rNXIogAMJlUBY/R1NR9MuuJvQ1MeFjgQoDmb05TUdkw==",
"dev": true,
"dependencies": {
"@lit/reactive-element": "^1.0.0",
- "@open-wc/dedupe-mixin": "^1.3.0",
- "@webcomponents/scoped-custom-element-registry": "^0.0.3"
+ "@open-wc/dedupe-mixin": "^1.3.0"
}
},
"node_modules/@open-wc/semantic-dom-diff": {
- "version": "0.19.5",
- "resolved": "https://registry.npmjs.org/@open-wc/semantic-dom-diff/-/semantic-dom-diff-0.19.5.tgz",
- "integrity": "sha512-Wi0Fuj3dzqlWClU0y+J4k/nqTcH0uwgOWxZXPyeyG3DdvuyyjgiT4L4I/s6iVShWQvvEsyXnj7yVvixAo3CZvg==",
- "dev": true,
- "dependencies": {
- "@types/chai": "^4.2.11",
- "@web/test-runner-commands": "^0.5.7"
- }
- },
- "node_modules/@open-wc/semantic-dom-diff/node_modules/@web/test-runner-commands": {
- "version": "0.5.13",
- "resolved": "https://registry.npmjs.org/@web/test-runner-commands/-/test-runner-commands-0.5.13.tgz",
- "integrity": "sha512-FXnpUU89ALbRlh9mgBd7CbSn5uzNtr8gvnQZPOvGLDAJ7twGvZdUJEAisPygYx2BLPSFl3/Mre8pH8zshJb8UQ==",
+ "version": "0.19.6",
+ "resolved": "https://registry.npmjs.org/@open-wc/semantic-dom-diff/-/semantic-dom-diff-0.19.6.tgz",
+ "integrity": "sha512-r6P097lboF7yTFeoExV/8Qcij/k7CXKG7JMFUh4L9ph9IRhQKBAc5UvDXIAHYdVhIFvNblyghjJo5c+quCgm3g==",
"dev": true,
"dependencies": {
- "@web/test-runner-core": "^0.10.20",
- "mkdirp": "^1.0.4"
- },
- "engines": {
- "node": ">=12.0.0"
- }
- },
- "node_modules/@open-wc/semantic-dom-diff/node_modules/mkdirp": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz",
- "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==",
- "dev": true,
- "bin": {
- "mkdirp": "bin/cmd.js"
- },
- "engines": {
- "node": ">=10"
+ "@types/chai": "^4.3.1",
+ "@web/test-runner-commands": "^0.6.1"
}
},
"node_modules/@open-wc/testing": {
- "version": "3.1.2",
- "resolved": "https://registry.npmjs.org/@open-wc/testing/-/testing-3.1.2.tgz",
- "integrity": "sha512-2KjEszLItrIEZwCLFjWOSy4rnLzLOpgckrKfZjNA39PpFR3xD9bqYU30TTnLRHBk2B/0ZUbHglyca3iwcF964w==",
+ "version": "3.1.4",
+ "resolved": "https://registry.npmjs.org/@open-wc/testing/-/testing-3.1.4.tgz",
+ "integrity": "sha512-z2iuPmcSq1du5ufZ7uDkNp56fVi0iFeCrWOi7EAf7Xd7iUXhfzQ56qoVYhnaeqxLws96bEvd/c6wX0AoGja9PA==",
"dev": true,
"dependencies": {
- "@esm-bundle/chai": "^4.3.4",
+ "@esm-bundle/chai": "^4.3.4-fix.0",
"@open-wc/chai-dom-equals": "^0.12.36",
- "@open-wc/semantic-dom-diff": "^0.19.5",
+ "@open-wc/semantic-dom-diff": "^0.19.6",
"@open-wc/testing-helpers": "^2.1.2",
"@types/chai": "^4.2.11",
"@types/chai-dom": "^0.0.9",
@@ -351,15 +289,15 @@
}
},
"node_modules/@rollup/plugin-node-resolve": {
- "version": "11.2.1",
- "resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-11.2.1.tgz",
- "integrity": "sha512-yc2n43jcqVyGE2sqV5/YCmocy9ArjVAP/BeXyTtADTBBX6V0e5UMqwO8CdQ0kzjb6zu5P1qMzsScCMRvE9OlVg==",
+ "version": "13.3.0",
+ "resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-13.3.0.tgz",
+ "integrity": "sha512-Lus8rbUo1eEcnS4yTFKLZrVumLPY+YayBdWXgFSHYhTT2iJbMhoaaBL3xl5NCdeRytErGr8tZ0L71BMRmnlwSw==",
"dev": true,
"dependencies": {
"@rollup/pluginutils": "^3.1.0",
"@types/resolve": "1.17.1",
- "builtin-modules": "^3.1.0",
"deepmerge": "^4.2.2",
+ "is-builtin-module": "^3.1.0",
"is-module": "^1.0.0",
"resolve": "^1.19.0"
},
@@ -367,7 +305,7 @@
"node": ">= 10.0.0"
},
"peerDependencies": {
- "rollup": "^1.20.0||^2.0.0"
+ "rollup": "^2.42.0"
}
},
"node_modules/@rollup/pluginutils": {
@@ -406,9 +344,9 @@
}
},
"node_modules/@sinonjs/fake-timers": {
- "version": "9.1.1",
- "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-9.1.1.tgz",
- "integrity": "sha512-Wp5vwlZ0lOqpSYGKqr53INws9HLkt6JDc/pDZcPf7bchQnrXJMXPns8CXx0hFikMSGSWfvtvvpb2gtMVfkWagA==",
+ "version": "9.1.2",
+ "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-9.1.2.tgz",
+ "integrity": "sha512-BPS4ynJW/o92PUR4wgriz2Ud5gpST5vz6GQfMixEDK0Z8ZCUv2M7SkBLykH56T++Xs+8ln9zTGbOvNGIe02/jw==",
"dev": true,
"dependencies": {
"@sinonjs/commons": "^1.7.0"
@@ -513,9 +451,9 @@
}
},
"node_modules/@types/chai": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.3.0.tgz",
- "integrity": "sha512-/ceqdqeRraGolFTcfoXNiqjyQhZzbINDngeoAq9GoHa8PPK1yNzTaxWjA6BFWp5Ua9JpXEMSS4s5i9tS0hOJtw==",
+ "version": "4.3.1",
+ "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.3.1.tgz",
+ "integrity": "sha512-/zPMqDkzSZ8t3VtxOa4KPq7uzzW978M9Tvh+j7GHKuo6k6GTLxPJ4J5gE5cjfJ26pnXst0N5Hax8Sr0T2Mi9zQ==",
"dev": true
},
"node_modules/@types/chai-dom": {
@@ -553,9 +491,9 @@
}
},
"node_modules/@types/content-disposition": {
- "version": "0.5.4",
- "resolved": "https://registry.npmjs.org/@types/content-disposition/-/content-disposition-0.5.4.tgz",
- "integrity": "sha512-0mPF08jn9zYI0n0Q/Pnz7C4kThdSt+6LD4amsrYDDpgBfrVWa3TcCOxKX1zkGgYniGagRv8heN2cbh+CAn+uuQ==",
+ "version": "0.5.5",
+ "resolved": "https://registry.npmjs.org/@types/content-disposition/-/content-disposition-0.5.5.tgz",
+ "integrity": "sha512-v6LCdKfK6BwcqMo+wYW05rLS12S0ZO0Fl4w1h4aaZMD7bqT3gVUns6FvLJKGZHQmYn3SX55JWGpziwJRwVgutA==",
"dev": true
},
"node_modules/@types/convert-source-map": {
@@ -703,9 +641,9 @@
"dev": true
},
"node_modules/@types/node": {
- "version": "14.14.31",
- "resolved": "https://registry.npmjs.org/@types/node/-/node-14.14.31.tgz",
- "integrity": "sha512-vFHy/ezP5qI0rFgJ7aQnjDXwAMrG0KqqIH7tQG5PPv3BWBayOPIQNBjVc/P6hhdZfMx51REc6tfDNXHUio893g==",
+ "version": "17.0.31",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.31.tgz",
+ "integrity": "sha512-AR0x5HbXGqkEx9CadRH3EBYx/VkiUgZIhP4wvPn/+5KIsgpNoyFaRlVe0Zlx9gRtg8fA06a9tskE2MSN7TcG4Q==",
"dev": true
},
"node_modules/@types/parse5": {
@@ -786,9 +724,9 @@
}
},
"node_modules/@types/yauzl": {
- "version": "2.9.2",
- "resolved": "https://registry.npmjs.org/@types/yauzl/-/yauzl-2.9.2.tgz",
- "integrity": "sha512-8uALY5LTvSuHgloDVUvWP3pIauILm+8/0pDMokuDYIoNsOkSwd5AiHBTSEJjKTDcZr5z8UpgOWZkxBF4iJftoA==",
+ "version": "2.10.0",
+ "resolved": "https://registry.npmjs.org/@types/yauzl/-/yauzl-2.10.0.tgz",
+ "integrity": "sha512-Cn6WYCm0tXv8p6k+A8PvbDG763EDpBoTzHdA+Q/MF6H3sapGjCm9NzoaJncJS9tUKSuCoDs9XHxYYsQDgxR6kw==",
"dev": true,
"optional": true,
"dependencies": {
@@ -796,14 +734,14 @@
}
},
"node_modules/@typescript-eslint/eslint-plugin": {
- "version": "5.16.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.16.0.tgz",
- "integrity": "sha512-SJoba1edXvQRMmNI505Uo4XmGbxCK9ARQpkvOd00anxzri9RNQk0DDCxD+LIl+jYhkzOJiOMMKYEHnHEODjdCw==",
+ "version": "5.22.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.22.0.tgz",
+ "integrity": "sha512-YCiy5PUzpAeOPGQ7VSGDEY2NeYUV1B0swde2e0HzokRsHBYjSdF6DZ51OuRZxVPHx0032lXGLvOMls91D8FXlg==",
"dev": true,
"dependencies": {
- "@typescript-eslint/scope-manager": "5.16.0",
- "@typescript-eslint/type-utils": "5.16.0",
- "@typescript-eslint/utils": "5.16.0",
+ "@typescript-eslint/scope-manager": "5.22.0",
+ "@typescript-eslint/type-utils": "5.22.0",
+ "@typescript-eslint/utils": "5.22.0",
"debug": "^4.3.2",
"functional-red-black-tree": "^1.0.1",
"ignore": "^5.1.8",
@@ -829,14 +767,14 @@
}
},
"node_modules/@typescript-eslint/parser": {
- "version": "5.16.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.16.0.tgz",
- "integrity": "sha512-fkDq86F0zl8FicnJtdXakFs4lnuebH6ZADDw6CYQv0UZeIjHvmEw87m9/29nk2Dv5Lmdp0zQ3zDQhiMWQf/GbA==",
+ "version": "5.22.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.22.0.tgz",
+ "integrity": "sha512-piwC4krUpRDqPaPbFaycN70KCP87+PC5WZmrWs+DlVOxxmF+zI6b6hETv7Quy4s9wbkV16ikMeZgXsvzwI3icQ==",
"dev": true,
"dependencies": {
- "@typescript-eslint/scope-manager": "5.16.0",
- "@typescript-eslint/types": "5.16.0",
- "@typescript-eslint/typescript-estree": "5.16.0",
+ "@typescript-eslint/scope-manager": "5.22.0",
+ "@typescript-eslint/types": "5.22.0",
+ "@typescript-eslint/typescript-estree": "5.22.0",
"debug": "^4.3.2"
},
"engines": {
@@ -856,13 +794,13 @@
}
},
"node_modules/@typescript-eslint/scope-manager": {
- "version": "5.16.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.16.0.tgz",
- "integrity": "sha512-P+Yab2Hovg8NekLIR/mOElCDPyGgFZKhGoZA901Yax6WR6HVeGLbsqJkZ+Cvk5nts/dAlFKm8PfL43UZnWdpIQ==",
+ "version": "5.22.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.22.0.tgz",
+ "integrity": "sha512-yA9G5NJgV5esANJCO0oF15MkBO20mIskbZ8ijfmlKIvQKg0ynVKfHZ15/nhAJN5m8Jn3X5qkwriQCiUntC9AbA==",
"dev": true,
"dependencies": {
- "@typescript-eslint/types": "5.16.0",
- "@typescript-eslint/visitor-keys": "5.16.0"
+ "@typescript-eslint/types": "5.22.0",
+ "@typescript-eslint/visitor-keys": "5.22.0"
},
"engines": {
"node": "^12.22.0 || ^14.17.0 || >=16.0.0"
@@ -873,12 +811,12 @@
}
},
"node_modules/@typescript-eslint/type-utils": {
- "version": "5.16.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.16.0.tgz",
- "integrity": "sha512-SKygICv54CCRl1Vq5ewwQUJV/8padIWvPgCxlWPGO/OgQLCijY9G7lDu6H+mqfQtbzDNlVjzVWQmeqbLMBLEwQ==",
+ "version": "5.22.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.22.0.tgz",
+ "integrity": "sha512-iqfLZIsZhK2OEJ4cQ01xOq3NaCuG5FQRKyHicA3xhZxMgaxQazLUHbH/B2k9y5i7l3+o+B5ND9Mf1AWETeMISA==",
"dev": true,
"dependencies": {
- "@typescript-eslint/utils": "5.16.0",
+ "@typescript-eslint/utils": "5.22.0",
"debug": "^4.3.2",
"tsutils": "^3.21.0"
},
@@ -899,9 +837,9 @@
}
},
"node_modules/@typescript-eslint/types": {
- "version": "5.16.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.16.0.tgz",
- "integrity": "sha512-oUorOwLj/3/3p/HFwrp6m/J2VfbLC8gjW5X3awpQJ/bSG+YRGFS4dpsvtQ8T2VNveV+LflQHjlLvB6v0R87z4g==",
+ "version": "5.22.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.22.0.tgz",
+ "integrity": "sha512-T7owcXW4l0v7NTijmjGWwWf/1JqdlWiBzPqzAWhobxft0SiEvMJB56QXmeCQjrPuM8zEfGUKyPQr/L8+cFUBLw==",
"dev": true,
"engines": {
"node": "^12.22.0 || ^14.17.0 || >=16.0.0"
@@ -912,13 +850,13 @@
}
},
"node_modules/@typescript-eslint/typescript-estree": {
- "version": "5.16.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.16.0.tgz",
- "integrity": "sha512-SE4VfbLWUZl9MR+ngLSARptUv2E8brY0luCdgmUevU6arZRY/KxYoLI/3V/yxaURR8tLRN7bmZtJdgmzLHI6pQ==",
+ "version": "5.22.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.22.0.tgz",
+ "integrity": "sha512-EyBEQxvNjg80yinGE2xdhpDYm41so/1kOItl0qrjIiJ1kX/L/L8WWGmJg8ni6eG3DwqmOzDqOhe6763bF92nOw==",
"dev": true,
"dependencies": {
- "@typescript-eslint/types": "5.16.0",
- "@typescript-eslint/visitor-keys": "5.16.0",
+ "@typescript-eslint/types": "5.22.0",
+ "@typescript-eslint/visitor-keys": "5.22.0",
"debug": "^4.3.2",
"globby": "^11.0.4",
"is-glob": "^4.0.3",
@@ -939,15 +877,15 @@
}
},
"node_modules/@typescript-eslint/utils": {
- "version": "5.16.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.16.0.tgz",
- "integrity": "sha512-iYej2ER6AwmejLWMWzJIHy3nPJeGDuCqf8Jnb+jAQVoPpmWzwQOfa9hWVB8GIQE5gsCv/rfN4T+AYb/V06WseQ==",
+ "version": "5.22.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.22.0.tgz",
+ "integrity": "sha512-HodsGb037iobrWSUMS7QH6Hl1kppikjA1ELiJlNSTYf/UdMEwzgj0WIp+lBNb6WZ3zTwb0tEz51j0Wee3iJ3wQ==",
"dev": true,
"dependencies": {
"@types/json-schema": "^7.0.9",
- "@typescript-eslint/scope-manager": "5.16.0",
- "@typescript-eslint/types": "5.16.0",
- "@typescript-eslint/typescript-estree": "5.16.0",
+ "@typescript-eslint/scope-manager": "5.22.0",
+ "@typescript-eslint/types": "5.22.0",
+ "@typescript-eslint/typescript-estree": "5.22.0",
"eslint-scope": "^5.1.1",
"eslint-utils": "^3.0.0"
},
@@ -963,12 +901,12 @@
}
},
"node_modules/@typescript-eslint/visitor-keys": {
- "version": "5.16.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.16.0.tgz",
- "integrity": "sha512-jqxO8msp5vZDhikTwq9ubyMHqZ67UIvawohr4qF3KhlpL7gzSjOd+8471H3nh5LyABkaI85laEKKU8SnGUK5/g==",
+ "version": "5.22.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.22.0.tgz",
+ "integrity": "sha512-DbgTqn2Dv5RFWluG88tn0pP6Ex0ROF+dpDO1TNNZdRtLjUr6bdznjA6f/qNqJLjd2PgguAES2Zgxh/JzwzETDg==",
"dev": true,
"dependencies": {
- "@typescript-eslint/types": "5.16.0",
+ "@typescript-eslint/types": "5.22.0",
"eslint-visitor-keys": "^3.0.0"
},
"engines": {
@@ -1004,16 +942,16 @@
}
},
"node_modules/@web/dev-server": {
- "version": "0.1.30",
- "resolved": "https://registry.npmjs.org/@web/dev-server/-/dev-server-0.1.30.tgz",
- "integrity": "sha512-nUKR+lq06gaCvH6vKmfhPe/Kka1Xp7yN1FN5NEx+Yk4+9CyxZ3UJt2eHXedrcz+XCafxExW114ElEDgCahJowg==",
+ "version": "0.1.31",
+ "resolved": "https://registry.npmjs.org/@web/dev-server/-/dev-server-0.1.31.tgz",
+ "integrity": "sha512-FGrnVwnL/pIxak1VZgOgnwcxvP90gx2LmXeU56nvZQ3CWNMAdS1rnQI3jMjMk6FwUt/wnlLk7pl6xGkm6iNwHA==",
"dev": true,
"dependencies": {
"@babel/code-frame": "^7.12.11",
"@types/command-line-args": "^5.0.0",
"@web/config-loader": "^0.1.3",
"@web/dev-server-core": "^0.3.17",
- "@web/dev-server-rollup": "^0.3.13",
+ "@web/dev-server-rollup": "^0.3.16",
"camelcase": "^6.2.0",
"command-line-args": "^5.1.1",
"command-line-usage": "^6.1.1",
@@ -1061,69 +999,6 @@
"node": ">=10.0.0"
}
},
- "node_modules/@web/dev-server-core/node_modules/get-stream": {
- "version": "6.0.1",
- "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz",
- "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==",
- "dev": true,
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/@web/dev-server-core/node_modules/is-stream": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz",
- "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==",
- "dev": true,
- "engines": {
- "node": ">=8"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/@web/dev-server-core/node_modules/lru-cache": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz",
- "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==",
- "dev": true,
- "dependencies": {
- "yallist": "^4.0.0"
- },
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/@web/dev-server-core/node_modules/ws": {
- "version": "7.5.7",
- "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.7.tgz",
- "integrity": "sha512-KMvVuFzpKBuiIXW3E4u3mySRO2/mCHSyZDJQM5NQ9Q9KHWHWh0NHgfbRMLLrceUK5qAL4ytALJbpRMjixFZh8A==",
- "dev": true,
- "engines": {
- "node": ">=8.3.0"
- },
- "peerDependencies": {
- "bufferutil": "^4.0.1",
- "utf-8-validate": "^5.0.2"
- },
- "peerDependenciesMeta": {
- "bufferutil": {
- "optional": true
- },
- "utf-8-validate": {
- "optional": true
- }
- }
- },
- "node_modules/@web/dev-server-core/node_modules/yallist": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
- "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
- "dev": true
- },
"node_modules/@web/dev-server-esbuild": {
"version": "0.3.0",
"resolved": "https://registry.npmjs.org/@web/dev-server-esbuild/-/dev-server-esbuild-0.3.0.tgz",
@@ -1141,12 +1016,12 @@
}
},
"node_modules/@web/dev-server-rollup": {
- "version": "0.3.15",
- "resolved": "https://registry.npmjs.org/@web/dev-server-rollup/-/dev-server-rollup-0.3.15.tgz",
- "integrity": "sha512-hhxvBmNIY19vXeocYB1IBOuhpVpy1L7jbwBarmvC0QJKZsgkxssNTzXJ8iga70c2+H0c/rBz1xUaKuAcov0uOA==",
+ "version": "0.3.17",
+ "resolved": "https://registry.npmjs.org/@web/dev-server-rollup/-/dev-server-rollup-0.3.17.tgz",
+ "integrity": "sha512-Fp8d3QmOi6ctJGAndf93pmcyPBEE7TmsIJ9xd+W+LjXzTVmH4YyOOjZAIXqf9GWjXd0CwquL/OddTZvMzC8jiQ==",
"dev": true,
"dependencies": {
- "@rollup/plugin-node-resolve": "^11.0.1",
+ "@rollup/plugin-node-resolve": "^13.0.4",
"@web/dev-server-core": "^0.3.16",
"nanocolors": "^0.2.1",
"parse5": "^6.0.1",
@@ -1157,52 +1032,6 @@
"node": ">=10.0.0"
}
},
- "node_modules/@web/dev-server-rollup/node_modules/tr46": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/tr46/-/tr46-3.0.0.tgz",
- "integrity": "sha512-l7FvfAHlcmulp8kr+flpQZmVwtu7nfRV7NZujtN0OqES8EL4O4e0qqzL0DC5gAvx/ZC/9lk6rhcUwYvkBnBnYA==",
- "dev": true,
- "dependencies": {
- "punycode": "^2.1.1"
- },
- "engines": {
- "node": ">=12"
- }
- },
- "node_modules/@web/dev-server-rollup/node_modules/webidl-conversions": {
- "version": "7.0.0",
- "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz",
- "integrity": "sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==",
- "dev": true,
- "engines": {
- "node": ">=12"
- }
- },
- "node_modules/@web/dev-server-rollup/node_modules/whatwg-url": {
- "version": "11.0.0",
- "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-11.0.0.tgz",
- "integrity": "sha512-RKT8HExMpoYx4igMiVMY83lN6UeITKJlBQ+vR/8ZJ8OCdSiN3RwCq+9gH0+Xzj0+5IrM6i4j/6LuvzbZIQgEcQ==",
- "dev": true,
- "dependencies": {
- "tr46": "^3.0.0",
- "webidl-conversions": "^7.0.0"
- },
- "engines": {
- "node": ">=12"
- }
- },
- "node_modules/@web/dev-server/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/@web/dev-server/node_modules/open": {
"version": "8.4.0",
"resolved": "https://registry.npmjs.org/open/-/open-8.4.0.tgz",
@@ -1322,22 +1151,10 @@
"node": ">=12.0.0"
}
},
- "node_modules/@web/test-runner-commands/node_modules/mkdirp": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz",
- "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==",
- "dev": true,
- "bin": {
- "mkdirp": "bin/cmd.js"
- },
- "engines": {
- "node": ">=10"
- }
- },
"node_modules/@web/test-runner-core": {
- "version": "0.10.25",
- "resolved": "https://registry.npmjs.org/@web/test-runner-core/-/test-runner-core-0.10.25.tgz",
- "integrity": "sha512-gH8VXyZbwf+sqPiH4cnXYf86SqwBLtou+0LFFCLaDQRbMlrfi5byAISt39fNX2ejd46bF1cZn6DK+mzb/Xjccw==",
+ "version": "0.10.26",
+ "resolved": "https://registry.npmjs.org/@web/test-runner-core/-/test-runner-core-0.10.26.tgz",
+ "integrity": "sha512-HqfweznsH1LVdebAaqn7aMaIUwKeVdBW59f03MsURd/CNV25l0i7kIxkFF+6OTGhjiGJW5pTTzMPHND4oS6YgA==",
"dev": true,
"dependencies": {
"@babel/code-frame": "^7.12.11",
@@ -1388,15 +1205,6 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
- "node_modules/@web/test-runner-core/node_modules/source-map": {
- "version": "0.7.3",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz",
- "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==",
- "dev": true,
- "engines": {
- "node": ">= 8"
- }
- },
"node_modules/@web/test-runner-coverage-v8": {
"version": "0.4.8",
"resolved": "https://registry.npmjs.org/@web/test-runner-coverage-v8/-/test-runner-coverage-v8-0.4.8.tgz",
@@ -1425,50 +1233,23 @@
"node": ">=12.0.0"
}
},
- "node_modules/@web/test-runner/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/@web/test-runner/node_modules/source-map": {
- "version": "0.7.3",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz",
- "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==",
- "dev": true,
- "engines": {
- "node": ">= 8"
- }
- },
- "node_modules/@webcomponents/scoped-custom-element-registry": {
- "version": "0.0.3",
- "resolved": "https://registry.npmjs.org/@webcomponents/scoped-custom-element-registry/-/scoped-custom-element-registry-0.0.3.tgz",
- "integrity": "sha512-lpSzgDCGbM99dytb3+J3Suo4+Bk1E13MPnWB42JK8GwxSAxFz+tC7TTv2hhDSIE2IirGNKNKCf3m08ecu6eAsQ==",
- "dev": true
- },
"node_modules/accepts": {
- "version": "1.3.7",
- "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz",
- "integrity": "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==",
+ "version": "1.3.8",
+ "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz",
+ "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==",
"dev": true,
"dependencies": {
- "mime-types": "~2.1.24",
- "negotiator": "0.6.2"
+ "mime-types": "~2.1.34",
+ "negotiator": "0.6.3"
},
"engines": {
"node": ">= 0.6"
}
},
"node_modules/acorn": {
- "version": "8.7.0",
- "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.7.0.tgz",
- "integrity": "sha512-V/LGr1APy+PXIwKebEWrkZPwoeoF+w1jiOBUmuxuiUIaOHtob8Qc9BTrYo7VuI5fR8tqsy+buA2WFooR5olqvQ==",
+ "version": "8.7.1",
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.7.1.tgz",
+ "integrity": "sha512-Xx54uLJQZ19lKygFXOWsscKUbsBZW0CPykPhVQdhIeIwrbPmJzqeASDInc8nKBnp/JT6igTs82qPXz069H8I/A==",
"dev": true,
"bin": {
"acorn": "bin/acorn"
@@ -1515,80 +1296,44 @@
}
},
"node_modules/ansi-align": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-3.0.0.tgz",
- "integrity": "sha512-ZpClVKqXN3RGBmKibdfWzqCY4lnjEuoNzU5T0oEFpfd/z5qJHVarukridD4juLO2FXMiwUQxr9WqQtaYa8XRYw==",
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-3.0.1.tgz",
+ "integrity": "sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w==",
"dev": true,
"dependencies": {
- "string-width": "^3.0.0"
- }
- },
- "node_modules/ansi-align/node_modules/ansi-regex": {
- "version": "4.1.1",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.1.tgz",
- "integrity": "sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==",
- "dev": true,
- "engines": {
- "node": ">=6"
+ "string-width": "^4.1.0"
}
},
- "node_modules/ansi-align/node_modules/emoji-regex": {
- "version": "7.0.3",
- "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz",
- "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==",
- "dev": true
- },
"node_modules/ansi-align/node_modules/string-width": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz",
- "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==",
+ "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": "^7.0.1",
- "is-fullwidth-code-point": "^2.0.0",
- "strip-ansi": "^5.1.0"
+ "emoji-regex": "^8.0.0",
+ "is-fullwidth-code-point": "^3.0.0",
+ "strip-ansi": "^6.0.1"
},
"engines": {
- "node": ">=6"
+ "node": ">=8"
}
},
- "node_modules/ansi-align/node_modules/strip-ansi": {
- "version": "5.2.0",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz",
- "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==",
+ "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,
- "dependencies": {
- "ansi-regex": "^4.1.0"
- },
"engines": {
"node": ">=6"
}
},
"node_modules/ansi-escapes": {
- "version": "4.3.1",
- "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.1.tgz",
- "integrity": "sha512-JWF7ocqNrp8u9oqpgV+wH5ftbt+cfvv+PTjOvKLT3AdYly/LmORARfEVT1iyjwN+4MqE5UmVKoAdIBqeoCHgLA==",
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.2.0.tgz",
+ "integrity": "sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ==",
"dev": true,
- "dependencies": {
- "type-fest": "^0.11.0"
- },
"engines": {
- "node": ">=8"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/ansi-escapes/node_modules/type-fest": {
- "version": "0.11.0",
- "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.11.0.tgz",
- "integrity": "sha512-OdjXJxnCN1AvyLSzeKIgXTXxV+99ZuXl3Hpo9XpJAv9MBcHrrJOQ5kV7ypXOuQie+AmWG25hLbiKdwYTifzcfQ==",
- "dev": true,
- "engines": {
- "node": ">=8"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
+ "node": ">=4"
}
},
"node_modules/ansi-regex": {
@@ -1650,14 +1395,14 @@
"dev": true
},
"node_modules/array-includes": {
- "version": "3.1.4",
- "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.4.tgz",
- "integrity": "sha512-ZTNSQkmWumEbiHO2GF4GmWxYVTiQyJy2XOTa15sdQSrvKn7l+180egQMqlrMOUMCyLMD7pmyQe4mMDUT6Behrw==",
+ "version": "3.1.5",
+ "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.5.tgz",
+ "integrity": "sha512-iSDYZMMyTPkiFasVqfuAQnWAYcvO/SeBSCGKePoEthjp4LEMTe4uLc7b025o4jAZpHhihh8xPo99TNWUWWkGDQ==",
"dev": true,
"dependencies": {
"call-bind": "^1.0.2",
- "define-properties": "^1.1.3",
- "es-abstract": "^1.19.1",
+ "define-properties": "^1.1.4",
+ "es-abstract": "^1.19.5",
"get-intrinsic": "^1.1.1",
"is-string": "^1.0.7"
},
@@ -1678,14 +1423,15 @@
}
},
"node_modules/array.prototype.flat": {
- "version": "1.2.5",
- "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.2.5.tgz",
- "integrity": "sha512-KaYU+S+ndVqyUnignHftkwc58o3uVU1jzczILJ1tN2YaIZpFIKBiP/x/j97E5MVPsaCloPbqWLB/8qCTVvT2qg==",
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.0.tgz",
+ "integrity": "sha512-12IUEkHsAhA4DY5s0FPgNXIdc8VRSqD9Zp78a5au9abH/SOBrsp082JOWFNTjkMozh8mqcdiKuaLGhPeYztxSw==",
"dev": true,
"dependencies": {
"call-bind": "^1.0.2",
"define-properties": "^1.1.3",
- "es-abstract": "^1.19.0"
+ "es-abstract": "^1.19.2",
+ "es-shim-unscopables": "^1.0.0"
},
"engines": {
"node": ">= 0.4"
@@ -1694,24 +1440,6 @@
"url": "https://github.com/sponsors/ljharb"
}
},
- "node_modules/asn1": {
- "version": "0.2.4",
- "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz",
- "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==",
- "dev": true,
- "dependencies": {
- "safer-buffer": "~2.1.0"
- }
- },
- "node_modules/assert-plus": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz",
- "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=",
- "dev": true,
- "engines": {
- "node": ">=0.8"
- }
- },
"node_modules/astral-regex": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz",
@@ -1730,46 +1458,19 @@
"lodash": "^4.17.14"
}
},
- "node_modules/async-limiter": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.1.tgz",
- "integrity": "sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ==",
- "dev": true
- },
- "node_modules/asynckit": {
- "version": "0.4.0",
- "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
- "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=",
- "dev": true
- },
- "node_modules/aws-sign2": {
- "version": "0.7.0",
- "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz",
- "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=",
- "dev": true,
- "engines": {
- "node": "*"
- }
- },
- "node_modules/aws4": {
- "version": "1.11.0",
- "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.11.0.tgz",
- "integrity": "sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA==",
- "dev": true
- },
"node_modules/axe-core": {
- "version": "4.1.1",
- "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.1.1.tgz",
- "integrity": "sha512-5Kgy8Cz6LPC9DJcNb3yjAXTu3XihQgEdnIg50c//zOC/MyLP0Clg+Y8Sh9ZjjnvBrDZU4DgXS9C3T9r4/scGZQ==",
+ "version": "4.4.1",
+ "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.4.1.tgz",
+ "integrity": "sha512-gd1kmb21kwNuWr6BQz8fv6GNECPBnUasepcoLbekws23NVBLODdsClRZ+bQ8+9Uomf3Sm3+Vwn0oYG9NvwnJCw==",
"dev": true,
"engines": {
"node": ">=4"
}
},
"node_modules/balanced-match": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz",
- "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=",
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
+ "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==",
"dev": true
},
"node_modules/base64-js": {
@@ -1792,19 +1493,10 @@
}
]
},
- "node_modules/bcrypt-pbkdf": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz",
- "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=",
- "dev": true,
- "dependencies": {
- "tweetnacl": "^0.14.3"
- }
- },
"node_modules/binary-extensions": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.1.0.tgz",
- "integrity": "sha512-1Yj8h9Q+QDF5FzhMs/c9+6UntbD5MkRfRwac8DoEm9ZfUBZ7tZ55YcGVAzEe4bXsdQHEk+s9S5wsOKVdZrw0tQ==",
+ "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"
@@ -1821,37 +1513,35 @@
"readable-stream": "^3.4.0"
}
},
- "node_modules/bl/node_modules/readable-stream": {
- "version": "3.6.0",
- "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz",
- "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==",
- "dev": true,
- "dependencies": {
- "inherits": "^2.0.3",
- "string_decoder": "^1.1.1",
- "util-deprecate": "^1.0.1"
- },
- "engines": {
- "node": ">= 6"
- }
- },
"node_modules/body-parser": {
- "version": "1.19.0",
- "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.0.tgz",
- "integrity": "sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw==",
+ "version": "1.20.0",
+ "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.0.tgz",
+ "integrity": "sha512-DfJ+q6EPcGKZD1QWUjSpqp+Q7bDQTsQIF4zfUAtZ6qk+H/3/QRhg9CEp39ss+/T2vw0+HaidC0ecJj/DRLIaKg==",
"dev": true,
"dependencies": {
- "bytes": "3.1.0",
+ "bytes": "3.1.2",
"content-type": "~1.0.4",
"debug": "2.6.9",
- "depd": "~1.1.2",
- "http-errors": "1.7.2",
+ "depd": "2.0.0",
+ "destroy": "1.2.0",
+ "http-errors": "2.0.0",
"iconv-lite": "0.4.24",
- "on-finished": "~2.3.0",
- "qs": "6.7.0",
- "raw-body": "2.4.0",
- "type-is": "~1.6.17"
+ "on-finished": "2.4.1",
+ "qs": "6.10.3",
+ "raw-body": "2.5.1",
+ "type-is": "~1.6.18",
+ "unpipe": "1.0.0"
},
+ "engines": {
+ "node": ">= 0.8",
+ "npm": "1.2.8000 || >= 1.4.16"
+ }
+ },
+ "node_modules/body-parser/node_modules/bytes": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz",
+ "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==",
+ "dev": true,
"engines": {
"node": ">= 0.8"
}
@@ -1872,92 +1562,90 @@
"dev": true
},
"node_modules/boxen": {
- "version": "4.2.0",
- "resolved": "https://registry.npmjs.org/boxen/-/boxen-4.2.0.tgz",
- "integrity": "sha512-eB4uT9RGzg2odpER62bBwSLvUeGC+WbRjjyyFhGsKnc8wp/m0+hQsMUvUe3H2V0D5vw0nBdO1hCJoZo5mKeuIQ==",
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/boxen/-/boxen-3.2.0.tgz",
+ "integrity": "sha512-cU4J/+NodM3IHdSL2yN8bqYqnmlBTidDR4RC7nJs61ZmtGz8VZzM3HLQX0zY5mrSmPtR3xWwsq2jOUQqFZN8+A==",
"dev": true,
"dependencies": {
"ansi-align": "^3.0.0",
"camelcase": "^5.3.1",
- "chalk": "^3.0.0",
+ "chalk": "^2.4.2",
"cli-boxes": "^2.2.0",
- "string-width": "^4.1.0",
- "term-size": "^2.1.0",
- "type-fest": "^0.8.1",
- "widest-line": "^3.1.0"
+ "string-width": "^3.0.0",
+ "term-size": "^1.2.0",
+ "type-fest": "^0.3.0",
+ "widest-line": "^2.0.0"
},
"engines": {
- "node": ">=8"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
+ "node": ">=6"
}
},
- "node_modules/boxen/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==",
+ "node_modules/boxen/node_modules/ansi-regex": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.1.tgz",
+ "integrity": "sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==",
"dev": true,
- "dependencies": {
- "color-convert": "^2.0.1"
- },
"engines": {
- "node": ">=8"
- },
- "funding": {
- "url": "https://github.com/chalk/ansi-styles?sponsor=1"
+ "node": ">=6"
}
},
- "node_modules/boxen/node_modules/chalk": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz",
- "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==",
+ "node_modules/boxen/node_modules/camelcase": {
+ "version": "5.3.1",
+ "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz",
+ "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==",
"dev": true,
- "dependencies": {
- "ansi-styles": "^4.1.0",
- "supports-color": "^7.1.0"
- },
"engines": {
- "node": ">=8"
+ "node": ">=6"
}
},
- "node_modules/boxen/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==",
+ "node_modules/boxen/node_modules/emoji-regex": {
+ "version": "7.0.3",
+ "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz",
+ "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==",
+ "dev": true
+ },
+ "node_modules/boxen/node_modules/is-fullwidth-code-point": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz",
+ "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=",
"dev": true,
- "dependencies": {
- "color-name": "~1.1.4"
- },
"engines": {
- "node": ">=7.0.0"
+ "node": ">=4"
}
},
- "node_modules/boxen/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/boxen/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==",
+ "node_modules/boxen/node_modules/string-width": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz",
+ "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==",
"dev": true,
+ "dependencies": {
+ "emoji-regex": "^7.0.1",
+ "is-fullwidth-code-point": "^2.0.0",
+ "strip-ansi": "^5.1.0"
+ },
"engines": {
- "node": ">=8"
+ "node": ">=6"
}
},
- "node_modules/boxen/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==",
+ "node_modules/boxen/node_modules/strip-ansi": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz",
+ "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==",
"dev": true,
"dependencies": {
- "has-flag": "^4.0.0"
+ "ansi-regex": "^4.1.0"
},
"engines": {
- "node": ">=8"
+ "node": ">=6"
+ }
+ },
+ "node_modules/boxen/node_modules/type-fest": {
+ "version": "0.3.1",
+ "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.3.1.tgz",
+ "integrity": "sha512-cUGJnCdr4STbePCgqNFbpVNCepa+kAVohJs1sLhxzdH+gnEoOd8VhbYa7pD3zZYGiURWM2xzEII3fQcRizDkYQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=6"
}
},
"node_modules/brace-expansion": {
@@ -1983,9 +1671,9 @@
}
},
"node_modules/browserslist": {
- "version": "4.20.2",
- "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.20.2.tgz",
- "integrity": "sha512-CQOBCqp/9pDvDbx3xfMi+86pr4KXIf2FDkTTdeuYw8OxS9t898LA1Khq57gtufFILXpfgsSx5woNgsBgvGjpsA==",
+ "version": "4.20.3",
+ "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.20.3.tgz",
+ "integrity": "sha512-NBhymBQl1zM0Y5dQT/O+xiLP9/rzOIQdKM/eMJBAq7yBgaB6krIYLGejrwVYnSHZdqjscB1SPuAjHwxjvN6Wdg==",
"dev": true,
"funding": [
{
@@ -1998,10 +1686,10 @@
}
],
"dependencies": {
- "caniuse-lite": "^1.0.30001317",
- "electron-to-chromium": "^1.4.84",
+ "caniuse-lite": "^1.0.30001332",
+ "electron-to-chromium": "^1.4.118",
"escalade": "^3.1.1",
- "node-releases": "^2.0.2",
+ "node-releases": "^2.0.3",
"picocolors": "^1.0.0"
},
"bin": {
@@ -2057,9 +1745,9 @@
}
},
"node_modules/bytes": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz",
- "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==",
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz",
+ "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=",
"dev": true,
"engines": {
"node": ">= 0.8"
@@ -2152,18 +1840,21 @@
}
},
"node_modules/camelcase": {
- "version": "5.3.1",
- "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz",
- "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==",
+ "version": "6.3.0",
+ "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz",
+ "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==",
"dev": true,
"engines": {
- "node": ">=6"
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
}
},
"node_modules/caniuse-lite": {
- "version": "1.0.30001320",
- "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001320.tgz",
- "integrity": "sha512-MWPzG54AGdo3nWx7zHZTefseM5Y1ccM7hlQKHRqJkPozUaw3hNbBTMmLn16GG2FUzjR13Cr3NPfhIieX5PzXDA==",
+ "version": "1.0.30001338",
+ "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001338.tgz",
+ "integrity": "sha512-1gLHWyfVoRDsHieO+CaeYe7jSo/MT7D7lhaXUiwwbuR5BwQxORs0f1tAwUSQr3YbxRXJvxHM/PA5FfPQRnsPeQ==",
"dev": true,
"funding": [
{
@@ -2176,18 +1867,6 @@
}
]
},
- "node_modules/canonicalize": {
- "version": "1.0.5",
- "resolved": "https://registry.npmjs.org/canonicalize/-/canonicalize-1.0.5.tgz",
- "integrity": "sha512-mAjKJPIyP0xqqv6IAkvso07StOmz6cmGtNDg3pXCSzXVZOqka7StIkAhJl/zHOi4M2CgpYfD6aeRWbnrmtvBEA==",
- "dev": true
- },
- "node_modules/caseless": {
- "version": "0.12.0",
- "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz",
- "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=",
- "dev": true
- },
"node_modules/chai-a11y-axe": {
"version": "1.4.0",
"resolved": "https://registry.npmjs.org/chai-a11y-axe/-/chai-a11y-axe-1.4.0.tgz",
@@ -2197,83 +1876,18 @@
"axe-core": "^4.3.3"
}
},
- "node_modules/chai-a11y-axe/node_modules/axe-core": {
- "version": "4.4.1",
- "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.4.1.tgz",
- "integrity": "sha512-gd1kmb21kwNuWr6BQz8fv6GNECPBnUasepcoLbekws23NVBLODdsClRZ+bQ8+9Uomf3Sm3+Vwn0oYG9NvwnJCw==",
- "dev": true,
- "engines": {
- "node": ">=4"
- }
- },
"node_modules/chalk": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz",
- "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==",
- "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/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/chalk/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/chalk/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/chalk/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/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==",
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
+ "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
"dev": true,
"dependencies": {
- "has-flag": "^4.0.0"
+ "ansi-styles": "^3.2.1",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^5.3.0"
},
"engines": {
- "node": ">=8"
+ "node": ">=4"
}
},
"node_modules/chardet": {
@@ -2338,19 +1952,16 @@
"rimraf": "^3.0.2"
}
},
- "node_modules/chrome-launcher/node_modules/rimraf": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz",
- "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==",
+ "node_modules/chrome-launcher/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": {
- "glob": "^7.1.3"
+ "minimist": "^1.2.6"
},
"bin": {
- "rimraf": "bin.js"
- },
- "funding": {
- "url": "https://github.com/sponsors/isaacs"
+ "mkdirp": "bin/cmd.js"
}
},
"node_modules/ci-info": {
@@ -2390,13 +2001,10 @@
}
},
"node_modules/cli-width": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-3.0.0.tgz",
- "integrity": "sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==",
- "dev": true,
- "engines": {
- "node": ">= 10"
- }
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-2.2.1.tgz",
+ "integrity": "sha512-GRMWDxpOB6Dgk2E5Uo+3eEBvtOOlimMmpbFiKuLFnQzYDavtLFY3K5ona41jgN/WdRZtG7utuVSVTL4HbZHGkw==",
+ "dev": true
},
"node_modules/cliui": {
"version": "6.0.0",
@@ -2409,6 +2017,20 @@
"wrap-ansi": "^6.2.0"
}
},
+ "node_modules/cliui/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/clone": {
"version": "2.1.2",
"resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz",
@@ -2464,18 +2086,6 @@
"integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=",
"dev": true
},
- "node_modules/combined-stream": {
- "version": "1.0.8",
- "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz",
- "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==",
- "dev": true,
- "dependencies": {
- "delayed-stream": "~1.0.0"
- },
- "engines": {
- "node": ">= 0.8"
- }
- },
"node_modules/command-line-args": {
"version": "5.2.1",
"resolved": "https://registry.npmjs.org/command-line-args/-/command-line-args-5.2.1.tgz",
@@ -2492,14 +2102,14 @@
}
},
"node_modules/command-line-usage": {
- "version": "6.1.2",
- "resolved": "https://registry.npmjs.org/command-line-usage/-/command-line-usage-6.1.2.tgz",
- "integrity": "sha512-I+0XN613reAhpBQ6icsPOTwu9cvhc9NtLtUcY2fGYuwm9JZiWBzFDA8w0PHqQjru7Xth7fM/y9TJ13+VKdjh7Q==",
+ "version": "6.1.3",
+ "resolved": "https://registry.npmjs.org/command-line-usage/-/command-line-usage-6.1.3.tgz",
+ "integrity": "sha512-sH5ZSPr+7UStsloltmDh7Ce5fb8XPlHyoPzTpyyMuYCtervL65+ubVZ6Q61cFtFl62UyJlc8/JwERRbAFPUqgw==",
"dev": true,
"dependencies": {
- "array-back": "^4.0.1",
+ "array-back": "^4.0.2",
"chalk": "^2.4.2",
- "table-layout": "^1.0.1",
+ "table-layout": "^1.0.2",
"typical": "^5.2.0"
},
"engines": {
@@ -2515,20 +2125,6 @@
"node": ">=8"
}
},
- "node_modules/command-line-usage/node_modules/chalk": {
- "version": "2.4.2",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
- "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
- "dev": true,
- "dependencies": {
- "ansi-styles": "^3.2.1",
- "escape-string-regexp": "^1.0.5",
- "supports-color": "^5.3.0"
- },
- "engines": {
- "node": ">=4"
- }
- },
"node_modules/command-line-usage/node_modules/typical": {
"version": "5.2.0",
"resolved": "https://registry.npmjs.org/typical/-/typical-5.2.0.tgz",
@@ -2568,15 +2164,6 @@
"node": ">= 0.8.0"
}
},
- "node_modules/compression/node_modules/bytes": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz",
- "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=",
- "dev": true,
- "engines": {
- "node": ">= 0.8"
- }
- },
"node_modules/compression/node_modules/debug": {
"version": "2.6.9",
"resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
@@ -2592,12 +2179,6 @@
"integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
"dev": true
},
- "node_modules/compression/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/concat-map": {
"version": "0.0.1",
"resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
@@ -2622,22 +2203,36 @@
}
},
"node_modules/content-disposition": {
- "version": "0.5.3",
- "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.3.tgz",
- "integrity": "sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g==",
+ "version": "0.5.4",
+ "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz",
+ "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==",
"dev": true,
"dependencies": {
- "safe-buffer": "5.1.2"
+ "safe-buffer": "5.2.1"
},
"engines": {
"node": ">= 0.6"
}
},
"node_modules/content-disposition/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
+ "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/content-type": {
"version": "1.0.4",
@@ -2657,16 +2252,10 @@
"safe-buffer": "~5.1.1"
}
},
- "node_modules/convert-source-map/node_modules/safe-buffer": {
- "version": "5.1.2",
- "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
- "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
- "dev": true
- },
"node_modules/cookie": {
- "version": "0.3.1",
- "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.3.1.tgz",
- "integrity": "sha1-5+Ch+e9DtMi6klxcWpboBtFoc7s=",
+ "version": "0.5.0",
+ "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz",
+ "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==",
"dev": true,
"engines": {
"node": ">= 0.6"
@@ -2691,21 +2280,6 @@
"node": ">= 0.8"
}
},
- "node_modules/cookies/node_modules/depd": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz",
- "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==",
- "dev": true,
- "engines": {
- "node": ">= 0.8"
- }
- },
- "node_modules/core-util-is": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
- "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=",
- "dev": true
- },
"node_modules/cross-fetch": {
"version": "3.1.5",
"resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.1.5.tgz",
@@ -2747,6 +2321,12 @@
"node": ">=8"
}
},
+ "node_modules/csp_evaluator": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/csp_evaluator/-/csp_evaluator-1.1.0.tgz",
+ "integrity": "sha512-TcB+ZH9wZBG314jAUpKHPl1oYbRJV+nAT2YwZ9y4fmUN0FkEJa8e/hKZoOgzLYp1Z/CJdFhbhhGIGh0XG8W54Q==",
+ "dev": true
+ },
"node_modules/cssom": {
"version": "0.3.8",
"resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.8.tgz",
@@ -2762,18 +2342,6 @@
"cssom": "0.3.x"
}
},
- "node_modules/dashdash": {
- "version": "1.14.1",
- "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz",
- "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=",
- "dev": true,
- "dependencies": {
- "assert-plus": "^1.0.0"
- },
- "engines": {
- "node": ">=0.10"
- }
- },
"node_modules/debounce": {
"version": "1.2.1",
"resolved": "https://registry.npmjs.org/debounce/-/debounce-1.2.1.tgz",
@@ -2834,9 +2402,9 @@
}
},
"node_modules/deep-is": {
- "version": "0.1.3",
- "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz",
- "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=",
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz",
+ "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==",
"dev": true
},
"node_modules/deepmerge": {
@@ -2864,24 +2432,19 @@
}
},
"node_modules/define-properties": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz",
- "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==",
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.4.tgz",
+ "integrity": "sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA==",
"dev": true,
"dependencies": {
- "object-keys": "^1.0.12"
+ "has-property-descriptors": "^1.0.0",
+ "object-keys": "^1.1.1"
},
"engines": {
"node": ">= 0.4"
- }
- },
- "node_modules/delayed-stream": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
- "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=",
- "dev": true,
- "engines": {
- "node": ">=0.4.0"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
}
},
"node_modules/delegates": {
@@ -2891,12 +2454,12 @@
"dev": true
},
"node_modules/depd": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz",
- "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=",
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz",
+ "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==",
"dev": true,
"engines": {
- "node": ">= 0.6"
+ "node": ">= 0.8"
}
},
"node_modules/dependency-graph": {
@@ -2909,21 +2472,19 @@
}
},
"node_modules/destroy": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz",
- "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=",
- "dev": true
- },
- "node_modules/details-element-polyfill": {
- "version": "2.4.0",
- "resolved": "https://registry.npmjs.org/details-element-polyfill/-/details-element-polyfill-2.4.0.tgz",
- "integrity": "sha512-jnZ/m0+b1gz3EcooitqL7oDEkKHEro659dt8bWB/T/HjiILucoQhHvvi5MEOAIFJXxxO+rIYJ/t3qCgfUOSU5g==",
- "dev": true
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz",
+ "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==",
+ "dev": true,
+ "engines": {
+ "node": ">= 0.8",
+ "npm": "1.2.8000 || >= 1.4.16"
+ }
},
"node_modules/devtools-protocol": {
- "version": "0.0.969999",
- "resolved": "https://registry.npmjs.org/devtools-protocol/-/devtools-protocol-0.0.969999.tgz",
- "integrity": "sha512-6GfzuDWU0OFAuOvBokXpXPLxjOJ5DZ157Ue3sGQQM3LgAamb8m0R0ruSfN0DDu+XG5XJgT50i6zZ/0o8RglreQ==",
+ "version": "0.0.981744",
+ "resolved": "https://registry.npmjs.org/devtools-protocol/-/devtools-protocol-0.0.981744.tgz",
+ "integrity": "sha512-0cuGS8+jhR67Fy7qG3i3Pc7Aw494sb9yG9QgpG97SFVWwolgYjlhJg7n+UaHxOQT30d1TYu/EYe9k01ivLErIg==",
"dev": true
},
"node_modules/diff": {
@@ -2977,16 +2538,6 @@
"integrity": "sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=",
"dev": true
},
- "node_modules/ecc-jsbn": {
- "version": "0.1.2",
- "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz",
- "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=",
- "dev": true,
- "dependencies": {
- "jsbn": "~0.1.0",
- "safer-buffer": "^2.1.0"
- }
- },
"node_modules/ee-first": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz",
@@ -2994,9 +2545,9 @@
"dev": true
},
"node_modules/electron-to-chromium": {
- "version": "1.4.96",
- "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.96.tgz",
- "integrity": "sha512-DPNjvNGPabv6FcyjzLAN4C0psN/GgD9rSGvMTuv81SeXG/EX3mCz0wiw9N1tUEnfQXYCJi3H8M0oFPRziZh7rw==",
+ "version": "1.4.136",
+ "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.136.tgz",
+ "integrity": "sha512-GnITX8rHnUrIVnTxU9UlsTnSemHUA2iF+6QrRqxFbp/mf0vfuSc/goEyyQhUX3TUUCE3mv/4BNuXOtaJ4ur0eA==",
"dev": true
},
"node_modules/emoji-regex": {
@@ -3023,6 +2574,18 @@
"once": "^1.4.0"
}
},
+ "node_modules/enquirer": {
+ "version": "2.3.6",
+ "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz",
+ "integrity": "sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==",
+ "dev": true,
+ "dependencies": {
+ "ansi-colors": "^4.1.1"
+ },
+ "engines": {
+ "node": ">=8.6"
+ }
+ },
"node_modules/errorstacks": {
"version": "2.4.0",
"resolved": "https://registry.npmjs.org/errorstacks/-/errorstacks-2.4.0.tgz",
@@ -3030,31 +2593,34 @@
"dev": true
},
"node_modules/es-abstract": {
- "version": "1.19.1",
- "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.19.1.tgz",
- "integrity": "sha512-2vJ6tjA/UfqLm2MPs7jxVybLoB8i1t1Jd9R3kISld20sIxPcTbLuggQOUxeWeAvIUkduv/CfMjuh4WmiXr2v9w==",
+ "version": "1.20.0",
+ "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.20.0.tgz",
+ "integrity": "sha512-URbD8tgRthKD3YcC39vbvSDrX23upXnPcnGAjQfgxXF5ID75YcENawc9ZX/9iTP9ptUyfCLIxTTuMYoRfiOVKA==",
"dev": true,
"dependencies": {
"call-bind": "^1.0.2",
"es-to-primitive": "^1.2.1",
"function-bind": "^1.1.1",
+ "function.prototype.name": "^1.1.5",
"get-intrinsic": "^1.1.1",
"get-symbol-description": "^1.0.0",
"has": "^1.0.3",
- "has-symbols": "^1.0.2",
+ "has-property-descriptors": "^1.0.0",
+ "has-symbols": "^1.0.3",
"internal-slot": "^1.0.3",
"is-callable": "^1.2.4",
- "is-negative-zero": "^2.0.1",
+ "is-negative-zero": "^2.0.2",
"is-regex": "^1.1.4",
- "is-shared-array-buffer": "^1.0.1",
+ "is-shared-array-buffer": "^1.0.2",
"is-string": "^1.0.7",
- "is-weakref": "^1.0.1",
- "object-inspect": "^1.11.0",
+ "is-weakref": "^1.0.2",
+ "object-inspect": "^1.12.0",
"object-keys": "^1.1.1",
"object.assign": "^4.1.2",
- "string.prototype.trimend": "^1.0.4",
- "string.prototype.trimstart": "^1.0.4",
- "unbox-primitive": "^1.0.1"
+ "regexp.prototype.flags": "^1.4.1",
+ "string.prototype.trimend": "^1.0.5",
+ "string.prototype.trimstart": "^1.0.5",
+ "unbox-primitive": "^1.0.2"
},
"engines": {
"node": ">= 0.4"
@@ -3069,6 +2635,15 @@
"integrity": "sha512-1HQ2M2sPtxwnvOvT1ZClHyQDiggdNjURWpY2we6aMKCQiUVxTmVs2UYPLIrD84sS+kMdUwfBSylbJPwNnBrnHQ==",
"dev": true
},
+ "node_modules/es-shim-unscopables": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.0.tgz",
+ "integrity": "sha512-Jm6GPcCdC30eMLbZ2x8z2WuRwAws3zTBBKuusffYVUrNj/GVSUAZ+xKMaUpfNDR5IbyNA5LJbaecoUVbmUcB1w==",
+ "dev": true,
+ "dependencies": {
+ "has": "^1.0.3"
+ }
+ },
"node_modules/es-to-primitive": {
"version": "1.2.1",
"resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz",
@@ -3450,15 +3025,6 @@
"node": ">=6"
}
},
- "node_modules/escape-goat": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/escape-goat/-/escape-goat-2.1.1.tgz",
- "integrity": "sha512-8/uIhbG12Csjy2JEW7D9pHbreaVaS/OpN3ycnyvElTdwM5n6GY6W6e2IPemfvGZeUMqZ9A/3GqIZMgKnBhAw/Q==",
- "dev": true,
- "engines": {
- "node": ">=8"
- }
- },
"node_modules/escape-html": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz",
@@ -3475,12 +3041,12 @@
}
},
"node_modules/eslint": {
- "version": "8.12.0",
- "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.12.0.tgz",
- "integrity": "sha512-it1oBL9alZg1S8UycLm5YDMAkIhtH6FtAzuZs6YvoGVldWjbS08BkAdb/ymP9LlAyq8koANu32U7Ib/w+UNh8Q==",
+ "version": "8.14.0",
+ "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.14.0.tgz",
+ "integrity": "sha512-3/CE4aJX7LNEiE3i6FeodHmI/38GZtWCsAtsymScmzYapx8q1nVVb+eLcLSzATmCPXw5pT4TqVs1E0OmxAd9tw==",
"dev": true,
"dependencies": {
- "@eslint/eslintrc": "^1.2.1",
+ "@eslint/eslintrc": "^1.2.2",
"@humanwhocodes/config-array": "^0.9.2",
"ajv": "^6.10.0",
"chalk": "^4.0.0",
@@ -3662,9 +3228,9 @@
}
},
"node_modules/eslint-plugin-import": {
- "version": "2.25.4",
- "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.25.4.tgz",
- "integrity": "sha512-/KJBASVFxpu0xg1kIBn9AUa8hQVnszpwgE7Ld0lKAlx7Ie87yzEzCgSkekt+le/YVhiaosO4Y14GDAOc41nfxA==",
+ "version": "2.26.0",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.26.0.tgz",
+ "integrity": "sha512-hYfi3FXaM8WPLf4S1cikh/r4IxnO6zrhZbEGz2b660EJRbuxgpDS5gkCuYgGWg2xxh2rBuIr4Pvhve/7c31koA==",
"dev": true,
"dependencies": {
"array-includes": "^3.1.4",
@@ -3672,14 +3238,14 @@
"debug": "^2.6.9",
"doctrine": "^2.1.0",
"eslint-import-resolver-node": "^0.3.6",
- "eslint-module-utils": "^2.7.2",
+ "eslint-module-utils": "^2.7.3",
"has": "^1.0.3",
- "is-core-module": "^2.8.0",
+ "is-core-module": "^2.8.1",
"is-glob": "^4.0.3",
- "minimatch": "^3.0.4",
+ "minimatch": "^3.1.2",
"object.values": "^1.1.5",
- "resolve": "^1.20.0",
- "tsconfig-paths": "^3.12.0"
+ "resolve": "^1.22.0",
+ "tsconfig-paths": "^3.14.1"
},
"engines": {
"node": ">=4"
@@ -3803,12 +3369,61 @@
"node": "^12.22.0 || ^14.17.0 || >=16.0.0"
}
},
+ "node_modules/eslint/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/eslint/node_modules/argparse": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz",
"integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==",
"dev": true
},
+ "node_modules/eslint/node_modules/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/eslint/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/eslint/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/eslint/node_modules/escape-string-regexp": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz",
@@ -3855,6 +3470,15 @@
"node": ">=10.13.0"
}
},
+ "node_modules/eslint/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/eslint/node_modules/js-yaml": {
"version": "4.1.0",
"resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz",
@@ -3867,6 +3491,18 @@
"js-yaml": "bin/js-yaml.js"
}
},
+ "node_modules/eslint/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/espree": {
"version": "9.3.1",
"resolved": "https://registry.npmjs.org/espree/-/espree-9.3.1.tgz",
@@ -3907,9 +3543,9 @@
}
},
"node_modules/esquery/node_modules/estraverse": {
- "version": "5.2.0",
- "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz",
- "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==",
+ "version": "5.3.0",
+ "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz",
+ "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==",
"dev": true,
"engines": {
"node": ">=4.0"
@@ -4007,6 +3643,25 @@
"node": ">=4"
}
},
+ "node_modules/execa/node_modules/is-stream": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz",
+ "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/execa/node_modules/lru-cache": {
+ "version": "4.1.5",
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz",
+ "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==",
+ "dev": true,
+ "dependencies": {
+ "pseudomap": "^1.0.2",
+ "yallist": "^2.1.2"
+ }
+ },
"node_modules/execa/node_modules/shebang-command": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz",
@@ -4040,39 +3695,46 @@
"which": "bin/which"
}
},
- "node_modules/express": {
- "version": "4.17.1",
- "resolved": "https://registry.npmjs.org/express/-/express-4.17.1.tgz",
- "integrity": "sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g==",
- "dev": true,
- "dependencies": {
- "accepts": "~1.3.7",
+ "node_modules/execa/node_modules/yallist": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz",
+ "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=",
+ "dev": true
+ },
+ "node_modules/express": {
+ "version": "4.18.1",
+ "resolved": "https://registry.npmjs.org/express/-/express-4.18.1.tgz",
+ "integrity": "sha512-zZBcOX9TfehHQhtupq57OF8lFZ3UZi08Y97dwFCkD8p9d/d2Y3M+ykKcwaMDEL+4qyUolgBDX6AblpR3fL212Q==",
+ "dev": true,
+ "dependencies": {
+ "accepts": "~1.3.8",
"array-flatten": "1.1.1",
- "body-parser": "1.19.0",
- "content-disposition": "0.5.3",
+ "body-parser": "1.20.0",
+ "content-disposition": "0.5.4",
"content-type": "~1.0.4",
- "cookie": "0.4.0",
+ "cookie": "0.5.0",
"cookie-signature": "1.0.6",
"debug": "2.6.9",
- "depd": "~1.1.2",
+ "depd": "2.0.0",
"encodeurl": "~1.0.2",
"escape-html": "~1.0.3",
"etag": "~1.8.1",
- "finalhandler": "~1.1.2",
+ "finalhandler": "1.2.0",
"fresh": "0.5.2",
+ "http-errors": "2.0.0",
"merge-descriptors": "1.0.1",
"methods": "~1.1.2",
- "on-finished": "~2.3.0",
+ "on-finished": "2.4.1",
"parseurl": "~1.3.3",
"path-to-regexp": "0.1.7",
- "proxy-addr": "~2.0.5",
- "qs": "6.7.0",
+ "proxy-addr": "~2.0.7",
+ "qs": "6.10.3",
"range-parser": "~1.2.1",
- "safe-buffer": "5.1.2",
- "send": "0.17.1",
- "serve-static": "1.14.1",
- "setprototypeof": "1.1.1",
- "statuses": "~1.5.0",
+ "safe-buffer": "5.2.1",
+ "send": "0.18.0",
+ "serve-static": "1.15.0",
+ "setprototypeof": "1.2.0",
+ "statuses": "2.0.1",
"type-is": "~1.6.18",
"utils-merge": "1.0.1",
"vary": "~1.1.2"
@@ -4081,15 +3743,6 @@
"node": ">= 0.10.0"
}
},
- "node_modules/express/node_modules/cookie": {
- "version": "0.4.0",
- "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.0.tgz",
- "integrity": "sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg==",
- "dev": true,
- "engines": {
- "node": ">= 0.6"
- }
- },
"node_modules/express/node_modules/debug": {
"version": "2.6.9",
"resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
@@ -4106,16 +3759,24 @@
"dev": true
},
"node_modules/express/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/extend": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz",
- "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==",
- "dev": true
+ "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/external-editor": {
"version": "3.1.0",
@@ -4143,14 +3804,40 @@
"node": ">=0.6.0"
}
},
- "node_modules/extsprintf": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz",
- "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=",
+ "node_modules/extract-zip": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-2.0.1.tgz",
+ "integrity": "sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==",
"dev": true,
- "engines": [
- "node >=0.6.0"
- ]
+ "dependencies": {
+ "debug": "^4.1.1",
+ "get-stream": "^5.1.0",
+ "yauzl": "^2.10.0"
+ },
+ "bin": {
+ "extract-zip": "cli.js"
+ },
+ "engines": {
+ "node": ">= 10.17.0"
+ },
+ "optionalDependencies": {
+ "@types/yauzl": "^2.9.1"
+ }
+ },
+ "node_modules/extract-zip/node_modules/get-stream": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz",
+ "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==",
+ "dev": true,
+ "dependencies": {
+ "pump": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
},
"node_modules/fast-deep-equal": {
"version": "3.1.3",
@@ -4211,18 +3898,15 @@
}
},
"node_modules/figures": {
- "version": "3.2.0",
- "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz",
- "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==",
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz",
+ "integrity": "sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI=",
"dev": true,
"dependencies": {
"escape-string-regexp": "^1.0.5"
},
"engines": {
- "node": ">=8"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
+ "node": ">=4"
}
},
"node_modules/file-entry-cache": {
@@ -4250,17 +3934,17 @@
}
},
"node_modules/finalhandler": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz",
- "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==",
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz",
+ "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==",
"dev": true,
"dependencies": {
"debug": "2.6.9",
"encodeurl": "~1.0.2",
"escape-html": "~1.0.3",
- "on-finished": "~2.3.0",
+ "on-finished": "2.4.1",
"parseurl": "~1.3.3",
- "statuses": "~1.5.0",
+ "statuses": "2.0.1",
"unpipe": "~1.0.0"
},
"engines": {
@@ -4319,54 +4003,16 @@
"node": "^10.12.0 || >=12.0.0"
}
},
- "node_modules/flat-cache/node_modules/flatted": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.1.1.tgz",
- "integrity": "sha512-zAoAQiudy+r5SvnSw3KJy5os/oRJYHzrzja/tBDqrZtNhUw8bt6y8OBzMWcjWr+8liV8Eb6yOhw8WZ7VFZ5ZzA==",
+ "node_modules/flatted": {
+ "version": "3.2.5",
+ "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.5.tgz",
+ "integrity": "sha512-WIWGi2L3DyTUvUrwRKgGi9TwxQMUEqPOPQBVi71R96jZXJdFskXEmf54BoZaS1kknGODoIGASGEzBUYdyMCBJg==",
"dev": true
},
- "node_modules/flat-cache/node_modules/rimraf": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz",
- "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==",
- "dev": true,
- "dependencies": {
- "glob": "^7.1.3"
- },
- "bin": {
- "rimraf": "bin.js"
- },
- "funding": {
- "url": "https://github.com/sponsors/isaacs"
- }
- },
- "node_modules/forever-agent": {
- "version": "0.6.1",
- "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz",
- "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=",
- "dev": true,
- "engines": {
- "node": "*"
- }
- },
- "node_modules/form-data": {
- "version": "2.3.3",
- "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz",
- "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==",
- "dev": true,
- "dependencies": {
- "asynckit": "^0.4.0",
- "combined-stream": "^1.0.6",
- "mime-types": "^2.1.12"
- },
- "engines": {
- "node": ">= 0.12"
- }
- },
"node_modules/forwarded": {
- "version": "0.1.2",
- "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz",
- "integrity": "sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ=",
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz",
+ "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==",
"dev": true,
"engines": {
"node": ">= 0.6"
@@ -4413,12 +4059,39 @@
"integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==",
"dev": true
},
+ "node_modules/function.prototype.name": {
+ "version": "1.1.5",
+ "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.5.tgz",
+ "integrity": "sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA==",
+ "dev": true,
+ "dependencies": {
+ "call-bind": "^1.0.2",
+ "define-properties": "^1.1.3",
+ "es-abstract": "^1.19.0",
+ "functions-have-names": "^1.2.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
"node_modules/functional-red-black-tree": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz",
"integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=",
"dev": true
},
+ "node_modules/functions-have-names": {
+ "version": "1.2.3",
+ "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz",
+ "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==",
+ "dev": true,
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
"node_modules/get-caller-file": {
"version": "2.0.5",
"resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz",
@@ -4443,15 +4116,15 @@
}
},
"node_modules/get-stream": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz",
- "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==",
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz",
+ "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==",
"dev": true,
- "dependencies": {
- "pump": "^3.0.0"
- },
"engines": {
- "node": ">=6"
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
}
},
"node_modules/get-symbol-description": {
@@ -4470,19 +4143,10 @@
"url": "https://github.com/sponsors/ljharb"
}
},
- "node_modules/getpass": {
- "version": "0.1.7",
- "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz",
- "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=",
- "dev": true,
- "dependencies": {
- "assert-plus": "^1.0.0"
- }
- },
"node_modules/glob": {
- "version": "7.1.6",
- "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz",
- "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==",
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz",
+ "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==",
"dev": true,
"dependencies": {
"fs.realpath": "^1.0.0",
@@ -4512,18 +4176,15 @@
}
},
"node_modules/global-dirs": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-2.1.0.tgz",
- "integrity": "sha512-MG6kdOUh/xBnyo9cJFeIKkLEc1AyFq42QTU4XiX51i2NEdxLxLWXIjEjmqKeSuKR7pAZjTqUVoT2b2huxVLgYQ==",
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-0.1.1.tgz",
+ "integrity": "sha1-sxnA3UYH81PzvpzKTHL8FIxJ9EU=",
"dev": true,
"dependencies": {
- "ini": "1.3.7"
+ "ini": "^1.3.4"
},
"engines": {
- "node": ">=8"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
+ "node": ">=4"
}
},
"node_modules/globals": {
@@ -4541,18 +4202,6 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
- "node_modules/globals/node_modules/type-fest": {
- "version": "0.20.2",
- "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz",
- "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==",
- "dev": true,
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
"node_modules/globby": {
"version": "11.1.0",
"resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz",
@@ -4595,35 +4244,24 @@
"node": ">=8.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/har-schema": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz",
- "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=",
- "dev": true,
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/har-validator": {
- "version": "5.1.5",
- "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.5.tgz",
- "integrity": "sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==",
- "deprecated": "this library is no longer supported",
+ "node_modules/got/node_modules/get-stream": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz",
+ "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==",
"dev": true,
"dependencies": {
- "ajv": "^6.12.3",
- "har-schema": "^2.0.0"
+ "pump": "^3.0.0"
},
"engines": {
"node": ">=6"
}
},
+ "node_modules/graceful-fs": {
+ "version": "4.2.10",
+ "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz",
+ "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==",
+ "dev": true
+ },
"node_modules/has": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz",
@@ -4637,9 +4275,9 @@
}
},
"node_modules/has-bigints": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.1.tgz",
- "integrity": "sha512-LSBS2LjbNBTf6287JEbEzvJgftkF5qFkmCo9hDRpAzKhUOlJ+hx8dd4USs00SgsUNwc4617J9ki5YtEClM2ffA==",
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz",
+ "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==",
"dev": true,
"funding": {
"url": "https://github.com/sponsors/ljharb"
@@ -4654,6 +4292,18 @@
"node": ">=4"
}
},
+ "node_modules/has-property-descriptors": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz",
+ "integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==",
+ "dev": true,
+ "dependencies": {
+ "get-intrinsic": "^1.1.1"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
"node_modules/has-symbols": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz",
@@ -4709,6 +4359,15 @@
"node": ">= 0.8"
}
},
+ "node_modules/http-assert/node_modules/depd": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz",
+ "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=",
+ "dev": true,
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
"node_modules/http-assert/node_modules/http-errors": {
"version": "1.8.1",
"resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.8.1.tgz",
@@ -4725,19 +4384,13 @@
"node": ">= 0.6"
}
},
- "node_modules/http-assert/node_modules/setprototypeof": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz",
- "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==",
- "dev": true
- },
- "node_modules/http-assert/node_modules/toidentifier": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz",
- "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==",
+ "node_modules/http-assert/node_modules/statuses": {
+ "version": "1.5.0",
+ "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz",
+ "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=",
"dev": true,
"engines": {
- "node": ">=0.6"
+ "node": ">= 0.6"
}
},
"node_modules/http-cache-semantics": {
@@ -4747,52 +4400,31 @@
"dev": true
},
"node_modules/http-errors": {
- "version": "1.7.2",
- "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz",
- "integrity": "sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg==",
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz",
+ "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==",
"dev": true,
"dependencies": {
- "depd": "~1.1.2",
- "inherits": "2.0.3",
- "setprototypeof": "1.1.1",
- "statuses": ">= 1.5.0 < 2",
- "toidentifier": "1.0.0"
+ "depd": "2.0.0",
+ "inherits": "2.0.4",
+ "setprototypeof": "1.2.0",
+ "statuses": "2.0.1",
+ "toidentifier": "1.0.1"
},
"engines": {
- "node": ">= 0.6"
+ "node": ">= 0.8"
}
},
- "node_modules/http-errors/node_modules/inherits": {
- "version": "2.0.3",
- "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
- "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=",
- "dev": true
- },
"node_modules/http-link-header": {
"version": "0.8.0",
"resolved": "https://registry.npmjs.org/http-link-header/-/http-link-header-0.8.0.tgz",
"integrity": "sha1-oitBoMmx4tj6wb8baXxr1TLV9eQ=",
"dev": true
},
- "node_modules/http-signature": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz",
- "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=",
- "dev": true,
- "dependencies": {
- "assert-plus": "^1.0.0",
- "jsprim": "^1.2.2",
- "sshpk": "^1.7.0"
- },
- "engines": {
- "node": ">=0.8",
- "npm": ">=1.3.7"
- }
- },
"node_modules/https-proxy-agent": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz",
- "integrity": "sha512-EkYm5BcKUGiduxzSt3Eppko+PiNWNEpa4ySk9vTC6wDsQJW9rHSa+UhGNJoRYp7bz6Ht1eaRIa6QaJqO5rCFbA==",
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz",
+ "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==",
"dev": true,
"dependencies": {
"agent-base": "6",
@@ -4909,9 +4541,9 @@
"dev": true
},
"node_modules/ini": {
- "version": "1.3.7",
- "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.7.tgz",
- "integrity": "sha512-iKpRpXP+CrP2jyrxvg1kMUpXDyRUFDWurxbnVT1vQPx+Wz9uCYsMIqYuSBLV+PAaZG/d7kRLKRFc9oDMsH+mFQ==",
+ "version": "1.3.8",
+ "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz",
+ "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==",
"dev": true
},
"node_modules/inquirer": {
@@ -4938,36 +4570,13 @@
"node": ">=6.0.0"
}
},
- "node_modules/inquirer/node_modules/ansi-escapes": {
- "version": "3.2.0",
- "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.2.0.tgz",
- "integrity": "sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ==",
+ "node_modules/inquirer/node_modules/ansi-regex": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.1.tgz",
+ "integrity": "sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==",
"dev": true,
"engines": {
- "node": ">=4"
- }
- },
- "node_modules/inquirer/node_modules/ansi-regex": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.1.tgz",
- "integrity": "sha512-+O9Jct8wf++lXxxFc4hc8LsjaSq0HFzzL7cVsw8pRDIPdjKD2mT4ytDZlLuSBZ4cLKZFXIrMGO7DbQCtMJJMKw==",
- "dev": true,
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/inquirer/node_modules/chalk": {
- "version": "2.4.2",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
- "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
- "dev": true,
- "dependencies": {
- "ansi-styles": "^3.2.1",
- "escape-string-regexp": "^1.0.5",
- "supports-color": "^5.3.0"
- },
- "engines": {
- "node": ">=4"
+ "node": ">=6"
}
},
"node_modules/inquirer/node_modules/cli-cursor": {
@@ -4982,24 +4591,6 @@
"node": ">=4"
}
},
- "node_modules/inquirer/node_modules/cli-width": {
- "version": "2.2.1",
- "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-2.2.1.tgz",
- "integrity": "sha512-GRMWDxpOB6Dgk2E5Uo+3eEBvtOOlimMmpbFiKuLFnQzYDavtLFY3K5ona41jgN/WdRZtG7utuVSVTL4HbZHGkw==",
- "dev": true
- },
- "node_modules/inquirer/node_modules/figures": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz",
- "integrity": "sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI=",
- "dev": true,
- "dependencies": {
- "escape-string-regexp": "^1.0.5"
- },
- "engines": {
- "node": ">=4"
- }
- },
"node_modules/inquirer/node_modules/mimic-fn": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz",
@@ -5009,12 +4600,6 @@
"node": ">=4"
}
},
- "node_modules/inquirer/node_modules/mute-stream": {
- "version": "0.0.7",
- "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.7.tgz",
- "integrity": "sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s=",
- "dev": true
- },
"node_modules/inquirer/node_modules/onetime": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz",
@@ -5040,31 +4625,6 @@
"node": ">=4"
}
},
- "node_modules/inquirer/node_modules/string-width": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz",
- "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==",
- "dev": true,
- "dependencies": {
- "is-fullwidth-code-point": "^2.0.0",
- "strip-ansi": "^4.0.0"
- },
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/inquirer/node_modules/string-width/node_modules/strip-ansi": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz",
- "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=",
- "dev": true,
- "dependencies": {
- "ansi-regex": "^3.0.0"
- },
- "engines": {
- "node": ">=4"
- }
- },
"node_modules/inquirer/node_modules/strip-ansi": {
"version": "5.2.0",
"resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz",
@@ -5077,15 +4637,6 @@
"node": ">=6"
}
},
- "node_modules/inquirer/node_modules/strip-ansi/node_modules/ansi-regex": {
- "version": "4.1.1",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.1.tgz",
- "integrity": "sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==",
- "dev": true,
- "engines": {
- "node": ">=6"
- }
- },
"node_modules/internal-slot": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.3.tgz",
@@ -5100,12 +4651,6 @@
"node": ">= 0.4"
}
},
- "node_modules/intl": {
- "version": "1.2.5",
- "resolved": "https://registry.npmjs.org/intl/-/intl-1.2.5.tgz",
- "integrity": "sha1-giRKIZDE5Bn4Nx9ao02qNCDiq94=",
- "dev": true
- },
"node_modules/intl-messageformat": {
"version": "4.4.0",
"resolved": "https://registry.npmjs.org/intl-messageformat/-/intl-messageformat-4.4.0.tgz",
@@ -5122,12 +4667,6 @@
"deprecated": "We've written a new parser that's 6x faster and is backwards compatible. Please use @formatjs/icu-messageformat-parser",
"dev": true
},
- "node_modules/intl-pluralrules": {
- "version": "1.2.2",
- "resolved": "https://registry.npmjs.org/intl-pluralrules/-/intl-pluralrules-1.2.2.tgz",
- "integrity": "sha512-SBdlNCJAhTA0I0uHg2dn7I+c6BCvSVk6zJ/01ozjwJK7BvKms9RH3w3Sd/Ag24KffZ/Yx6KJRCKAc7eE8TZLNg==",
- "dev": true
- },
"node_modules/ip": {
"version": "1.1.5",
"resolved": "https://registry.npmjs.org/ip/-/ip-1.1.5.tgz",
@@ -5189,6 +4728,18 @@
"integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==",
"dev": true
},
+ "node_modules/is-builtin-module": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-3.1.0.tgz",
+ "integrity": "sha512-OV7JjAgOTfAFJmHZLvpSTb4qi0nIILDV1gWPYDnDJUTNFM5aGlRAhk4QcT8i7TuAleeEV5Fdkqn3t4mS+Q11fg==",
+ "dev": true,
+ "dependencies": {
+ "builtin-modules": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
"node_modules/is-callable": {
"version": "1.2.4",
"resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.4.tgz",
@@ -5214,9 +4765,9 @@
}
},
"node_modules/is-core-module": {
- "version": "2.8.1",
- "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.8.1.tgz",
- "integrity": "sha512-SdNCUs284hr40hFTFP6l0IfZ/RSrMXF3qgoRHd3/79unUTvrFO/JoXwkGm+5J/Oe3E/b5GsnG330uUNgRpu1PA==",
+ "version": "2.9.0",
+ "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.9.0.tgz",
+ "integrity": "sha512-+5FPy5PnwmO3lvfMb0AsoPaBG+5KHUI0wYFXOtYPnVVVspTFUuMZNfNaNVRt3FZadstu2c8x23vykRW/NBoU6A==",
"dev": true,
"dependencies": {
"has": "^1.0.3"
@@ -5241,9 +4792,9 @@
}
},
"node_modules/is-docker": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.1.1.tgz",
- "integrity": "sha512-ZOoqiXfEwtGknTiuDEy8pN2CfE3TxMHprvNer1mXiqwkOT77Rw3YVrUQ52EqAOU3QAWDQ+bQdx7HJzrv7LS2Hw==",
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz",
+ "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==",
"dev": true,
"bin": {
"is-docker": "cli.js"
@@ -5265,12 +4816,12 @@
}
},
"node_modules/is-fullwidth-code-point": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz",
- "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=",
+ "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": ">=4"
+ "node": ">=8"
}
},
"node_modules/is-generator-function": {
@@ -5301,19 +4852,16 @@
}
},
"node_modules/is-installed-globally": {
- "version": "0.3.2",
- "resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.3.2.tgz",
- "integrity": "sha512-wZ8x1js7Ia0kecP/CHM/3ABkAmujX7WPvQk6uu3Fly/Mk44pySulQpnHG46OMjHGXApINnV4QhY3SWnECO2z5g==",
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.1.0.tgz",
+ "integrity": "sha1-Df2Y9akRFxbdU13aZJL2e/PSWoA=",
"dev": true,
"dependencies": {
- "global-dirs": "^2.0.1",
- "is-path-inside": "^3.0.1"
+ "global-dirs": "^0.1.0",
+ "is-path-inside": "^1.0.0"
},
"engines": {
- "node": ">=8"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
+ "node": ">=4"
}
},
"node_modules/is-module": {
@@ -5335,9 +4883,9 @@
}
},
"node_modules/is-npm": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/is-npm/-/is-npm-4.0.0.tgz",
- "integrity": "sha512-96ECIfh9xtDDlPylNPXhzjsykHsMJZ18ASpaWzQyBr4YRTcVjUvzaHayDAES2oU/3KpljhHUjtSRNiDwi0F0ig==",
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/is-npm/-/is-npm-3.0.0.tgz",
+ "integrity": "sha512-wsigDr1Kkschp2opC4G3yA6r9EgVA6NjRpWzIi9axXqeIaAATPRJc4uLujXe3Nd9uO8KoDyA4MD6aZSeXTADhA==",
"dev": true,
"engines": {
"node": ">=8"
@@ -5353,9 +4901,9 @@
}
},
"node_modules/is-number-object": {
- "version": "1.0.6",
- "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.6.tgz",
- "integrity": "sha512-bEVOqiRcvo3zO1+G2lVMy+gkkEm9Yh7cDMRusKKu5ZJKPUYSJwICTKZrNKHA2EbSP0Tu0+6B/emsYNHZyn6K8g==",
+ "version": "1.0.7",
+ "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz",
+ "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==",
"dev": true,
"dependencies": {
"has-tostringtag": "^1.0.0"
@@ -5377,12 +4925,15 @@
}
},
"node_modules/is-path-inside": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.2.tgz",
- "integrity": "sha512-/2UGPSgmtqwo1ktx8NDHjuPwZWmHhO+gj0f93EkhLB5RgW9RZevWYYlIkS6zePc6U2WpOdQYIwHe9YC4DWEBVg==",
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-1.0.1.tgz",
+ "integrity": "sha1-jvW33lBDej/cprToZe96pVy0gDY=",
"dev": true,
+ "dependencies": {
+ "path-is-inside": "^1.0.1"
+ },
"engines": {
- "node": ">=8"
+ "node": ">=0.10.0"
}
},
"node_modules/is-regex": {
@@ -5402,21 +4953,27 @@
}
},
"node_modules/is-shared-array-buffer": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.1.tgz",
- "integrity": "sha512-IU0NmyknYZN0rChcKhRO1X8LYz5Isj/Fsqh8NJOSf+N/hCOTwy29F32Ik7a+QszE63IdvmwdTPDd6cZ5pg4cwA==",
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz",
+ "integrity": "sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==",
"dev": true,
+ "dependencies": {
+ "call-bind": "^1.0.2"
+ },
"funding": {
"url": "https://github.com/sponsors/ljharb"
}
},
"node_modules/is-stream": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz",
- "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=",
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz",
+ "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==",
"dev": true,
"engines": {
- "node": ">=0.10.0"
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
}
},
"node_modules/is-string": {
@@ -5485,10 +5042,16 @@
"integrity": "sha512-VjSeb/lHmkoyd8ryPVIKvOCn4D1koMqY+vqyjjUfc3xyKtP4dYOxM44sZrnqQSzSds3xyOrUTLTC9LVCVgLngw==",
"dev": true
},
+ "node_modules/isarray": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz",
+ "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=",
+ "dev": true
+ },
"node_modules/isbinaryfile": {
- "version": "4.0.8",
- "resolved": "https://registry.npmjs.org/isbinaryfile/-/isbinaryfile-4.0.8.tgz",
- "integrity": "sha512-53h6XFniq77YdW+spoRrebh0mnmTxRPTlcuIArO57lmMdq4uBKFKaeTjnb92oYWrSn/LVL+LT+Hap2tFQj8V+w==",
+ "version": "4.0.10",
+ "resolved": "https://registry.npmjs.org/isbinaryfile/-/isbinaryfile-4.0.10.tgz",
+ "integrity": "sha512-iHrqe5shvBUcFbmZq9zOQHBoeOhZJu6RQGrDpBgenUm/Am+F3JM2MgQj+rK3Z601fzrL5gLZWtAPH2OBaSVcyw==",
"dev": true,
"engines": {
"node": ">= 8.0.0"
@@ -5513,12 +5076,6 @@
"whatwg-fetch": "^3.4.1"
}
},
- "node_modules/isstream": {
- "version": "0.1.2",
- "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz",
- "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=",
- "dev": true
- },
"node_modules/istanbul-lib-coverage": {
"version": "3.2.0",
"resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz",
@@ -5583,10 +5140,13 @@
"dev": true
},
"node_modules/js-library-detector": {
- "version": "6.4.0",
- "resolved": "https://registry.npmjs.org/js-library-detector/-/js-library-detector-6.4.0.tgz",
- "integrity": "sha512-NB2sYpmgqiTd7PNNhgp6bnEZmjvTUdAbzxABvYXWLpTL/t158T6mPnD8uYNd0FDP73YWyMrTYDvPxqdvCTbv2g==",
- "dev": true
+ "version": "6.5.0",
+ "resolved": "https://registry.npmjs.org/js-library-detector/-/js-library-detector-6.5.0.tgz",
+ "integrity": "sha512-Kq7VckJ5kb26kHMAu1sDO8t2qr7M5Uw6Gf7fVGtu1YceoHdqTcobwnB5kStcktusPuPmiCE8PbCaiLzhiBsSAw==",
+ "dev": true,
+ "engines": {
+ "node": ">=12"
+ }
},
"node_modules/js-tokens": {
"version": "4.0.0",
@@ -5595,9 +5155,9 @@
"dev": true
},
"node_modules/js-yaml": {
- "version": "3.14.0",
- "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.0.tgz",
- "integrity": "sha512-/4IbIeHcD9VMHFqDR/gQ7EdZdLimOvW2DdcxFjdyyZ9NsbS+ccrXqVWDtab/lRl5AlUqmpBx8EhPaWR+OtY17A==",
+ "version": "3.14.1",
+ "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz",
+ "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==",
"dev": true,
"dependencies": {
"argparse": "^1.0.7",
@@ -5607,24 +5167,12 @@
"js-yaml": "bin/js-yaml.js"
}
},
- "node_modules/jsbn": {
- "version": "0.1.1",
- "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz",
- "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=",
- "dev": true
- },
"node_modules/json-buffer": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.0.tgz",
"integrity": "sha1-Wx85evx11ne96Lz8Dkfh+aPZqJg=",
"dev": true
},
- "node_modules/json-schema": {
- "version": "0.2.3",
- "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz",
- "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=",
- "dev": true
- },
"node_modules/json-schema-traverse": {
"version": "0.4.1",
"resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
@@ -5637,12 +5185,6 @@
"integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=",
"dev": true
},
- "node_modules/json-stringify-safe": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz",
- "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=",
- "dev": true
- },
"node_modules/json5": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz",
@@ -5655,86 +5197,6 @@
"json5": "lib/cli.js"
}
},
- "node_modules/jsonld": {
- "version": "1.8.1",
- "resolved": "https://registry.npmjs.org/jsonld/-/jsonld-1.8.1.tgz",
- "integrity": "sha512-f0rusl5v8aPKS3jApT5fhYsdTC/JpyK1PoJ+ZtYYtZXoyb1J0Z///mJqLwrfL/g4NueFSqPymDYIi1CcSk7b8Q==",
- "dev": true,
- "dependencies": {
- "canonicalize": "^1.0.1",
- "rdf-canonize": "^1.0.2",
- "request": "^2.88.0",
- "semver": "^5.6.0",
- "xmldom": "0.1.19"
- },
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/jsonld/node_modules/semver": {
- "version": "5.7.1",
- "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
- "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==",
- "dev": true,
- "bin": {
- "semver": "bin/semver"
- }
- },
- "node_modules/jsonlint-mod": {
- "version": "1.7.6",
- "resolved": "https://registry.npmjs.org/jsonlint-mod/-/jsonlint-mod-1.7.6.tgz",
- "integrity": "sha512-oGuk6E1ehmIpw0w9ttgb2KsDQQgGXBzZczREW8OfxEm9eCQYL9/LCexSnh++0z3AiYGcXpBgqDSx9AAgzl/Bvg==",
- "dev": true,
- "dependencies": {
- "chalk": "^2.4.2",
- "JSV": "^4.0.2",
- "underscore": "^1.9.1"
- },
- "bin": {
- "jsonlint": "lib/cli.js"
- },
- "engines": {
- "node": ">= 0.6"
- }
- },
- "node_modules/jsonlint-mod/node_modules/chalk": {
- "version": "2.4.2",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
- "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
- "dev": true,
- "dependencies": {
- "ansi-styles": "^3.2.1",
- "escape-string-regexp": "^1.0.5",
- "supports-color": "^5.3.0"
- },
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/jsprim": {
- "version": "1.4.1",
- "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz",
- "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=",
- "dev": true,
- "engines": [
- "node >=0.6.0"
- ],
- "dependencies": {
- "assert-plus": "1.0.0",
- "extsprintf": "1.3.0",
- "json-schema": "0.2.3",
- "verror": "1.10.0"
- }
- },
- "node_modules/JSV": {
- "version": "4.0.2",
- "resolved": "https://registry.npmjs.org/JSV/-/JSV-4.0.2.tgz",
- "integrity": "sha1-0Hf2glVx+CEy+d/67Vh7QCn+/1c=",
- "dev": true,
- "engines": {
- "node": "*"
- }
- },
"node_modules/just-extend": {
"version": "4.2.1",
"resolved": "https://registry.npmjs.org/just-extend/-/just-extend-4.2.1.tgz",
@@ -5838,6 +5300,15 @@
"node": ">= 8"
}
},
+ "node_modules/koa-send/node_modules/depd": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz",
+ "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=",
+ "dev": true,
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
"node_modules/koa-send/node_modules/http-errors": {
"version": "1.8.1",
"resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.8.1.tgz",
@@ -5854,19 +5325,13 @@
"node": ">= 0.6"
}
},
- "node_modules/koa-send/node_modules/setprototypeof": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz",
- "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==",
- "dev": true
- },
- "node_modules/koa-send/node_modules/toidentifier": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz",
- "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==",
+ "node_modules/koa-send/node_modules/statuses": {
+ "version": "1.5.0",
+ "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz",
+ "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=",
"dev": true,
"engines": {
- "node": ">=0.6"
+ "node": ">= 0.6"
}
},
"node_modules/koa-static": {
@@ -5891,28 +5356,53 @@
"ms": "^2.1.1"
}
},
- "node_modules/koa/node_modules/depd": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz",
- "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==",
- "dev": true,
- "engines": {
- "node": ">= 0.8"
- }
- },
- "node_modules/latest-version": {
- "version": "5.1.0",
- "resolved": "https://registry.npmjs.org/latest-version/-/latest-version-5.1.0.tgz",
- "integrity": "sha512-weT+r0kTkRQdCdYCNtkMwWXQTMEswKrFBkm4ckQOMVhhqhIMI1UT2hMj+1iigIhgSZm5gTmrRXBNoGUgaTY1xA==",
+ "node_modules/koa/node_modules/http-errors": {
+ "version": "1.8.1",
+ "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.8.1.tgz",
+ "integrity": "sha512-Kpk9Sm7NmI+RHhnj6OIWDI1d6fIoFAtFt9RLaTMRlg/8w49juAStsrBgp0Dp4OdxdVbRIeKhtCUvoi/RuAhO4g==",
"dev": true,
"dependencies": {
- "package-json": "^6.3.0"
+ "depd": "~1.1.2",
+ "inherits": "2.0.4",
+ "setprototypeof": "1.2.0",
+ "statuses": ">= 1.5.0 < 2",
+ "toidentifier": "1.0.1"
},
"engines": {
- "node": ">=8"
+ "node": ">= 0.6"
}
},
- "node_modules/levn": {
+ "node_modules/koa/node_modules/http-errors/node_modules/depd": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz",
+ "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=",
+ "dev": true,
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/koa/node_modules/statuses": {
+ "version": "1.5.0",
+ "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz",
+ "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=",
+ "dev": true,
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/latest-version": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/latest-version/-/latest-version-5.1.0.tgz",
+ "integrity": "sha512-weT+r0kTkRQdCdYCNtkMwWXQTMEswKrFBkm4ckQOMVhhqhIMI1UT2hMj+1iigIhgSZm5gTmrRXBNoGUgaTY1xA==",
+ "dev": true,
+ "dependencies": {
+ "package-json": "^6.3.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/levn": {
"version": "0.4.1",
"resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz",
"integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==",
@@ -5926,52 +5416,48 @@
}
},
"node_modules/lighthouse": {
- "version": "7.0.0",
- "resolved": "https://registry.npmjs.org/lighthouse/-/lighthouse-7.0.0.tgz",
- "integrity": "sha512-HxSbbg1WUZFsdUm0U6MCffr6J6marWW8kTlsAGaGh9oE7SFmxHh7eslK5u2sz70QXQZcZf8bfWRIkSx94dFbQA==",
+ "version": "9.3.0",
+ "resolved": "https://registry.npmjs.org/lighthouse/-/lighthouse-9.3.0.tgz",
+ "integrity": "sha512-jooRAn9LQYk/KgALmwd9fPcmfGecVnd15pr7Ya4pZ1mhG9SKgVOIWwj8cjxZlWATrMV31ySwkX37dw/Jepm9gw==",
"dev": true,
"dependencies": {
- "axe-core": "4.1.1",
- "chrome-launcher": "^0.13.4",
+ "axe-core": "4.3.5",
+ "chrome-launcher": "^0.15.0",
"configstore": "^5.0.1",
+ "csp_evaluator": "1.1.0",
"cssstyle": "1.2.1",
- "details-element-polyfill": "^2.4.0",
+ "enquirer": "^2.3.6",
"http-link-header": "^0.8.0",
- "inquirer": "^7.3.3",
- "intl": "^1.2.5",
"intl-messageformat": "^4.4.0",
- "intl-pluralrules": "^1.0.3",
- "jpeg-js": "^0.4.1",
+ "jpeg-js": "^0.4.3",
"js-library-detector": "^6.4.0",
- "jsonld": "^1.5.0",
- "jsonlint-mod": "^1.7.5",
- "lighthouse-logger": "^1.2.0",
- "lighthouse-stack-packs": "^1.4.0",
+ "lighthouse-logger": "^1.3.0",
+ "lighthouse-stack-packs": "^1.7.0",
+ "lodash.clonedeep": "^4.5.0",
"lodash.get": "^4.4.2",
"lodash.isequal": "^4.5.0",
"lodash.set": "^4.3.2",
- "lookup-closest-locale": "6.0.4",
+ "lookup-closest-locale": "6.2.0",
"metaviewport-parser": "0.2.0",
- "open": "^6.4.0",
+ "open": "^8.4.0",
"parse-cache-control": "1.0.1",
- "ps-list": "^7.2.0",
+ "ps-list": "^8.0.0",
"raven": "^2.2.1",
- "rimraf": "^2.6.1",
- "robots-parser": "^2.0.1",
+ "robots-parser": "^3.0.0",
"semver": "^5.3.0",
"speedline-core": "^1.4.3",
- "third-party-web": "^0.12.2",
- "update-notifier": "^4.1.0",
- "ws": "3.3.2",
- "yargs": "^16.1.1",
- "yargs-parser": "^20.2.4"
+ "third-party-web": "^0.12.7",
+ "ws": "^7.0.0",
+ "yargs": "^17.3.1",
+ "yargs-parser": "^21.0.0"
},
"bin": {
"chrome-debug": "lighthouse-core/scripts/manual-chrome-launcher.js",
- "lighthouse": "lighthouse-cli/index.js"
+ "lighthouse": "lighthouse-cli/index.js",
+ "smokehouse": "lighthouse-cli/test/smokehouse/frontends/smokehouse-bin.js"
},
"engines": {
- "node": ">=12.13.0"
+ "node": ">=14.15"
}
},
"node_modules/lighthouse-logger": {
@@ -6000,9 +5486,9 @@
"dev": true
},
"node_modules/lighthouse-stack-packs": {
- "version": "1.4.0",
- "resolved": "https://registry.npmjs.org/lighthouse-stack-packs/-/lighthouse-stack-packs-1.4.0.tgz",
- "integrity": "sha512-wdv94WUjaqUwtW8DOapng45Yah62c5O5geNVeoSQlnoagfbTO/YbiwNlfzDIF1xNKRkPlsfr/oWHhXsaHXDivg==",
+ "version": "1.8.1",
+ "resolved": "https://registry.npmjs.org/lighthouse-stack-packs/-/lighthouse-stack-packs-1.8.1.tgz",
+ "integrity": "sha512-LSCu9Ugt9NPvRfBNzAjMDLvYev9r/93OTmbIWt9iXwiCmd999I/zneRTwsFLtlQWGKwNbDHS9vXnU+KpXUb1qg==",
"dev": true
},
"node_modules/lighthouse/node_modules/ansi-styles": {
@@ -6020,6 +5506,33 @@
"url": "https://github.com/chalk/ansi-styles?sponsor=1"
}
},
+ "node_modules/lighthouse/node_modules/axe-core": {
+ "version": "4.3.5",
+ "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.3.5.tgz",
+ "integrity": "sha512-WKTW1+xAzhMS5dJsxWkliixlO/PqC4VhmO9T4juNYcaTg9jzWiJsou6m5pxWYGfigWbwzJWeFY6z47a+4neRXA==",
+ "dev": true,
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/lighthouse/node_modules/chrome-launcher": {
+ "version": "0.15.0",
+ "resolved": "https://registry.npmjs.org/chrome-launcher/-/chrome-launcher-0.15.0.tgz",
+ "integrity": "sha512-ZQqX5kb9H0+jy1OqLnWampfocrtSZaGl7Ny3F9GRha85o4odbL8x55paUzh51UC7cEmZ5obp3H2Mm70uC2PpRA==",
+ "dev": true,
+ "dependencies": {
+ "@types/node": "*",
+ "escape-string-regexp": "^4.0.0",
+ "is-wsl": "^2.2.0",
+ "lighthouse-logger": "^1.0.0"
+ },
+ "bin": {
+ "print-chrome-path": "bin/print-chrome-path.js"
+ },
+ "engines": {
+ "node": ">=12.13.0"
+ }
+ },
"node_modules/lighthouse/node_modules/cliui": {
"version": "7.0.4",
"resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz",
@@ -6049,58 +5562,58 @@
"integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
"dev": true
},
- "node_modules/lighthouse/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==",
+ "node_modules/lighthouse/node_modules/debug": {
+ "version": "2.6.9",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
"dev": true,
- "engines": {
- "node": ">=8"
+ "dependencies": {
+ "ms": "2.0.0"
}
},
- "node_modules/lighthouse/node_modules/inquirer": {
- "version": "7.3.3",
- "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-7.3.3.tgz",
- "integrity": "sha512-JG3eIAj5V9CwcGvuOmoo6LB9kbAYT8HXffUl6memuszlwDC/qvFAJw49XJ5NROSFNPxp3iQg1GqkFhaY/CR0IA==",
+ "node_modules/lighthouse/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,
- "dependencies": {
- "ansi-escapes": "^4.2.1",
- "chalk": "^4.1.0",
- "cli-cursor": "^3.1.0",
- "cli-width": "^3.0.0",
- "external-editor": "^3.0.3",
- "figures": "^3.0.0",
- "lodash": "^4.17.19",
- "mute-stream": "0.0.8",
- "run-async": "^2.4.0",
- "rxjs": "^6.6.0",
- "string-width": "^4.1.0",
- "strip-ansi": "^6.0.0",
- "through": "^2.3.6"
- },
"engines": {
- "node": ">=8.0.0"
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
}
},
- "node_modules/lighthouse/node_modules/is-wsl": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz",
- "integrity": "sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0=",
+ "node_modules/lighthouse/node_modules/lighthouse-logger": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/lighthouse-logger/-/lighthouse-logger-1.3.0.tgz",
+ "integrity": "sha512-BbqAKApLb9ywUli+0a+PcV04SyJ/N1q/8qgCNe6U97KbPCS1BTksEuHFLYdvc8DltuhfxIUBqDZsC0bBGtl3lA==",
"dev": true,
- "engines": {
- "node": ">=4"
+ "dependencies": {
+ "debug": "^2.6.9",
+ "marky": "^1.2.2"
}
},
+ "node_modules/lighthouse/node_modules/ms": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+ "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
+ "dev": true
+ },
"node_modules/lighthouse/node_modules/open": {
- "version": "6.4.0",
- "resolved": "https://registry.npmjs.org/open/-/open-6.4.0.tgz",
- "integrity": "sha512-IFenVPgF70fSm1keSd2iDBIDIBZkroLeuffXq+wKTzTJlBpesFWojV9lb8mzOfaAzM1sr7HQHuO0vtV0zYekGg==",
+ "version": "8.4.0",
+ "resolved": "https://registry.npmjs.org/open/-/open-8.4.0.tgz",
+ "integrity": "sha512-XgFPPM+B28FtCCgSb9I+s9szOC1vZRSwgWsRUA5ylIxRTgKozqjOCrVOqGsYABPYK5qnfqClxZTFBa8PKt2v6Q==",
"dev": true,
"dependencies": {
- "is-wsl": "^1.1.0"
+ "define-lazy-prop": "^2.0.0",
+ "is-docker": "^2.1.1",
+ "is-wsl": "^2.2.0"
},
"engines": {
- "node": ">=8"
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
}
},
"node_modules/lighthouse/node_modules/semver": {
@@ -6112,53 +5625,15 @@
"semver": "bin/semver"
}
},
- "node_modules/lighthouse/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/lighthouse/node_modules/update-notifier": {
- "version": "4.1.3",
- "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-4.1.3.tgz",
- "integrity": "sha512-Yld6Z0RyCYGB6ckIjffGOSOmHXj1gMeE7aROz4MG+XMkmixBX4jUngrGXNYz7wPKBmtoD4MnBa2Anu7RSKht/A==",
- "dev": true,
- "dependencies": {
- "boxen": "^4.2.0",
- "chalk": "^3.0.0",
- "configstore": "^5.0.1",
- "has-yarn": "^2.1.0",
- "import-lazy": "^2.1.0",
- "is-ci": "^2.0.0",
- "is-installed-globally": "^0.3.1",
- "is-npm": "^4.0.0",
- "is-yarn-global": "^0.3.0",
- "latest-version": "^5.0.0",
- "pupa": "^2.0.1",
- "semver-diff": "^3.1.1",
- "xdg-basedir": "^4.0.0"
- },
- "engines": {
- "node": ">=8"
- },
- "funding": {
- "url": "https://github.com/yeoman/update-notifier?sponsor=1"
- }
- },
- "node_modules/lighthouse/node_modules/update-notifier/node_modules/chalk": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz",
- "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==",
+ "node_modules/lighthouse/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": {
- "ansi-styles": "^4.1.0",
- "supports-color": "^7.1.0"
+ "emoji-regex": "^8.0.0",
+ "is-fullwidth-code-point": "^3.0.0",
+ "strip-ansi": "^6.0.1"
},
"engines": {
"node": ">=8"
@@ -6181,31 +5656,40 @@
"url": "https://github.com/chalk/wrap-ansi?sponsor=1"
}
},
+ "node_modules/lighthouse/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/lighthouse/node_modules/yargs": {
- "version": "16.2.0",
- "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz",
- "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==",
+ "version": "17.4.1",
+ "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.4.1.tgz",
+ "integrity": "sha512-WSZD9jgobAg3ZKuCQZSa3g9QOJeCCqLoLAykiWgmXnDo9EPnn4RPf5qVTtzgOx66o6/oqhcA5tHtJXpG8pMt3g==",
"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",
+ "string-width": "^4.2.3",
"y18n": "^5.0.5",
- "yargs-parser": "^20.2.2"
+ "yargs-parser": "^21.0.0"
},
"engines": {
- "node": ">=10"
+ "node": ">=12"
}
},
"node_modules/lighthouse/node_modules/yargs-parser": {
- "version": "20.2.6",
- "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.6.tgz",
- "integrity": "sha512-AP1+fQIWSM/sMiET8fyayjx/J+JmTPt2Mr0FkrgqB4todtfa53sOsrSAcIrJRD5XS20bKUwaDIuMkWKCEiQLKA==",
+ "version": "21.0.1",
+ "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.0.1.tgz",
+ "integrity": "sha512-9BK1jFpLzJROCI5TzwZL/TU4gqjK5xiHV/RfWLOahrjAko/e4DJkRDZQXfvqAsiZzzYhgAzbgz6lg48jcm4GLg==",
"dev": true,
"engines": {
- "node": ">=10"
+ "node": ">=12"
}
},
"node_modules/lilconfig": {
@@ -6218,9 +5702,9 @@
}
},
"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==",
+ "version": "2.2.3",
+ "resolved": "https://registry.npmjs.org/lit/-/lit-2.2.3.tgz",
+ "integrity": "sha512-5/v+r9dH3Pw/o0rhp/qYk3ERvOUclNF31bWb0FiW6MPgwdQIr+/KCt/p3zcd8aPl8lIGnxdGrVcZA+gWS6oFOQ==",
"dev": true,
"dependencies": {
"@lit/reactive-element": "^1.3.0",
@@ -6239,9 +5723,9 @@
}
},
"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==",
+ "version": "2.2.3",
+ "resolved": "https://registry.npmjs.org/lit-html/-/lit-html-2.2.3.tgz",
+ "integrity": "sha512-vI4j3eWwtQaR8q/O63juZVliBIFMio716X719/lSsGH4UWPy2/7Qf377jsNs4cx3gCHgIbx8yxFgXFQ/igZyXQ==",
"dev": true,
"dependencies": {
"@types/trusted-types": "^2.0.2"
@@ -6272,6 +5756,12 @@
"integrity": "sha1-soqmKIorn8ZRA1x3EfZathkDMaY=",
"dev": true
},
+ "node_modules/lodash.clonedeep": {
+ "version": "4.5.0",
+ "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz",
+ "integrity": "sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8=",
+ "dev": true
+ },
"node_modules/lodash.get": {
"version": "4.4.2",
"resolved": "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz",
@@ -6332,10 +5822,37 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
+ "node_modules/log-update/node_modules/ansi-escapes": {
+ "version": "4.3.2",
+ "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz",
+ "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==",
+ "dev": true,
+ "dependencies": {
+ "type-fest": "^0.21.3"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/log-update/node_modules/type-fest": {
+ "version": "0.21.3",
+ "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz",
+ "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==",
+ "dev": true,
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
"node_modules/lookup-closest-locale": {
- "version": "6.0.4",
- "resolved": "https://registry.npmjs.org/lookup-closest-locale/-/lookup-closest-locale-6.0.4.tgz",
- "integrity": "sha512-bWoFbSGe6f1GvMGzj17LrwMX4FhDXDwZyH04ySVCPbtOJADcSRguZNKewoJ3Ful/MOxD/wRHvFPadk/kYZUbuQ==",
+ "version": "6.2.0",
+ "resolved": "https://registry.npmjs.org/lookup-closest-locale/-/lookup-closest-locale-6.2.0.tgz",
+ "integrity": "sha512-/c2kL+Vnp1jnV6K6RpDTHK3dgg0Tu2VVp+elEiJpjfS1UyY7AjOYHohRug6wT0OpoX2qFgNORndE9RqesfVxWQ==",
"dev": true
},
"node_modules/lowercase-keys": {
@@ -6348,13 +5865,15 @@
}
},
"node_modules/lru-cache": {
- "version": "4.1.5",
- "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz",
- "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==",
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz",
+ "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==",
"dev": true,
"dependencies": {
- "pseudomap": "^1.0.2",
- "yallist": "^2.1.2"
+ "yallist": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=10"
}
},
"node_modules/make-dir": {
@@ -6382,9 +5901,9 @@
}
},
"node_modules/marky": {
- "version": "1.2.1",
- "resolved": "https://registry.npmjs.org/marky/-/marky-1.2.1.tgz",
- "integrity": "sha512-md9k+Gxa3qLH6sUKpeC2CNkJK/Ld+bEz5X96nYwloqphQE0CKCVEKco/6jxEZixinqNdz5RFi/KaCyfbMDMAXQ==",
+ "version": "1.2.4",
+ "resolved": "https://registry.npmjs.org/marky/-/marky-1.2.4.tgz",
+ "integrity": "sha512-zd2/GiSn6U3/jeFVZ0J9CA1LzQ8RfIVvXkb/U0swFHF/zT+dVohTAWjmo2DcIuofmIIIROlwTbd+shSeXmxr0w==",
"dev": true
},
"node_modules/md5": {
@@ -6450,22 +5969,34 @@
"node": ">=8.6"
}
},
+ "node_modules/mime": {
+ "version": "1.6.0",
+ "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz",
+ "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==",
+ "dev": true,
+ "bin": {
+ "mime": "cli.js"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
"node_modules/mime-db": {
- "version": "1.44.0",
- "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.44.0.tgz",
- "integrity": "sha512-/NOTfLrsPBVeH7YtFPgsVWveuL+4SjjYxaQ1xtM1KMFj7HdxlBlxeyNLzhyJVx7r4rZGJAZ/6lkKCitSc/Nmpg==",
+ "version": "1.52.0",
+ "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz",
+ "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==",
"dev": true,
"engines": {
"node": ">= 0.6"
}
},
"node_modules/mime-types": {
- "version": "2.1.27",
- "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.27.tgz",
- "integrity": "sha512-JIhqnCasI9yD+SsmkquHBxTSEuZdQX5BuQnS2Vc7puQQQ+8yiP5AY5uWhpdv4YL4VM5c6iliiYWPgJ/nJQLp7w==",
+ "version": "2.1.35",
+ "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz",
+ "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==",
"dev": true,
"dependencies": {
- "mime-db": "1.44.0"
+ "mime-db": "1.52.0"
},
"engines": {
"node": ">= 0.6"
@@ -6490,9 +6021,9 @@
}
},
"node_modules/minimatch": {
- "version": "3.0.4",
- "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
- "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
+ "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
"dev": true,
"dependencies": {
"brace-expansion": "^1.1.7"
@@ -6508,15 +6039,15 @@
"dev": true
},
"node_modules/mkdirp": {
- "version": "0.5.5",
- "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz",
- "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==",
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz",
+ "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==",
"dev": true,
- "dependencies": {
- "minimist": "^1.2.5"
- },
"bin": {
"mkdirp": "bin/cmd.js"
+ },
+ "engines": {
+ "node": ">=10"
}
},
"node_modules/mkdirp-classic": {
@@ -6532,9 +6063,9 @@
"dev": true
},
"node_modules/mute-stream": {
- "version": "0.0.8",
- "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz",
- "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==",
+ "version": "0.0.7",
+ "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.7.tgz",
+ "integrity": "sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s=",
"dev": true
},
"node_modules/nanocolors": {
@@ -6544,9 +6075,9 @@
"dev": true
},
"node_modules/nanoid": {
- "version": "3.3.3",
- "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.3.tgz",
- "integrity": "sha512-p1sjXuopFs0xg+fPASzQ28agW1oHD7xDsd9Xkf3T15H3c/cifrFHVwrh74PdoklAPi+i7MdRsE47vm2r6JoB+w==",
+ "version": "3.3.4",
+ "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.4.tgz",
+ "integrity": "sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==",
"dev": true,
"bin": {
"nanoid": "bin/nanoid.cjs"
@@ -6571,9 +6102,9 @@
"dev": true
},
"node_modules/negotiator": {
- "version": "0.6.2",
- "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz",
- "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==",
+ "version": "0.6.3",
+ "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz",
+ "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==",
"dev": true,
"engines": {
"node": ">= 0.6"
@@ -6592,12 +6123,6 @@
"path-to-regexp": "^1.7.0"
}
},
- "node_modules/nise/node_modules/isarray": {
- "version": "0.0.1",
- "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz",
- "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=",
- "dev": true
- },
"node_modules/nise/node_modules/path-to-regexp": {
"version": "1.8.0",
"resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-1.8.0.tgz",
@@ -6627,19 +6152,32 @@
}
}
},
- "node_modules/node-forge": {
- "version": "0.10.0",
- "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-0.10.0.tgz",
- "integrity": "sha512-PPmu8eEeG9saEUvI97fm4OYxXVB6bFvyNTyiUOBichBpFG8A1Ljw3bY62+5oOjDEMHRnd0Y7HQ+x7uzxOzC6JA==",
+ "node_modules/node-fetch/node_modules/tr46": {
+ "version": "0.0.3",
+ "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz",
+ "integrity": "sha1-gYT9NH2snNwYWZLzpmIuFLnZq2o=",
+ "dev": true
+ },
+ "node_modules/node-fetch/node_modules/webidl-conversions": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz",
+ "integrity": "sha1-JFNCdeKnvGvnvIZhHMFq4KVlSHE=",
+ "dev": true
+ },
+ "node_modules/node-fetch/node_modules/whatwg-url": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz",
+ "integrity": "sha1-lmRU6HZUYuN2RNNib2dCzotwll0=",
"dev": true,
- "engines": {
- "node": ">= 6.0.0"
+ "dependencies": {
+ "tr46": "~0.0.3",
+ "webidl-conversions": "^3.0.0"
}
},
"node_modules/node-releases": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.2.tgz",
- "integrity": "sha512-XxYDdcQ6eKqp/YjI+tb2C5WM2LgjnZrfYg4vgQt49EK268b6gYCHsBLrK2qvJo4FmCtqmKezb0WZFK4fkrZNsg==",
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.4.tgz",
+ "integrity": "sha512-gbMzqQtTtDz/00jQzZ21PQzdI9PyLYqUSvD0p3naOhX4odFji0ZxYdnVwPTxmSwkmxhcFImpozceidSG+AgoPQ==",
"dev": true
},
"node_modules/normalize-path": {
@@ -6681,15 +6219,6 @@
"node": ">=4"
}
},
- "node_modules/oauth-sign": {
- "version": "0.9.0",
- "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz",
- "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==",
- "dev": true,
- "engines": {
- "node": "*"
- }
- },
"node_modules/object-inspect": {
"version": "1.12.0",
"resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.0.tgz",
@@ -6744,9 +6273,9 @@
}
},
"node_modules/on-finished": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz",
- "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=",
+ "version": "2.4.1",
+ "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz",
+ "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==",
"dev": true,
"dependencies": {
"ee-first": "1.1.1"
@@ -7004,12 +6533,6 @@
"integrity": "sha1-elfrVQpng/kRUzH89GY9XI4AelA=",
"dev": true
},
- "node_modules/performance-now": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz",
- "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=",
- "dev": true
- },
"node_modules/picocolors": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz",
@@ -7028,10 +6551,19 @@
"url": "https://github.com/sponsors/jonschlinkert"
}
},
- "node_modules/pkg-dir": {
- "version": "4.2.0",
- "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz",
- "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==",
+ "node_modules/pify": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz",
+ "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=",
+ "dev": true,
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/pkg-dir": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz",
+ "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==",
"dev": true,
"dependencies": {
"find-up": "^4.0.0"
@@ -7133,6 +6665,18 @@
"ms": "^2.1.1"
}
},
+ "node_modules/portfinder/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/prelude-ls": {
"version": "1.2.1",
"resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz",
@@ -7152,9 +6696,9 @@
}
},
"node_modules/prettier": {
- "version": "2.6.1",
- "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.6.1.tgz",
- "integrity": "sha512-8UVbTBYGwN37Bs9LERmxCPjdvPxlEowx2urIL6urHzdb3SDq4B/Z6xLFCblrSnE4iKWcS6ziJ3aOYrc1kz/E2A==",
+ "version": "2.6.2",
+ "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.6.2.tgz",
+ "integrity": "sha512-PkUpF+qoXTqhOeWL9fu7As8LXsIUZ1WYaJiY/a7McAQzxjk82OF0tibkFXVCDImZtWxbvojFjerkiLb0/q8mew==",
"dev": true,
"bin": {
"prettier": "bin-prettier.js"
@@ -7188,12 +6732,12 @@
}
},
"node_modules/proxy-addr": {
- "version": "2.0.6",
- "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.6.tgz",
- "integrity": "sha512-dh/frvCBVmSsDYzw6n926jv974gddhkFPfiN8hPOi30Wax25QZyZEGveluCgliBnqmuM+UJmBErbAUFIoDbjOw==",
+ "version": "2.0.7",
+ "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz",
+ "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==",
"dev": true,
"dependencies": {
- "forwarded": "~0.1.2",
+ "forwarded": "0.2.0",
"ipaddr.js": "1.9.1"
},
"engines": {
@@ -7207,12 +6751,12 @@
"dev": true
},
"node_modules/ps-list": {
- "version": "7.2.0",
- "resolved": "https://registry.npmjs.org/ps-list/-/ps-list-7.2.0.tgz",
- "integrity": "sha512-v4Bl6I3f2kJfr5o80ShABNHAokIgY+wFDTQfE+X3zWYgSGQOCBeYptLZUpoOALBqO5EawmDN/tjTldJesd0ujQ==",
+ "version": "8.1.0",
+ "resolved": "https://registry.npmjs.org/ps-list/-/ps-list-8.1.0.tgz",
+ "integrity": "sha512-NoGBqJe7Ou3kfQxEvDzDyKGAyEgwIuD3YrfXinjcCmBRv0hTld0Xb71hrXvtsNPj7HSFATfemvzB8PPJtq6Yag==",
"dev": true,
"engines": {
- "node": ">=10"
+ "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
},
"funding": {
"url": "https://github.com/sponsors/sindresorhus"
@@ -7224,12 +6768,6 @@
"integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=",
"dev": true
},
- "node_modules/psl": {
- "version": "1.8.0",
- "resolved": "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz",
- "integrity": "sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ==",
- "dev": true
- },
"node_modules/pump": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz",
@@ -7249,29 +6787,17 @@
"node": ">=6"
}
},
- "node_modules/pupa": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/pupa/-/pupa-2.1.1.tgz",
- "integrity": "sha512-l1jNAspIBSFqbT+y+5FosojNpVpF94nlI+wDUpqP9enwOTfHx9f0gh5nB96vl+6yTpsJsypeNrwfzPrKuHB41A==",
- "dev": true,
- "dependencies": {
- "escape-goat": "^2.0.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
"node_modules/puppeteer-core": {
- "version": "13.5.2",
- "resolved": "https://registry.npmjs.org/puppeteer-core/-/puppeteer-core-13.5.2.tgz",
- "integrity": "sha512-uxHOWCHt9mGUCLu8qtbEy3UqHlBRMzGCyPmAeoq2KrtmPOC0ZJPRZrDLWJMG3E/gwuHinDtZnBbnFfRfk/PABg==",
+ "version": "13.7.0",
+ "resolved": "https://registry.npmjs.org/puppeteer-core/-/puppeteer-core-13.7.0.tgz",
+ "integrity": "sha512-rXja4vcnAzFAP1OVLq/5dWNfwBGuzcOARJ6qGV7oAZhnLmVRU8G5MsdeQEAOy332ZhkIOnn9jp15R89LKHyp2Q==",
"dev": true,
"dependencies": {
"cross-fetch": "3.1.5",
"debug": "4.3.4",
- "devtools-protocol": "0.0.969999",
+ "devtools-protocol": "0.0.981744",
"extract-zip": "2.0.1",
- "https-proxy-agent": "5.0.0",
+ "https-proxy-agent": "5.0.1",
"pkg-dir": "4.2.0",
"progress": "2.0.3",
"proxy-from-env": "1.1.0",
@@ -7284,56 +6810,6 @@
"node": ">=10.18.1"
}
},
- "node_modules/puppeteer-core/node_modules/extract-zip": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-2.0.1.tgz",
- "integrity": "sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==",
- "dev": true,
- "dependencies": {
- "debug": "^4.1.1",
- "get-stream": "^5.1.0",
- "yauzl": "^2.10.0"
- },
- "bin": {
- "extract-zip": "cli.js"
- },
- "engines": {
- "node": ">= 10.17.0"
- },
- "optionalDependencies": {
- "@types/yauzl": "^2.9.1"
- }
- },
- "node_modules/puppeteer-core/node_modules/get-stream": {
- "version": "5.2.0",
- "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz",
- "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==",
- "dev": true,
- "dependencies": {
- "pump": "^3.0.0"
- },
- "engines": {
- "node": ">=8"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/puppeteer-core/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/puppeteer-core/node_modules/ws": {
"version": "8.5.0",
"resolved": "https://registry.npmjs.org/ws/-/ws-8.5.0.tgz",
@@ -7356,12 +6832,18 @@
}
},
"node_modules/qs": {
- "version": "6.7.0",
- "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz",
- "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==",
+ "version": "6.10.3",
+ "resolved": "https://registry.npmjs.org/qs/-/qs-6.10.3.tgz",
+ "integrity": "sha512-wr7M2E0OFRfIfJZjKGieI8lBKb7fRCH4Fv5KNPEs7gJ8jadvotdsS08PzOKR7opXhZ/Xkjtt3WF9g38drmyRqQ==",
"dev": true,
+ "dependencies": {
+ "side-channel": "^1.0.4"
+ },
"engines": {
"node": ">=0.6"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
}
},
"node_modules/queue-microtask": {
@@ -7412,6 +6894,15 @@
"node": ">= 4.0.0"
}
},
+ "node_modules/raven/node_modules/cookie": {
+ "version": "0.3.1",
+ "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.3.1.tgz",
+ "integrity": "sha1-5+Ch+e9DtMi6klxcWpboBtFoc7s=",
+ "dev": true,
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
"node_modules/raven/node_modules/uuid": {
"version": "3.3.2",
"resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz",
@@ -7423,13 +6914,13 @@
}
},
"node_modules/raw-body": {
- "version": "2.4.0",
- "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.0.tgz",
- "integrity": "sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q==",
+ "version": "2.5.1",
+ "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz",
+ "integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==",
"dev": true,
"dependencies": {
- "bytes": "3.1.0",
- "http-errors": "1.7.2",
+ "bytes": "3.1.2",
+ "http-errors": "2.0.0",
"iconv-lite": "0.4.24",
"unpipe": "1.0.0"
},
@@ -7437,6 +6928,15 @@
"node": ">= 0.8"
}
},
+ "node_modules/raw-body/node_modules/bytes": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz",
+ "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==",
+ "dev": true,
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
"node_modules/rc": {
"version": "1.2.8",
"resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz",
@@ -7461,26 +6961,18 @@
"node": ">=0.10.0"
}
},
- "node_modules/rdf-canonize": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/rdf-canonize/-/rdf-canonize-1.2.0.tgz",
- "integrity": "sha512-MQdcRDz4+82nUrEb3hNQangBDpmep15uMmnWclGi/1KS0bNVc8oHpoNI0PFLHZsvwgwRzH31bO1JAScqUAstvw==",
+ "node_modules/readable-stream": {
+ "version": "3.6.0",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz",
+ "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==",
"dev": true,
"dependencies": {
- "node-forge": "^0.10.0",
- "semver": "^6.3.0"
+ "inherits": "^2.0.3",
+ "string_decoder": "^1.1.1",
+ "util-deprecate": "^1.0.1"
},
"engines": {
- "node": ">=6"
- }
- },
- "node_modules/rdf-canonize/node_modules/semver": {
- "version": "6.3.0",
- "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
- "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==",
- "dev": true,
- "bin": {
- "semver": "bin/semver.js"
+ "node": ">= 6"
}
},
"node_modules/readdirp": {
@@ -7504,6 +6996,23 @@
"node": ">=6"
}
},
+ "node_modules/regexp.prototype.flags": {
+ "version": "1.4.3",
+ "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.4.3.tgz",
+ "integrity": "sha512-fjggEOO3slI6Wvgjwflkc4NFRCTZAu5CnNfBd5qOMYhWdn67nJBBu34/TkD++eeFmd8C9r9jfXJ27+nSiRkSUA==",
+ "dev": true,
+ "dependencies": {
+ "call-bind": "^1.0.2",
+ "define-properties": "^1.1.3",
+ "functions-have-names": "^1.2.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
"node_modules/regexpp": {
"version": "3.2.0",
"resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz",
@@ -7540,57 +7049,6 @@
"node": ">=8"
}
},
- "node_modules/request": {
- "version": "2.88.2",
- "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz",
- "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==",
- "deprecated": "request has been deprecated, see https://github.com/request/request/issues/3142",
- "dev": true,
- "dependencies": {
- "aws-sign2": "~0.7.0",
- "aws4": "^1.8.0",
- "caseless": "~0.12.0",
- "combined-stream": "~1.0.6",
- "extend": "~3.0.2",
- "forever-agent": "~0.6.1",
- "form-data": "~2.3.2",
- "har-validator": "~5.1.3",
- "http-signature": "~1.2.0",
- "is-typedarray": "~1.0.0",
- "isstream": "~0.1.2",
- "json-stringify-safe": "~5.0.1",
- "mime-types": "~2.1.19",
- "oauth-sign": "~0.9.0",
- "performance-now": "^2.1.0",
- "qs": "~6.5.2",
- "safe-buffer": "^5.1.2",
- "tough-cookie": "~2.5.0",
- "tunnel-agent": "^0.6.0",
- "uuid": "^3.3.2"
- },
- "engines": {
- "node": ">= 6"
- }
- },
- "node_modules/request/node_modules/qs": {
- "version": "6.5.2",
- "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz",
- "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==",
- "dev": true,
- "engines": {
- "node": ">=0.6"
- }
- },
- "node_modules/request/node_modules/uuid": {
- "version": "3.4.0",
- "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz",
- "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==",
- "deprecated": "Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details.",
- "dev": true,
- "bin": {
- "uuid": "bin/uuid"
- }
- },
"node_modules/require-directory": {
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz",
@@ -7645,6 +7103,15 @@
"node": ">= 0.8"
}
},
+ "node_modules/resolve-path/node_modules/depd": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz",
+ "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=",
+ "dev": true,
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
"node_modules/resolve-path/node_modules/http-errors": {
"version": "1.6.3",
"resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz",
@@ -7672,6 +7139,15 @@
"integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==",
"dev": true
},
+ "node_modules/resolve-path/node_modules/statuses": {
+ "version": "1.5.0",
+ "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz",
+ "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=",
+ "dev": true,
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
"node_modules/responselike": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/responselike/-/responselike-1.0.2.tgz",
@@ -7705,27 +7181,33 @@
}
},
"node_modules/rimraf": {
- "version": "2.7.1",
- "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz",
- "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==",
+ "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/robots-parser": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/robots-parser/-/robots-parser-2.2.0.tgz",
- "integrity": "sha512-PsUtHqiuk5MiC6WFnTFxry7NZfuuwh5eG7WBx+iYS5zFx5BlitW0s5uizl8mfCBVW/v9t0FRI95L1cACXI6PJw==",
- "dev": true
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/robots-parser/-/robots-parser-3.0.0.tgz",
+ "integrity": "sha512-6xkze3WRdneibICBAzMKcXyTKQw5shA3GbwoEJy7RSvxpZNGF0GMuYKE1T0VMP4fwx/fQs0n0mtriOqRtk5L1w==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10"
+ }
},
"node_modules/rollup": {
- "version": "2.70.1",
- "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.70.1.tgz",
- "integrity": "sha512-CRYsI5EuzLbXdxC6RnYhOuRdtz4bhejPMSWjsFLfVM/7w/85n2szZv6yExqUXsBdz5KT8eoubeyDUDjhLHEslA==",
+ "version": "2.72.0",
+ "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.72.0.tgz",
+ "integrity": "sha512-KqtR2YcO35/KKijg4nx4STO3569aqCUeGRkKWnJ6r+AvBBrVY9L4pmf4NHVrQr4mTOq6msbohflxr2kpihhaOA==",
"dev": true,
"bin": {
"rollup": "dist/bin/rollup"
@@ -7770,9 +7252,9 @@
}
},
"node_modules/rxjs": {
- "version": "6.6.6",
- "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.6.tgz",
- "integrity": "sha512-/oTwee4N4iWzAMAL9xdGKjkEHmIwupR3oXbQjCKywF1BeFohswF3vZdogbmEF6pZkOsXTzWkrZszrWpQTByYVg==",
+ "version": "6.6.7",
+ "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz",
+ "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==",
"dev": true,
"dependencies": {
"tslib": "^1.9.0"
@@ -7788,24 +7270,10 @@
"dev": true
},
"node_modules/safe-buffer": {
- "version": "5.2.1",
- "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
- "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==",
- "dev": true,
- "funding": [
- {
- "type": "github",
- "url": "https://github.com/sponsors/feross"
- },
- {
- "type": "patreon",
- "url": "https://www.patreon.com/feross"
- },
- {
- "type": "consulting",
- "url": "https://feross.org/support"
- }
- ]
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
+ "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
+ "dev": true
},
"node_modules/safer-buffer": {
"version": "2.1.2",
@@ -7829,63 +7297,45 @@
}
},
"node_modules/semver-diff": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/semver-diff/-/semver-diff-3.1.1.tgz",
- "integrity": "sha512-GX0Ix/CJcHyB8c4ykpHGIAvLyOwOobtM/8d+TQkAd81/bEjgPHrfba41Vpesr7jX/t8Uh+R3EX9eAS5be+jQYg==",
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/semver-diff/-/semver-diff-2.1.0.tgz",
+ "integrity": "sha1-S7uEN8jTfksM8aaP1ybsbWRdbTY=",
"dev": true,
"dependencies": {
- "semver": "^6.3.0"
+ "semver": "^5.0.3"
},
"engines": {
- "node": ">=8"
+ "node": ">=0.10.0"
}
},
"node_modules/semver-diff/node_modules/semver": {
- "version": "6.3.0",
- "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
- "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==",
+ "version": "5.7.1",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
+ "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==",
"dev": true,
"bin": {
- "semver": "bin/semver.js"
- }
- },
- "node_modules/semver/node_modules/lru-cache": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz",
- "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==",
- "dev": true,
- "dependencies": {
- "yallist": "^4.0.0"
- },
- "engines": {
- "node": ">=10"
+ "semver": "bin/semver"
}
},
- "node_modules/semver/node_modules/yallist": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
- "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
- "dev": true
- },
"node_modules/send": {
- "version": "0.17.1",
- "resolved": "https://registry.npmjs.org/send/-/send-0.17.1.tgz",
- "integrity": "sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg==",
+ "version": "0.18.0",
+ "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz",
+ "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==",
"dev": true,
"dependencies": {
"debug": "2.6.9",
- "depd": "~1.1.2",
- "destroy": "~1.0.4",
+ "depd": "2.0.0",
+ "destroy": "1.2.0",
"encodeurl": "~1.0.2",
"escape-html": "~1.0.3",
"etag": "~1.8.1",
"fresh": "0.5.2",
- "http-errors": "~1.7.2",
+ "http-errors": "2.0.0",
"mime": "1.6.0",
- "ms": "2.1.1",
- "on-finished": "~2.3.0",
+ "ms": "2.1.3",
+ "on-finished": "2.4.1",
"range-parser": "~1.2.1",
- "statuses": "~1.5.0"
+ "statuses": "2.0.1"
},
"engines": {
"node": ">= 0.8.0"
@@ -7906,34 +7356,22 @@
"integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
"dev": true
},
- "node_modules/send/node_modules/mime": {
- "version": "1.6.0",
- "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz",
- "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==",
- "dev": true,
- "bin": {
- "mime": "cli.js"
- },
- "engines": {
- "node": ">=4"
- }
- },
"node_modules/send/node_modules/ms": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz",
- "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==",
+ "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/serve-static": {
- "version": "1.14.1",
- "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.14.1.tgz",
- "integrity": "sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg==",
+ "version": "1.15.0",
+ "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz",
+ "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==",
"dev": true,
"dependencies": {
"encodeurl": "~1.0.2",
"escape-html": "~1.0.3",
"parseurl": "~1.3.3",
- "send": "0.17.1"
+ "send": "0.18.0"
},
"engines": {
"node": ">= 0.8.0"
@@ -7946,9 +7384,9 @@
"dev": true
},
"node_modules/setprototypeof": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz",
- "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==",
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz",
+ "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==",
"dev": true
},
"node_modules/shebang-command": {
@@ -7987,19 +7425,19 @@
}
},
"node_modules/signal-exit": {
- "version": "3.0.3",
- "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz",
- "integrity": "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==",
+ "version": "3.0.7",
+ "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz",
+ "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==",
"dev": true
},
"node_modules/sinon": {
- "version": "13.0.1",
- "resolved": "https://registry.npmjs.org/sinon/-/sinon-13.0.1.tgz",
- "integrity": "sha512-8yx2wIvkBjIq/MGY1D9h1LMraYW+z1X0mb648KZnKSdvLasvDu7maa0dFaNYdTDczFgbjNw2tOmWdTk9saVfwQ==",
+ "version": "13.0.2",
+ "resolved": "https://registry.npmjs.org/sinon/-/sinon-13.0.2.tgz",
+ "integrity": "sha512-KvOrztAVqzSJWMDoxM4vM+GPys1df2VBoXm+YciyB/OLMamfS3VXh3oGh5WtrAGSzrgczNWFFY22oKb7Fi5eeA==",
"dev": true,
"dependencies": {
"@sinonjs/commons": "^1.8.3",
- "@sinonjs/fake-timers": "^9.0.0",
+ "@sinonjs/fake-timers": "^9.1.2",
"@sinonjs/samsam": "^6.1.1",
"diff": "^5.0.0",
"nise": "^5.1.1",
@@ -8053,22 +7491,10 @@
"node": "^12.0.0 || ^14.0.0 || >=16.0.0"
}
},
- "node_modules/size-limit/node_modules/mkdirp": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz",
- "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==",
- "dev": true,
- "bin": {
- "mkdirp": "bin/cmd.js"
- },
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/slash": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz",
- "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==",
+ "node_modules/slash": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz",
+ "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==",
"dev": true,
"engines": {
"node": ">=8"
@@ -8124,13 +7550,13 @@
"integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
"dev": true
},
- "node_modules/slice-ansi/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==",
+ "node_modules/source-map": {
+ "version": "0.7.3",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz",
+ "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==",
"dev": true,
"engines": {
- "node": ">=8"
+ "node": ">= 8"
}
},
"node_modules/speedline-core": {
@@ -8153,31 +7579,6 @@
"integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=",
"dev": true
},
- "node_modules/sshpk": {
- "version": "1.16.1",
- "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz",
- "integrity": "sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==",
- "dev": true,
- "dependencies": {
- "asn1": "~0.2.3",
- "assert-plus": "^1.0.0",
- "bcrypt-pbkdf": "^1.0.0",
- "dashdash": "^1.12.0",
- "ecc-jsbn": "~0.1.1",
- "getpass": "^0.1.1",
- "jsbn": "~0.1.0",
- "safer-buffer": "^2.0.2",
- "tweetnacl": "~0.14.0"
- },
- "bin": {
- "sshpk-conv": "bin/sshpk-conv",
- "sshpk-sign": "bin/sshpk-sign",
- "sshpk-verify": "bin/sshpk-verify"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
"node_modules/stack-trace": {
"version": "0.0.10",
"resolved": "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.10.tgz",
@@ -8188,73 +7589,109 @@
}
},
"node_modules/statuses": {
- "version": "1.5.0",
- "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz",
- "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=",
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz",
+ "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==",
"dev": true,
"engines": {
- "node": ">= 0.6"
+ "node": ">= 0.8"
}
},
"node_modules/string_decoder": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
- "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz",
+ "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==",
"dev": true,
"dependencies": {
- "safe-buffer": "~5.1.0"
+ "safe-buffer": "~5.2.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
+ "version": "5.2.1",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
+ "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/feross"
+ },
+ {
+ "type": "patreon",
+ "url": "https://www.patreon.com/feross"
+ },
+ {
+ "type": "consulting",
+ "url": "https://feross.org/support"
+ }
+ ]
},
"node_modules/string-width": {
- "version": "4.2.0",
- "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz",
- "integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==",
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz",
+ "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==",
"dev": true,
"dependencies": {
- "emoji-regex": "^8.0.0",
- "is-fullwidth-code-point": "^3.0.0",
- "strip-ansi": "^6.0.0"
+ "is-fullwidth-code-point": "^2.0.0",
+ "strip-ansi": "^4.0.0"
},
"engines": {
- "node": ">=8"
+ "node": ">=4"
+ }
+ },
+ "node_modules/string-width/node_modules/ansi-regex": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.1.tgz",
+ "integrity": "sha512-+O9Jct8wf++lXxxFc4hc8LsjaSq0HFzzL7cVsw8pRDIPdjKD2mT4ytDZlLuSBZ4cLKZFXIrMGO7DbQCtMJJMKw==",
+ "dev": true,
+ "engines": {
+ "node": ">=4"
}
},
"node_modules/string-width/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==",
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz",
+ "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=",
"dev": true,
"engines": {
- "node": ">=8"
+ "node": ">=4"
+ }
+ },
+ "node_modules/string-width/node_modules/strip-ansi": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz",
+ "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=",
+ "dev": true,
+ "dependencies": {
+ "ansi-regex": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=4"
}
},
"node_modules/string.prototype.trimend": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.4.tgz",
- "integrity": "sha512-y9xCjw1P23Awk8EvTpcyL2NIr1j7wJ39f+k6lvRnSMz+mz9CGz9NYPelDk42kOz6+ql8xjfK8oYzy3jAP5QU5A==",
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.5.tgz",
+ "integrity": "sha512-I7RGvmjV4pJ7O3kdf+LXFpVfdNOxtCW/2C8f6jNiW4+PQchwxkCDzlk1/7p+Wl4bqFIZeF47qAHXLuHHWKAxog==",
"dev": true,
"dependencies": {
"call-bind": "^1.0.2",
- "define-properties": "^1.1.3"
+ "define-properties": "^1.1.4",
+ "es-abstract": "^1.19.5"
},
"funding": {
"url": "https://github.com/sponsors/ljharb"
}
},
"node_modules/string.prototype.trimstart": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.4.tgz",
- "integrity": "sha512-jh6e984OBfvxS50tdY2nRZnoC5/mLFKOREQfw8t5yytkoUsJRNxvI/E39qu1sD0OtWI3OC0XgKSmcWwziwYuZw==",
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.5.tgz",
+ "integrity": "sha512-THx16TJCGlsN0o6dl2o6ncWUsdgnLRSA23rRE5pyGBw/mLr3Ej/R2LaqCtgP8VNMGZsvMWnf9ooZPyY2bHvUFg==",
"dev": true,
"dependencies": {
"call-bind": "^1.0.2",
- "define-properties": "^1.1.3"
+ "define-properties": "^1.1.4",
+ "es-abstract": "^1.19.5"
},
"funding": {
"url": "https://github.com/sponsors/ljharb"
@@ -8397,30 +7834,16 @@
"node": ">=6"
}
},
- "node_modules/tar-stream/node_modules/readable-stream": {
- "version": "3.6.0",
- "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz",
- "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==",
+ "node_modules/term-size": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/term-size/-/term-size-1.2.0.tgz",
+ "integrity": "sha1-RYuDiH8oj8Vtb/+/rSYuJmOO+mk=",
"dev": true,
"dependencies": {
- "inherits": "^2.0.3",
- "string_decoder": "^1.1.1",
- "util-deprecate": "^1.0.1"
+ "execa": "^0.7.0"
},
"engines": {
- "node": ">= 6"
- }
- },
- "node_modules/term-size": {
- "version": "2.2.1",
- "resolved": "https://registry.npmjs.org/term-size/-/term-size-2.2.1.tgz",
- "integrity": "sha512-wK0Ri4fOGjv/XPy8SBHZChl8CM7uMc5VML7SqiQ0zG7+J5Vr+RMQDoHa2CNT6KHUnTGIXH34UDMkPzAUyapBZg==",
- "dev": true,
- "engines": {
- "node": ">=8"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
+ "node": ">=4"
}
},
"node_modules/text-table": {
@@ -8430,9 +7853,9 @@
"dev": true
},
"node_modules/third-party-web": {
- "version": "0.12.3",
- "resolved": "https://registry.npmjs.org/third-party-web/-/third-party-web-0.12.3.tgz",
- "integrity": "sha512-wnPlVUKzet4hnejKMEsVj5eIL0V2PLzgjJ3fLyGo9GV1pUOMa0NjeIzJNJ0pTEUL2GJAqlFKxo8EYML27SF/ng==",
+ "version": "0.12.7",
+ "resolved": "https://registry.npmjs.org/third-party-web/-/third-party-web-0.12.7.tgz",
+ "integrity": "sha512-9d/OfjEOjyeOpnm4F9o0KSK6BI6ytvi9DINSB5h1+jdlCvQlhKpViMSxWpBN9WstdfDQ61BS6NxWqcPCuQCAJg==",
"dev": true
},
"node_modules/through": {
@@ -8450,6 +7873,30 @@
"node": ">=0.10.0"
}
},
+ "node_modules/tmp": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.1.0.tgz",
+ "integrity": "sha512-J7Z2K08jbGcdA1kkQpJSqLF6T0tdQqpR2pnSUXsIchbPdTI9v3e85cLW0d6WDhwuAleOV71j2xWs8qMPfK7nKw==",
+ "dev": true,
+ "dependencies": {
+ "rimraf": "^2.6.3"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/tmp/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/to-readable-stream": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/to-readable-stream/-/to-readable-stream-1.0.0.tgz",
@@ -8472,33 +7919,26 @@
}
},
"node_modules/toidentifier": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz",
- "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==",
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz",
+ "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==",
"dev": true,
"engines": {
"node": ">=0.6"
}
},
- "node_modules/tough-cookie": {
- "version": "2.5.0",
- "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz",
- "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==",
+ "node_modules/tr46": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/tr46/-/tr46-3.0.0.tgz",
+ "integrity": "sha512-l7FvfAHlcmulp8kr+flpQZmVwtu7nfRV7NZujtN0OqES8EL4O4e0qqzL0DC5gAvx/ZC/9lk6rhcUwYvkBnBnYA==",
"dev": true,
"dependencies": {
- "psl": "^1.1.28",
"punycode": "^2.1.1"
},
"engines": {
- "node": ">=0.8"
+ "node": ">=12"
}
},
- "node_modules/tr46": {
- "version": "0.0.3",
- "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz",
- "integrity": "sha1-gYT9NH2snNwYWZLzpmIuFLnZq2o=",
- "dev": true
- },
"node_modules/tree-kill": {
"version": "1.2.2",
"resolved": "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.2.tgz",
@@ -8521,9 +7961,9 @@
}
},
"node_modules/tslib": {
- "version": "2.3.1",
- "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.1.tgz",
- "integrity": "sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw==",
+ "version": "2.4.0",
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.0.tgz",
+ "integrity": "sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==",
"dev": true
},
"node_modules/tsscmp": {
@@ -8556,24 +7996,6 @@
"integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==",
"dev": true
},
- "node_modules/tunnel-agent": {
- "version": "0.6.0",
- "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz",
- "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=",
- "dev": true,
- "dependencies": {
- "safe-buffer": "^5.0.1"
- },
- "engines": {
- "node": "*"
- }
- },
- "node_modules/tweetnacl": {
- "version": "0.14.5",
- "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz",
- "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=",
- "dev": true
- },
"node_modules/type-check": {
"version": "0.4.0",
"resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz",
@@ -8596,12 +8018,15 @@
}
},
"node_modules/type-fest": {
- "version": "0.8.1",
- "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz",
- "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==",
+ "version": "0.20.2",
+ "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz",
+ "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==",
"dev": true,
"engines": {
- "node": ">=8"
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
}
},
"node_modules/type-is": {
@@ -8667,21 +8092,15 @@
"node": "*"
}
},
- "node_modules/ultron": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/ultron/-/ultron-1.1.1.tgz",
- "integrity": "sha512-UIEXBNeYmKptWH6z8ZnqTeS8fV74zG0/eRU9VGkpzz+LIJNs8W/zM/L+7ctCkRrgbNnnR0xxw4bKOr0cW0N0Og==",
- "dev": true
- },
"node_modules/unbox-primitive": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.1.tgz",
- "integrity": "sha512-tZU/3NqK3dA5gpE1KtyiJUrEB0lxnGkMFHptJ7q6ewdZ8s12QrODwNbhIJStmJkd1QDXa1NRA8aF2A1zk/Ypyw==",
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz",
+ "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==",
"dev": true,
"dependencies": {
- "function-bind": "^1.1.1",
- "has-bigints": "^1.0.1",
- "has-symbols": "^1.0.2",
+ "call-bind": "^1.0.2",
+ "has-bigints": "^1.0.2",
+ "has-symbols": "^1.0.3",
"which-boxed-primitive": "^1.0.2"
},
"funding": {
@@ -8698,12 +8117,6 @@
"through": "^2.3.8"
}
},
- "node_modules/underscore": {
- "version": "1.13.2",
- "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.13.2.tgz",
- "integrity": "sha512-ekY1NhRzq0B08g4bGuX4wd2jZx5GnKz6mKSqFL4nqBlfyMGiG10gDFhDTMEfYmDL6Jy0FUIZp7wiRB+0BP7J2g==",
- "dev": true
- },
"node_modules/unique-string": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/unique-string/-/unique-string-2.0.0.tgz",
@@ -8748,48 +8161,6 @@
"node": ">=8"
}
},
- "node_modules/update-notifier/node_modules/ansi-regex": {
- "version": "4.1.1",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.1.tgz",
- "integrity": "sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==",
- "dev": true,
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/update-notifier/node_modules/boxen": {
- "version": "3.2.0",
- "resolved": "https://registry.npmjs.org/boxen/-/boxen-3.2.0.tgz",
- "integrity": "sha512-cU4J/+NodM3IHdSL2yN8bqYqnmlBTidDR4RC7nJs61ZmtGz8VZzM3HLQX0zY5mrSmPtR3xWwsq2jOUQqFZN8+A==",
- "dev": true,
- "dependencies": {
- "ansi-align": "^3.0.0",
- "camelcase": "^5.3.1",
- "chalk": "^2.4.2",
- "cli-boxes": "^2.2.0",
- "string-width": "^3.0.0",
- "term-size": "^1.2.0",
- "type-fest": "^0.3.0",
- "widest-line": "^2.0.0"
- },
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/update-notifier/node_modules/chalk": {
- "version": "2.4.2",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
- "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
- "dev": true,
- "dependencies": {
- "ansi-styles": "^3.2.1",
- "escape-string-regexp": "^1.0.5",
- "supports-color": "^5.3.0"
- },
- "engines": {
- "node": ">=4"
- }
- },
"node_modules/update-notifier/node_modules/configstore": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/configstore/-/configstore-4.0.0.tgz",
@@ -8828,156 +8199,27 @@
"node": ">=4"
}
},
- "node_modules/update-notifier/node_modules/emoji-regex": {
- "version": "7.0.3",
- "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz",
- "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==",
- "dev": true
+ "node_modules/update-notifier/node_modules/is-obj": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz",
+ "integrity": "sha1-PkcprB9f3gJc19g6iW2rn09n2w8=",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
},
- "node_modules/update-notifier/node_modules/global-dirs": {
- "version": "0.1.1",
- "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-0.1.1.tgz",
- "integrity": "sha1-sxnA3UYH81PzvpzKTHL8FIxJ9EU=",
+ "node_modules/update-notifier/node_modules/make-dir": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.3.0.tgz",
+ "integrity": "sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==",
"dev": true,
"dependencies": {
- "ini": "^1.3.4"
+ "pify": "^3.0.0"
},
"engines": {
"node": ">=4"
}
},
- "node_modules/update-notifier/node_modules/is-installed-globally": {
- "version": "0.1.0",
- "resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.1.0.tgz",
- "integrity": "sha1-Df2Y9akRFxbdU13aZJL2e/PSWoA=",
- "dev": true,
- "dependencies": {
- "global-dirs": "^0.1.0",
- "is-path-inside": "^1.0.0"
- },
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/update-notifier/node_modules/is-npm": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/is-npm/-/is-npm-3.0.0.tgz",
- "integrity": "sha512-wsigDr1Kkschp2opC4G3yA6r9EgVA6NjRpWzIi9axXqeIaAATPRJc4uLujXe3Nd9uO8KoDyA4MD6aZSeXTADhA==",
- "dev": true,
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/update-notifier/node_modules/is-obj": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz",
- "integrity": "sha1-PkcprB9f3gJc19g6iW2rn09n2w8=",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/update-notifier/node_modules/is-path-inside": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-1.0.1.tgz",
- "integrity": "sha1-jvW33lBDej/cprToZe96pVy0gDY=",
- "dev": true,
- "dependencies": {
- "path-is-inside": "^1.0.1"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/update-notifier/node_modules/make-dir": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.3.0.tgz",
- "integrity": "sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==",
- "dev": true,
- "dependencies": {
- "pify": "^3.0.0"
- },
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/update-notifier/node_modules/pify": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz",
- "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=",
- "dev": true,
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/update-notifier/node_modules/semver": {
- "version": "5.7.1",
- "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
- "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==",
- "dev": true,
- "bin": {
- "semver": "bin/semver"
- }
- },
- "node_modules/update-notifier/node_modules/semver-diff": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/semver-diff/-/semver-diff-2.1.0.tgz",
- "integrity": "sha1-S7uEN8jTfksM8aaP1ybsbWRdbTY=",
- "dev": true,
- "dependencies": {
- "semver": "^5.0.3"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/update-notifier/node_modules/string-width": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz",
- "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==",
- "dev": true,
- "dependencies": {
- "emoji-regex": "^7.0.1",
- "is-fullwidth-code-point": "^2.0.0",
- "strip-ansi": "^5.1.0"
- },
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/update-notifier/node_modules/strip-ansi": {
- "version": "5.2.0",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz",
- "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==",
- "dev": true,
- "dependencies": {
- "ansi-regex": "^4.1.0"
- },
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/update-notifier/node_modules/term-size": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/term-size/-/term-size-1.2.0.tgz",
- "integrity": "sha1-RYuDiH8oj8Vtb/+/rSYuJmOO+mk=",
- "dev": true,
- "dependencies": {
- "execa": "^0.7.0"
- },
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/update-notifier/node_modules/type-fest": {
- "version": "0.3.1",
- "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.3.1.tgz",
- "integrity": "sha512-cUGJnCdr4STbePCgqNFbpVNCepa+kAVohJs1sLhxzdH+gnEoOd8VhbYa7pD3zZYGiURWM2xzEII3fQcRizDkYQ==",
- "dev": true,
- "engines": {
- "node": ">=6"
- }
- },
"node_modules/update-notifier/node_modules/unique-string": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/unique-string/-/unique-string-1.0.0.tgz",
@@ -8990,52 +8232,6 @@
"node": ">=4"
}
},
- "node_modules/update-notifier/node_modules/widest-line": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-2.0.1.tgz",
- "integrity": "sha512-Ba5m9/Fa4Xt9eb2ELXt77JxVDV8w7qQrH0zS/TWSJdLyAwQjWoOzpzj5lwVftDz6n/EOu3tNACS84v509qwnJA==",
- "dev": true,
- "dependencies": {
- "string-width": "^2.1.1"
- },
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/update-notifier/node_modules/widest-line/node_modules/ansi-regex": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.1.tgz",
- "integrity": "sha512-+O9Jct8wf++lXxxFc4hc8LsjaSq0HFzzL7cVsw8pRDIPdjKD2mT4ytDZlLuSBZ4cLKZFXIrMGO7DbQCtMJJMKw==",
- "dev": true,
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/update-notifier/node_modules/widest-line/node_modules/string-width": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz",
- "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==",
- "dev": true,
- "dependencies": {
- "is-fullwidth-code-point": "^2.0.0",
- "strip-ansi": "^4.0.0"
- },
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/update-notifier/node_modules/widest-line/node_modules/strip-ansi": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz",
- "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=",
- "dev": true,
- "dependencies": {
- "ansi-regex": "^3.0.0"
- },
- "engines": {
- "node": ">=4"
- }
- },
"node_modules/update-notifier/node_modules/write-file-atomic": {
"version": "2.4.3",
"resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-2.4.3.tgz",
@@ -9057,9 +8253,9 @@
}
},
"node_modules/uri-js": {
- "version": "4.4.0",
- "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.0.tgz",
- "integrity": "sha512-B0yRTzYdUCCn9n+F4+Gh4yIDtMQcaJsmYBDsTSG8g/OejKBodLQ2IHfN3bM7jUsRXndopT7OIXWdYqc1fjmV6g==",
+ "version": "4.4.1",
+ "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz",
+ "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==",
"dev": true,
"dependencies": {
"punycode": "^2.1.0"
@@ -9102,9 +8298,9 @@
}
},
"node_modules/v8-compile-cache": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.2.0.tgz",
- "integrity": "sha512-gTpR5XQNKFwOd4clxfnhaqvfqMpqEwr4tOtCyz4MtYZX2JYhfr1JvBFKdS+7K/9rfpZR3VLX+YWBbKoxCgS43Q==",
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz",
+ "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==",
"dev": true
},
"node_modules/v8-to-istanbul": {
@@ -9121,15 +8317,6 @@
"node": ">=10.12.0"
}
},
- "node_modules/v8-to-istanbul/node_modules/source-map": {
- "version": "0.7.3",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz",
- "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==",
- "dev": true,
- "engines": {
- "node": ">= 8"
- }
- },
"node_modules/vary": {
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz",
@@ -9139,40 +8326,32 @@
"node": ">= 0.8"
}
},
- "node_modules/verror": {
- "version": "1.10.0",
- "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz",
- "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=",
+ "node_modules/webidl-conversions": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz",
+ "integrity": "sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==",
"dev": true,
- "engines": [
- "node >=0.6.0"
- ],
- "dependencies": {
- "assert-plus": "^1.0.0",
- "core-util-is": "1.0.2",
- "extsprintf": "^1.2.0"
+ "engines": {
+ "node": ">=12"
}
},
- "node_modules/webidl-conversions": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz",
- "integrity": "sha1-JFNCdeKnvGvnvIZhHMFq4KVlSHE=",
- "dev": true
- },
"node_modules/whatwg-fetch": {
- "version": "3.6.1",
- "resolved": "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-3.6.1.tgz",
- "integrity": "sha512-IEmN/ZfmMw6G1hgZpVd0LuZXOQDisrMOZrzYd5x3RAK4bMPlJohKUZWZ9t/QsTvH0dV9TbPDcc2OSuIDcihnHA==",
+ "version": "3.6.2",
+ "resolved": "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-3.6.2.tgz",
+ "integrity": "sha512-bJlen0FcuU/0EMLrdbJ7zOnW6ITZLrZMIarMUVmdKtsGvZna8vxKYaexICWPfZ8qwf9fzNq+UEIZrnSaApt6RA==",
"dev": true
},
"node_modules/whatwg-url": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz",
- "integrity": "sha1-lmRU6HZUYuN2RNNib2dCzotwll0=",
+ "version": "11.0.0",
+ "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-11.0.0.tgz",
+ "integrity": "sha512-RKT8HExMpoYx4igMiVMY83lN6UeITKJlBQ+vR/8ZJ8OCdSiN3RwCq+9gH0+Xzj0+5IrM6i4j/6LuvzbZIQgEcQ==",
"dev": true,
"dependencies": {
- "tr46": "~0.0.3",
- "webidl-conversions": "^3.0.0"
+ "tr46": "^3.0.0",
+ "webidl-conversions": "^7.0.0"
+ },
+ "engines": {
+ "node": ">=12"
}
},
"node_modules/which": {
@@ -9213,15 +8392,15 @@
"dev": true
},
"node_modules/widest-line": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-3.1.0.tgz",
- "integrity": "sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg==",
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-2.0.1.tgz",
+ "integrity": "sha512-Ba5m9/Fa4Xt9eb2ELXt77JxVDV8w7qQrH0zS/TWSJdLyAwQjWoOzpzj5lwVftDz6n/EOu3tNACS84v509qwnJA==",
"dev": true,
"dependencies": {
- "string-width": "^4.0.0"
+ "string-width": "^2.1.1"
},
"engines": {
- "node": ">=8"
+ "node": ">=4"
}
},
"node_modules/word-wrap": {
@@ -9302,6 +8481,20 @@
"integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
"dev": true
},
+ "node_modules/wrap-ansi/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/wrappy": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
@@ -9321,22 +8514,26 @@
}
},
"node_modules/ws": {
- "version": "3.3.2",
- "resolved": "https://registry.npmjs.org/ws/-/ws-3.3.2.tgz",
- "integrity": "sha512-t+WGpsNxhMR4v6EClXS8r8km5ZljKJzyGhJf7goJz9k5Ye3+b5Bvno5rjqPuIBn5mnn5GBb7o8IrIWHxX1qOLQ==",
+ "version": "7.5.7",
+ "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.7.tgz",
+ "integrity": "sha512-KMvVuFzpKBuiIXW3E4u3mySRO2/mCHSyZDJQM5NQ9Q9KHWHWh0NHgfbRMLLrceUK5qAL4ytALJbpRMjixFZh8A==",
"dev": true,
- "dependencies": {
- "async-limiter": "~1.0.0",
- "safe-buffer": "~5.1.0",
- "ultron": "~1.1.0"
+ "engines": {
+ "node": ">=8.3.0"
+ },
+ "peerDependencies": {
+ "bufferutil": "^4.0.1",
+ "utf-8-validate": "^5.0.2"
+ },
+ "peerDependenciesMeta": {
+ "bufferutil": {
+ "optional": true
+ },
+ "utf-8-validate": {
+ "optional": true
+ }
}
},
- "node_modules/ws/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/xdg-basedir": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-4.0.0.tgz",
@@ -9346,29 +8543,16 @@
"node": ">=8"
}
},
- "node_modules/xmldom": {
- "version": "0.1.19",
- "resolved": "https://registry.npmjs.org/xmldom/-/xmldom-0.1.19.tgz",
- "integrity": "sha1-Yx/Ad3bv2EEYvyUXGzftTQdaCrw=",
- "deprecated": "Deprecated due to CVE-2021-21366 resolved in 0.5.0",
- "dev": true,
- "engines": {
- "node": ">=0.1"
- }
- },
"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"
- }
+ "version": "4.0.3",
+ "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz",
+ "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==",
+ "dev": true
},
"node_modules/yallist": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz",
- "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=",
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
+ "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
"dev": true
},
"node_modules/yargs": {
@@ -9394,14 +8578,29 @@
}
},
"node_modules/yargs-parser": {
- "version": "18.1.3",
- "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz",
- "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==",
+ "version": "13.1.2",
+ "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.2.tgz",
+ "integrity": "sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==",
"dev": true,
"dependencies": {
"camelcase": "^5.0.0",
"decamelize": "^1.2.0"
- },
+ }
+ },
+ "node_modules/yargs-parser/node_modules/camelcase": {
+ "version": "5.3.1",
+ "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz",
+ "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==",
+ "dev": true,
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/yargs/node_modules/camelcase": {
+ "version": "5.3.1",
+ "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz",
+ "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==",
+ "dev": true,
"engines": {
"node": ">=6"
}
@@ -9476,11 +8675,32 @@
"node": ">=8"
}
},
- "node_modules/yargs/node_modules/y18n": {
- "version": "4.0.3",
- "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz",
- "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==",
- "dev": true
+ "node_modules/yargs/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/yargs/node_modules/yargs-parser": {
+ "version": "18.1.3",
+ "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz",
+ "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==",
+ "dev": true,
+ "dependencies": {
+ "camelcase": "^5.0.0",
+ "decamelize": "^1.2.0"
+ },
+ "engines": {
+ "node": ">=6"
+ }
},
"node_modules/yauzl": {
"version": "2.10.0",
@@ -9519,33 +8739,20 @@
"dev": true
},
"@babel/highlight": {
- "version": "7.16.10",
- "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.16.10.tgz",
- "integrity": "sha512-5FnTQLSLswEj6IkgVw5KusNUUFY9ZGqe/TRFnP/BKYHYgfh7tc+C7mwiy95/yNP7Dh9x580Vv8r7u7ZfTBFxdw==",
+ "version": "7.17.9",
+ "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.17.9.tgz",
+ "integrity": "sha512-J9PfEKCbFIv2X5bjTMiZu6Vf341N05QIY+d6FvVKynkG1S7G0j3I0QoRtWIrXhZ+/Nlb5Q0MzqL7TokEJ5BNHg==",
"dev": true,
"requires": {
"@babel/helper-validator-identifier": "^7.16.7",
"chalk": "^2.0.0",
"js-tokens": "^4.0.0"
- },
- "dependencies": {
- "chalk": {
- "version": "2.4.2",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
- "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
- "dev": true,
- "requires": {
- "ansi-styles": "^3.2.1",
- "escape-string-regexp": "^1.0.5",
- "supports-color": "^5.3.0"
- }
- }
}
},
"@eslint/eslintrc": {
- "version": "1.2.1",
- "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.2.1.tgz",
- "integrity": "sha512-bxvbYnBPN1Gibwyp6NrpnFzA3YtRL3BBAyEAFVIpNTm2Rn4Vy87GA5M4aSn3InRrlsbX5N0GW7XIx+U4SAEKdQ==",
+ "version": "1.2.2",
+ "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.2.2.tgz",
+ "integrity": "sha512-lTVWHs7O2hjBFZunXTZYnYqtB9GakA1lnxIf+gKq2nY5gxkkNi/lQvveW6t8gFdOHTg6nG50Xs95PrLqVpcaLg==",
"dev": true,
"requires": {
"ajv": "^6.12.4",
@@ -9577,9 +8784,9 @@
}
},
"@esm-bundle/chai": {
- "version": "4.3.4",
- "resolved": "https://registry.npmjs.org/@esm-bundle/chai/-/chai-4.3.4.tgz",
- "integrity": "sha512-6Tx35wWiNw7X0nLY9RMx8v3EL8SacCFW+eEZOE9Hc+XxmU5HFE2AFEg+GehUZpiyDGwVvPH75ckGlqC7coIPnA==",
+ "version": "4.3.4-fix.0",
+ "resolved": "https://registry.npmjs.org/@esm-bundle/chai/-/chai-4.3.4-fix.0.tgz",
+ "integrity": "sha512-26SKdM4uvDWlY8/OOOxSB1AqQWeBosCX3wRYUZO7enTAj03CtVxIiCimYVG2WpULcyV51qapK4qTovwkUr5Mlw==",
"dev": true,
"requires": {
"@types/chai": "^4.2.12"
@@ -9609,19 +8816,19 @@
"dev": true
},
"@lhci/cli": {
- "version": "0.7.0",
- "resolved": "https://registry.npmjs.org/@lhci/cli/-/cli-0.7.0.tgz",
- "integrity": "sha512-MyV+KtoOnXbhvu4Y4iE8EE5haL+czO9+RpVgU/cFL8jueFfXV9FxJ7QmAs+U68HmjK+fOTgmkPu0k7nGn8K0pw==",
+ "version": "0.9.0",
+ "resolved": "https://registry.npmjs.org/@lhci/cli/-/cli-0.9.0.tgz",
+ "integrity": "sha512-cEfWHCWuBQKUrwy3minHxRYtiAZ//m8XRSZvFQ2zX2Lzz+J/3xlBKQTfSiln3sIXTTWzEHaucDs70rQS8EQ/vQ==",
"dev": true,
"requires": {
- "@lhci/utils": "0.7.0",
+ "@lhci/utils": "0.9.0",
"chrome-launcher": "^0.13.4",
"compression": "^1.7.4",
"debug": "^4.3.1",
"express": "^4.17.1",
"inquirer": "^6.3.1",
"isomorphic-fetch": "^3.0.0",
- "lighthouse": "7.0.0",
+ "lighthouse": "9.3.0",
"lighthouse-logger": "1.2.0",
"open": "^7.1.0",
"tmp": "^0.1.0",
@@ -9629,52 +8836,31 @@
"uuid": "^8.3.1",
"yargs": "^15.4.1",
"yargs-parser": "^13.1.2"
- },
- "dependencies": {
- "tmp": {
- "version": "0.1.0",
- "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.1.0.tgz",
- "integrity": "sha512-J7Z2K08jbGcdA1kkQpJSqLF6T0tdQqpR2pnSUXsIchbPdTI9v3e85cLW0d6WDhwuAleOV71j2xWs8qMPfK7nKw==",
- "dev": true,
- "requires": {
- "rimraf": "^2.6.3"
- }
- },
- "yargs-parser": {
- "version": "13.1.2",
- "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.2.tgz",
- "integrity": "sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==",
- "dev": true,
- "requires": {
- "camelcase": "^5.0.0",
- "decamelize": "^1.2.0"
- }
- }
}
},
"@lhci/utils": {
- "version": "0.7.0",
- "resolved": "https://registry.npmjs.org/@lhci/utils/-/utils-0.7.0.tgz",
- "integrity": "sha512-YDAoNWc4ThMwmOl8xJ9qdy00f37Zq0f634QoKcOMw3sqQRd6wNWztY9kiM4gEDhigoEy99y0GaB+hYokI313Fg==",
+ "version": "0.9.0",
+ "resolved": "https://registry.npmjs.org/@lhci/utils/-/utils-0.9.0.tgz",
+ "integrity": "sha512-uHpGX71Mqay4XLxkuMdZhH+goKKygTW9Uc2s2SewRW64TLjUNRSMn2L6wG9cZx6gntD4zBdKFZWoF+dg2yx9MA==",
"dev": true,
"requires": {
"debug": "^4.3.1",
"isomorphic-fetch": "^3.0.0",
"js-yaml": "^3.13.1",
- "lighthouse": "7.0.0",
+ "lighthouse": "9.3.0",
"tree-kill": "^1.2.1"
}
},
"@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==",
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/@lit/reactive-element/-/reactive-element-1.3.2.tgz",
+ "integrity": "sha512-A2e18XzPMrIh35nhIdE4uoqRzoIpEU5vZYuQN4S3Ee1zkGdYC27DP12pewbw/RLgPHzaE4kx/YqxMzebOpm0dA==",
"dev": true
},
"@mdn/browser-compat-data": {
- "version": "4.1.17",
- "resolved": "https://registry.npmjs.org/@mdn/browser-compat-data/-/browser-compat-data-4.1.17.tgz",
- "integrity": "sha512-o7hCdjCR5S1beYsOlfwqeXMujqlryV8/nJlM7xmv8HIAb4E4SN/YOE4cwmvZErUkgiVZkApvUDePDnIcxthmAQ==",
+ "version": "4.1.19",
+ "resolved": "https://registry.npmjs.org/@mdn/browser-compat-data/-/browser-compat-data-4.1.19.tgz",
+ "integrity": "sha512-zDrdjvX2dwunW4HOGwpibLHvfnDRQOJ89bGnkQ7TXZ7H7JSehbg2Gf0zNbML+R/03QItZ7EI6QHloOJ2znFSdA==",
"dev": true
},
"@nodelib/fs.scandir": {
@@ -9728,53 +8914,34 @@
"dev": true
},
"@open-wc/scoped-elements": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/@open-wc/scoped-elements/-/scoped-elements-2.0.1.tgz",
- "integrity": "sha512-JS6ozxUFwFX3+Er91v9yQzNIaFn7OnE0iESKTbFvkkKdNwvAPtp1fpckBKIvWk8Ae9ZcoI9DYZuT2DDbMPcadA==",
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/@open-wc/scoped-elements/-/scoped-elements-2.1.1.tgz",
+ "integrity": "sha512-qQAtVIK2H1oUIM2oSrCBnf1+ZGHd2nIowt1tete+Dn9rNXIogAMJlUBY/R1NR9MuuJvQ1MeFjgQoDmb05TUdkw==",
"dev": true,
"requires": {
"@lit/reactive-element": "^1.0.0",
- "@open-wc/dedupe-mixin": "^1.3.0",
- "@webcomponents/scoped-custom-element-registry": "^0.0.3"
+ "@open-wc/dedupe-mixin": "^1.3.0"
}
},
"@open-wc/semantic-dom-diff": {
- "version": "0.19.5",
- "resolved": "https://registry.npmjs.org/@open-wc/semantic-dom-diff/-/semantic-dom-diff-0.19.5.tgz",
- "integrity": "sha512-Wi0Fuj3dzqlWClU0y+J4k/nqTcH0uwgOWxZXPyeyG3DdvuyyjgiT4L4I/s6iVShWQvvEsyXnj7yVvixAo3CZvg==",
+ "version": "0.19.6",
+ "resolved": "https://registry.npmjs.org/@open-wc/semantic-dom-diff/-/semantic-dom-diff-0.19.6.tgz",
+ "integrity": "sha512-r6P097lboF7yTFeoExV/8Qcij/k7CXKG7JMFUh4L9ph9IRhQKBAc5UvDXIAHYdVhIFvNblyghjJo5c+quCgm3g==",
"dev": true,
"requires": {
- "@types/chai": "^4.2.11",
- "@web/test-runner-commands": "^0.5.7"
- },
- "dependencies": {
- "@web/test-runner-commands": {
- "version": "0.5.13",
- "resolved": "https://registry.npmjs.org/@web/test-runner-commands/-/test-runner-commands-0.5.13.tgz",
- "integrity": "sha512-FXnpUU89ALbRlh9mgBd7CbSn5uzNtr8gvnQZPOvGLDAJ7twGvZdUJEAisPygYx2BLPSFl3/Mre8pH8zshJb8UQ==",
- "dev": true,
- "requires": {
- "@web/test-runner-core": "^0.10.20",
- "mkdirp": "^1.0.4"
- }
- },
- "mkdirp": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz",
- "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==",
- "dev": true
- }
+ "@types/chai": "^4.3.1",
+ "@web/test-runner-commands": "^0.6.1"
}
},
"@open-wc/testing": {
- "version": "3.1.2",
- "resolved": "https://registry.npmjs.org/@open-wc/testing/-/testing-3.1.2.tgz",
- "integrity": "sha512-2KjEszLItrIEZwCLFjWOSy4rnLzLOpgckrKfZjNA39PpFR3xD9bqYU30TTnLRHBk2B/0ZUbHglyca3iwcF964w==",
+ "version": "3.1.4",
+ "resolved": "https://registry.npmjs.org/@open-wc/testing/-/testing-3.1.4.tgz",
+ "integrity": "sha512-z2iuPmcSq1du5ufZ7uDkNp56fVi0iFeCrWOi7EAf7Xd7iUXhfzQ56qoVYhnaeqxLws96bEvd/c6wX0AoGja9PA==",
"dev": true,
"requires": {
- "@esm-bundle/chai": "^4.3.4",
+ "@esm-bundle/chai": "^4.3.4-fix.0",
"@open-wc/chai-dom-equals": "^0.12.36",
- "@open-wc/semantic-dom-diff": "^0.19.5",
+ "@open-wc/semantic-dom-diff": "^0.19.6",
"@open-wc/testing-helpers": "^2.1.2",
"@types/chai": "^4.2.11",
"@types/chai-dom": "^0.0.9",
@@ -9794,15 +8961,15 @@
}
},
"@rollup/plugin-node-resolve": {
- "version": "11.2.1",
- "resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-11.2.1.tgz",
- "integrity": "sha512-yc2n43jcqVyGE2sqV5/YCmocy9ArjVAP/BeXyTtADTBBX6V0e5UMqwO8CdQ0kzjb6zu5P1qMzsScCMRvE9OlVg==",
+ "version": "13.3.0",
+ "resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-13.3.0.tgz",
+ "integrity": "sha512-Lus8rbUo1eEcnS4yTFKLZrVumLPY+YayBdWXgFSHYhTT2iJbMhoaaBL3xl5NCdeRytErGr8tZ0L71BMRmnlwSw==",
"dev": true,
"requires": {
"@rollup/pluginutils": "^3.1.0",
"@types/resolve": "1.17.1",
- "builtin-modules": "^3.1.0",
"deepmerge": "^4.2.2",
+ "is-builtin-module": "^3.1.0",
"is-module": "^1.0.0",
"resolve": "^1.19.0"
}
@@ -9834,9 +9001,9 @@
}
},
"@sinonjs/fake-timers": {
- "version": "9.1.1",
- "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-9.1.1.tgz",
- "integrity": "sha512-Wp5vwlZ0lOqpSYGKqr53INws9HLkt6JDc/pDZcPf7bchQnrXJMXPns8CXx0hFikMSGSWfvtvvpb2gtMVfkWagA==",
+ "version": "9.1.2",
+ "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-9.1.2.tgz",
+ "integrity": "sha512-BPS4ynJW/o92PUR4wgriz2Ud5gpST5vz6GQfMixEDK0Z8ZCUv2M7SkBLykH56T++Xs+8ln9zTGbOvNGIe02/jw==",
"dev": true,
"requires": {
"@sinonjs/commons": "^1.7.0"
@@ -9923,9 +9090,9 @@
}
},
"@types/chai": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.3.0.tgz",
- "integrity": "sha512-/ceqdqeRraGolFTcfoXNiqjyQhZzbINDngeoAq9GoHa8PPK1yNzTaxWjA6BFWp5Ua9JpXEMSS4s5i9tS0hOJtw==",
+ "version": "4.3.1",
+ "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.3.1.tgz",
+ "integrity": "sha512-/zPMqDkzSZ8t3VtxOa4KPq7uzzW978M9Tvh+j7GHKuo6k6GTLxPJ4J5gE5cjfJ26pnXst0N5Hax8Sr0T2Mi9zQ==",
"dev": true
},
"@types/chai-dom": {
@@ -9963,9 +9130,9 @@
}
},
"@types/content-disposition": {
- "version": "0.5.4",
- "resolved": "https://registry.npmjs.org/@types/content-disposition/-/content-disposition-0.5.4.tgz",
- "integrity": "sha512-0mPF08jn9zYI0n0Q/Pnz7C4kThdSt+6LD4amsrYDDpgBfrVWa3TcCOxKX1zkGgYniGagRv8heN2cbh+CAn+uuQ==",
+ "version": "0.5.5",
+ "resolved": "https://registry.npmjs.org/@types/content-disposition/-/content-disposition-0.5.5.tgz",
+ "integrity": "sha512-v6LCdKfK6BwcqMo+wYW05rLS12S0ZO0Fl4w1h4aaZMD7bqT3gVUns6FvLJKGZHQmYn3SX55JWGpziwJRwVgutA==",
"dev": true
},
"@types/convert-source-map": {
@@ -10113,9 +9280,9 @@
"dev": true
},
"@types/node": {
- "version": "14.14.31",
- "resolved": "https://registry.npmjs.org/@types/node/-/node-14.14.31.tgz",
- "integrity": "sha512-vFHy/ezP5qI0rFgJ7aQnjDXwAMrG0KqqIH7tQG5PPv3BWBayOPIQNBjVc/P6hhdZfMx51REc6tfDNXHUio893g==",
+ "version": "17.0.31",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.31.tgz",
+ "integrity": "sha512-AR0x5HbXGqkEx9CadRH3EBYx/VkiUgZIhP4wvPn/+5KIsgpNoyFaRlVe0Zlx9gRtg8fA06a9tskE2MSN7TcG4Q==",
"dev": true
},
"@types/parse5": {
@@ -10196,9 +9363,9 @@
}
},
"@types/yauzl": {
- "version": "2.9.2",
- "resolved": "https://registry.npmjs.org/@types/yauzl/-/yauzl-2.9.2.tgz",
- "integrity": "sha512-8uALY5LTvSuHgloDVUvWP3pIauILm+8/0pDMokuDYIoNsOkSwd5AiHBTSEJjKTDcZr5z8UpgOWZkxBF4iJftoA==",
+ "version": "2.10.0",
+ "resolved": "https://registry.npmjs.org/@types/yauzl/-/yauzl-2.10.0.tgz",
+ "integrity": "sha512-Cn6WYCm0tXv8p6k+A8PvbDG763EDpBoTzHdA+Q/MF6H3sapGjCm9NzoaJncJS9tUKSuCoDs9XHxYYsQDgxR6kw==",
"dev": true,
"optional": true,
"requires": {
@@ -10206,14 +9373,14 @@
}
},
"@typescript-eslint/eslint-plugin": {
- "version": "5.16.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.16.0.tgz",
- "integrity": "sha512-SJoba1edXvQRMmNI505Uo4XmGbxCK9ARQpkvOd00anxzri9RNQk0DDCxD+LIl+jYhkzOJiOMMKYEHnHEODjdCw==",
+ "version": "5.22.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.22.0.tgz",
+ "integrity": "sha512-YCiy5PUzpAeOPGQ7VSGDEY2NeYUV1B0swde2e0HzokRsHBYjSdF6DZ51OuRZxVPHx0032lXGLvOMls91D8FXlg==",
"dev": true,
"requires": {
- "@typescript-eslint/scope-manager": "5.16.0",
- "@typescript-eslint/type-utils": "5.16.0",
- "@typescript-eslint/utils": "5.16.0",
+ "@typescript-eslint/scope-manager": "5.22.0",
+ "@typescript-eslint/type-utils": "5.22.0",
+ "@typescript-eslint/utils": "5.22.0",
"debug": "^4.3.2",
"functional-red-black-tree": "^1.0.1",
"ignore": "^5.1.8",
@@ -10223,52 +9390,52 @@
}
},
"@typescript-eslint/parser": {
- "version": "5.16.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.16.0.tgz",
- "integrity": "sha512-fkDq86F0zl8FicnJtdXakFs4lnuebH6ZADDw6CYQv0UZeIjHvmEw87m9/29nk2Dv5Lmdp0zQ3zDQhiMWQf/GbA==",
+ "version": "5.22.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.22.0.tgz",
+ "integrity": "sha512-piwC4krUpRDqPaPbFaycN70KCP87+PC5WZmrWs+DlVOxxmF+zI6b6hETv7Quy4s9wbkV16ikMeZgXsvzwI3icQ==",
"dev": true,
"requires": {
- "@typescript-eslint/scope-manager": "5.16.0",
- "@typescript-eslint/types": "5.16.0",
- "@typescript-eslint/typescript-estree": "5.16.0",
+ "@typescript-eslint/scope-manager": "5.22.0",
+ "@typescript-eslint/types": "5.22.0",
+ "@typescript-eslint/typescript-estree": "5.22.0",
"debug": "^4.3.2"
}
},
"@typescript-eslint/scope-manager": {
- "version": "5.16.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.16.0.tgz",
- "integrity": "sha512-P+Yab2Hovg8NekLIR/mOElCDPyGgFZKhGoZA901Yax6WR6HVeGLbsqJkZ+Cvk5nts/dAlFKm8PfL43UZnWdpIQ==",
+ "version": "5.22.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.22.0.tgz",
+ "integrity": "sha512-yA9G5NJgV5esANJCO0oF15MkBO20mIskbZ8ijfmlKIvQKg0ynVKfHZ15/nhAJN5m8Jn3X5qkwriQCiUntC9AbA==",
"dev": true,
"requires": {
- "@typescript-eslint/types": "5.16.0",
- "@typescript-eslint/visitor-keys": "5.16.0"
+ "@typescript-eslint/types": "5.22.0",
+ "@typescript-eslint/visitor-keys": "5.22.0"
}
},
"@typescript-eslint/type-utils": {
- "version": "5.16.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.16.0.tgz",
- "integrity": "sha512-SKygICv54CCRl1Vq5ewwQUJV/8padIWvPgCxlWPGO/OgQLCijY9G7lDu6H+mqfQtbzDNlVjzVWQmeqbLMBLEwQ==",
+ "version": "5.22.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.22.0.tgz",
+ "integrity": "sha512-iqfLZIsZhK2OEJ4cQ01xOq3NaCuG5FQRKyHicA3xhZxMgaxQazLUHbH/B2k9y5i7l3+o+B5ND9Mf1AWETeMISA==",
"dev": true,
"requires": {
- "@typescript-eslint/utils": "5.16.0",
+ "@typescript-eslint/utils": "5.22.0",
"debug": "^4.3.2",
"tsutils": "^3.21.0"
}
},
"@typescript-eslint/types": {
- "version": "5.16.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.16.0.tgz",
- "integrity": "sha512-oUorOwLj/3/3p/HFwrp6m/J2VfbLC8gjW5X3awpQJ/bSG+YRGFS4dpsvtQ8T2VNveV+LflQHjlLvB6v0R87z4g==",
+ "version": "5.22.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.22.0.tgz",
+ "integrity": "sha512-T7owcXW4l0v7NTijmjGWwWf/1JqdlWiBzPqzAWhobxft0SiEvMJB56QXmeCQjrPuM8zEfGUKyPQr/L8+cFUBLw==",
"dev": true
},
"@typescript-eslint/typescript-estree": {
- "version": "5.16.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.16.0.tgz",
- "integrity": "sha512-SE4VfbLWUZl9MR+ngLSARptUv2E8brY0luCdgmUevU6arZRY/KxYoLI/3V/yxaURR8tLRN7bmZtJdgmzLHI6pQ==",
+ "version": "5.22.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.22.0.tgz",
+ "integrity": "sha512-EyBEQxvNjg80yinGE2xdhpDYm41so/1kOItl0qrjIiJ1kX/L/L8WWGmJg8ni6eG3DwqmOzDqOhe6763bF92nOw==",
"dev": true,
"requires": {
- "@typescript-eslint/types": "5.16.0",
- "@typescript-eslint/visitor-keys": "5.16.0",
+ "@typescript-eslint/types": "5.22.0",
+ "@typescript-eslint/visitor-keys": "5.22.0",
"debug": "^4.3.2",
"globby": "^11.0.4",
"is-glob": "^4.0.3",
@@ -10277,26 +9444,26 @@
}
},
"@typescript-eslint/utils": {
- "version": "5.16.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.16.0.tgz",
- "integrity": "sha512-iYej2ER6AwmejLWMWzJIHy3nPJeGDuCqf8Jnb+jAQVoPpmWzwQOfa9hWVB8GIQE5gsCv/rfN4T+AYb/V06WseQ==",
+ "version": "5.22.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.22.0.tgz",
+ "integrity": "sha512-HodsGb037iobrWSUMS7QH6Hl1kppikjA1ELiJlNSTYf/UdMEwzgj0WIp+lBNb6WZ3zTwb0tEz51j0Wee3iJ3wQ==",
"dev": true,
"requires": {
"@types/json-schema": "^7.0.9",
- "@typescript-eslint/scope-manager": "5.16.0",
- "@typescript-eslint/types": "5.16.0",
- "@typescript-eslint/typescript-estree": "5.16.0",
+ "@typescript-eslint/scope-manager": "5.22.0",
+ "@typescript-eslint/types": "5.22.0",
+ "@typescript-eslint/typescript-estree": "5.22.0",
"eslint-scope": "^5.1.1",
"eslint-utils": "^3.0.0"
}
},
"@typescript-eslint/visitor-keys": {
- "version": "5.16.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.16.0.tgz",
- "integrity": "sha512-jqxO8msp5vZDhikTwq9ubyMHqZ67UIvawohr4qF3KhlpL7gzSjOd+8471H3nh5LyABkaI85laEKKU8SnGUK5/g==",
+ "version": "5.22.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.22.0.tgz",
+ "integrity": "sha512-DbgTqn2Dv5RFWluG88tn0pP6Ex0ROF+dpDO1TNNZdRtLjUr6bdznjA6f/qNqJLjd2PgguAES2Zgxh/JzwzETDg==",
"dev": true,
"requires": {
- "@typescript-eslint/types": "5.16.0",
+ "@typescript-eslint/types": "5.22.0",
"eslint-visitor-keys": "^3.0.0"
}
},
@@ -10319,16 +9486,16 @@
}
},
"@web/dev-server": {
- "version": "0.1.30",
- "resolved": "https://registry.npmjs.org/@web/dev-server/-/dev-server-0.1.30.tgz",
- "integrity": "sha512-nUKR+lq06gaCvH6vKmfhPe/Kka1Xp7yN1FN5NEx+Yk4+9CyxZ3UJt2eHXedrcz+XCafxExW114ElEDgCahJowg==",
+ "version": "0.1.31",
+ "resolved": "https://registry.npmjs.org/@web/dev-server/-/dev-server-0.1.31.tgz",
+ "integrity": "sha512-FGrnVwnL/pIxak1VZgOgnwcxvP90gx2LmXeU56nvZQ3CWNMAdS1rnQI3jMjMk6FwUt/wnlLk7pl6xGkm6iNwHA==",
"dev": true,
"requires": {
"@babel/code-frame": "^7.12.11",
"@types/command-line-args": "^5.0.0",
"@web/config-loader": "^0.1.3",
"@web/dev-server-core": "^0.3.17",
- "@web/dev-server-rollup": "^0.3.13",
+ "@web/dev-server-rollup": "^0.3.16",
"camelcase": "^6.2.0",
"command-line-args": "^5.1.1",
"command-line-usage": "^6.1.1",
@@ -10340,12 +9507,6 @@
"portfinder": "^1.0.28"
},
"dependencies": {
- "camelcase": {
- "version": "6.3.0",
- "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz",
- "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==",
- "dev": true
- },
"open": {
"version": "8.4.0",
"resolved": "https://registry.npmjs.org/open/-/open-8.4.0.tgz",
@@ -10383,42 +9544,6 @@
"parse5": "^6.0.1",
"picomatch": "^2.2.2",
"ws": "^7.4.2"
- },
- "dependencies": {
- "get-stream": {
- "version": "6.0.1",
- "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz",
- "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==",
- "dev": true
- },
- "is-stream": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz",
- "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==",
- "dev": true
- },
- "lru-cache": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz",
- "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==",
- "dev": true,
- "requires": {
- "yallist": "^4.0.0"
- }
- },
- "ws": {
- "version": "7.5.7",
- "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.7.tgz",
- "integrity": "sha512-KMvVuFzpKBuiIXW3E4u3mySRO2/mCHSyZDJQM5NQ9Q9KHWHWh0NHgfbRMLLrceUK5qAL4ytALJbpRMjixFZh8A==",
- "dev": true,
- "requires": {}
- },
- "yallist": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
- "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
- "dev": true
- }
}
},
"@web/dev-server-esbuild": {
@@ -10435,44 +9560,17 @@
}
},
"@web/dev-server-rollup": {
- "version": "0.3.15",
- "resolved": "https://registry.npmjs.org/@web/dev-server-rollup/-/dev-server-rollup-0.3.15.tgz",
- "integrity": "sha512-hhxvBmNIY19vXeocYB1IBOuhpVpy1L7jbwBarmvC0QJKZsgkxssNTzXJ8iga70c2+H0c/rBz1xUaKuAcov0uOA==",
+ "version": "0.3.17",
+ "resolved": "https://registry.npmjs.org/@web/dev-server-rollup/-/dev-server-rollup-0.3.17.tgz",
+ "integrity": "sha512-Fp8d3QmOi6ctJGAndf93pmcyPBEE7TmsIJ9xd+W+LjXzTVmH4YyOOjZAIXqf9GWjXd0CwquL/OddTZvMzC8jiQ==",
"dev": true,
"requires": {
- "@rollup/plugin-node-resolve": "^11.0.1",
+ "@rollup/plugin-node-resolve": "^13.0.4",
"@web/dev-server-core": "^0.3.16",
"nanocolors": "^0.2.1",
"parse5": "^6.0.1",
"rollup": "^2.66.1",
"whatwg-url": "^11.0.0"
- },
- "dependencies": {
- "tr46": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/tr46/-/tr46-3.0.0.tgz",
- "integrity": "sha512-l7FvfAHlcmulp8kr+flpQZmVwtu7nfRV7NZujtN0OqES8EL4O4e0qqzL0DC5gAvx/ZC/9lk6rhcUwYvkBnBnYA==",
- "dev": true,
- "requires": {
- "punycode": "^2.1.1"
- }
- },
- "webidl-conversions": {
- "version": "7.0.0",
- "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz",
- "integrity": "sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==",
- "dev": true
- },
- "whatwg-url": {
- "version": "11.0.0",
- "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-11.0.0.tgz",
- "integrity": "sha512-RKT8HExMpoYx4igMiVMY83lN6UeITKJlBQ+vR/8ZJ8OCdSiN3RwCq+9gH0+Xzj0+5IrM6i4j/6LuvzbZIQgEcQ==",
- "dev": true,
- "requires": {
- "tr46": "^3.0.0",
- "webidl-conversions": "^7.0.0"
- }
- }
}
},
"@web/parse5-utils": {
@@ -10507,20 +9605,6 @@
"nanocolors": "^0.2.1",
"portfinder": "^1.0.28",
"source-map": "^0.7.3"
- },
- "dependencies": {
- "camelcase": {
- "version": "6.3.0",
- "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz",
- "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==",
- "dev": true
- },
- "source-map": {
- "version": "0.7.3",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz",
- "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==",
- "dev": true
- }
}
},
"@web/test-runner-chrome": {
@@ -10563,20 +9647,12 @@
"requires": {
"@web/test-runner-core": "^0.10.20",
"mkdirp": "^1.0.4"
- },
- "dependencies": {
- "mkdirp": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz",
- "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==",
- "dev": true
- }
}
},
"@web/test-runner-core": {
- "version": "0.10.25",
- "resolved": "https://registry.npmjs.org/@web/test-runner-core/-/test-runner-core-0.10.25.tgz",
- "integrity": "sha512-gH8VXyZbwf+sqPiH4cnXYf86SqwBLtou+0LFFCLaDQRbMlrfi5byAISt39fNX2ejd46bF1cZn6DK+mzb/Xjccw==",
+ "version": "0.10.26",
+ "resolved": "https://registry.npmjs.org/@web/test-runner-core/-/test-runner-core-0.10.26.tgz",
+ "integrity": "sha512-HqfweznsH1LVdebAaqn7aMaIUwKeVdBW59f03MsURd/CNV25l0i7kIxkFF+6OTGhjiGJW5pTTzMPHND4oS6YgA==",
"dev": true,
"requires": {
"@babel/code-frame": "^7.12.11",
@@ -10617,12 +9693,6 @@
"is-docker": "^2.1.1",
"is-wsl": "^2.2.0"
}
- },
- "source-map": {
- "version": "0.7.3",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz",
- "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==",
- "dev": true
}
}
},
@@ -10648,26 +9718,20 @@
"@web/test-runner-core": "^0.10.20"
}
},
- "@webcomponents/scoped-custom-element-registry": {
- "version": "0.0.3",
- "resolved": "https://registry.npmjs.org/@webcomponents/scoped-custom-element-registry/-/scoped-custom-element-registry-0.0.3.tgz",
- "integrity": "sha512-lpSzgDCGbM99dytb3+J3Suo4+Bk1E13MPnWB42JK8GwxSAxFz+tC7TTv2hhDSIE2IirGNKNKCf3m08ecu6eAsQ==",
- "dev": true
- },
"accepts": {
- "version": "1.3.7",
- "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz",
- "integrity": "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==",
+ "version": "1.3.8",
+ "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz",
+ "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==",
"dev": true,
"requires": {
- "mime-types": "~2.1.24",
- "negotiator": "0.6.2"
+ "mime-types": "~2.1.34",
+ "negotiator": "0.6.3"
}
},
"acorn": {
- "version": "8.7.0",
- "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.7.0.tgz",
- "integrity": "sha512-V/LGr1APy+PXIwKebEWrkZPwoeoF+w1jiOBUmuxuiUIaOHtob8Qc9BTrYo7VuI5fR8tqsy+buA2WFooR5olqvQ==",
+ "version": "8.7.1",
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.7.1.tgz",
+ "integrity": "sha512-Xx54uLJQZ19lKygFXOWsscKUbsBZW0CPykPhVQdhIeIwrbPmJzqeASDInc8nKBnp/JT6igTs82qPXz069H8I/A==",
"dev": true
},
"acorn-jsx": {
@@ -10675,89 +9739,63 @@
"resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz",
"integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==",
"dev": true,
- "requires": {}
- },
- "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"
- }
- },
- "ajv": {
- "version": "6.12.6",
- "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
- "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==",
- "dev": true,
- "requires": {
- "fast-deep-equal": "^3.1.1",
- "fast-json-stable-stringify": "^2.0.0",
- "json-schema-traverse": "^0.4.1",
- "uri-js": "^4.2.2"
- }
- },
- "ansi-align": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-3.0.0.tgz",
- "integrity": "sha512-ZpClVKqXN3RGBmKibdfWzqCY4lnjEuoNzU5T0oEFpfd/z5qJHVarukridD4juLO2FXMiwUQxr9WqQtaYa8XRYw==",
- "dev": true,
- "requires": {
- "string-width": "^3.0.0"
- },
- "dependencies": {
- "ansi-regex": {
- "version": "4.1.1",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.1.tgz",
- "integrity": "sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==",
- "dev": true
- },
- "emoji-regex": {
- "version": "7.0.3",
- "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz",
- "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==",
- "dev": true
- },
- "string-width": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz",
- "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==",
- "dev": true,
- "requires": {
- "emoji-regex": "^7.0.1",
- "is-fullwidth-code-point": "^2.0.0",
- "strip-ansi": "^5.1.0"
- }
- },
- "strip-ansi": {
- "version": "5.2.0",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz",
- "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==",
- "dev": true,
- "requires": {
- "ansi-regex": "^4.1.0"
- }
- }
+ "requires": {}
+ },
+ "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-escapes": {
- "version": "4.3.1",
- "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.1.tgz",
- "integrity": "sha512-JWF7ocqNrp8u9oqpgV+wH5ftbt+cfvv+PTjOvKLT3AdYly/LmORARfEVT1iyjwN+4MqE5UmVKoAdIBqeoCHgLA==",
+ "ajv": {
+ "version": "6.12.6",
+ "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
+ "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==",
+ "dev": true,
+ "requires": {
+ "fast-deep-equal": "^3.1.1",
+ "fast-json-stable-stringify": "^2.0.0",
+ "json-schema-traverse": "^0.4.1",
+ "uri-js": "^4.2.2"
+ }
+ },
+ "ansi-align": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-3.0.1.tgz",
+ "integrity": "sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w==",
"dev": true,
"requires": {
- "type-fest": "^0.11.0"
+ "string-width": "^4.1.0"
},
"dependencies": {
- "type-fest": {
- "version": "0.11.0",
- "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.11.0.tgz",
- "integrity": "sha512-OdjXJxnCN1AvyLSzeKIgXTXxV+99ZuXl3Hpo9XpJAv9MBcHrrJOQ5kV7ypXOuQie+AmWG25hLbiKdwYTifzcfQ==",
- "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"
+ }
}
}
},
+ "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-escapes": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.2.0.tgz",
+ "integrity": "sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ==",
+ "dev": true
+ },
"ansi-regex": {
"version": "5.0.1",
"resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
@@ -10805,14 +9843,14 @@
"dev": true
},
"array-includes": {
- "version": "3.1.4",
- "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.4.tgz",
- "integrity": "sha512-ZTNSQkmWumEbiHO2GF4GmWxYVTiQyJy2XOTa15sdQSrvKn7l+180egQMqlrMOUMCyLMD7pmyQe4mMDUT6Behrw==",
+ "version": "3.1.5",
+ "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.5.tgz",
+ "integrity": "sha512-iSDYZMMyTPkiFasVqfuAQnWAYcvO/SeBSCGKePoEthjp4LEMTe4uLc7b025o4jAZpHhihh8xPo99TNWUWWkGDQ==",
"dev": true,
"requires": {
"call-bind": "^1.0.2",
- "define-properties": "^1.1.3",
- "es-abstract": "^1.19.1",
+ "define-properties": "^1.1.4",
+ "es-abstract": "^1.19.5",
"get-intrinsic": "^1.1.1",
"is-string": "^1.0.7"
}
@@ -10824,31 +9862,17 @@
"dev": true
},
"array.prototype.flat": {
- "version": "1.2.5",
- "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.2.5.tgz",
- "integrity": "sha512-KaYU+S+ndVqyUnignHftkwc58o3uVU1jzczILJ1tN2YaIZpFIKBiP/x/j97E5MVPsaCloPbqWLB/8qCTVvT2qg==",
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.0.tgz",
+ "integrity": "sha512-12IUEkHsAhA4DY5s0FPgNXIdc8VRSqD9Zp78a5au9abH/SOBrsp082JOWFNTjkMozh8mqcdiKuaLGhPeYztxSw==",
"dev": true,
"requires": {
"call-bind": "^1.0.2",
"define-properties": "^1.1.3",
- "es-abstract": "^1.19.0"
- }
- },
- "asn1": {
- "version": "0.2.4",
- "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz",
- "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==",
- "dev": true,
- "requires": {
- "safer-buffer": "~2.1.0"
+ "es-abstract": "^1.19.2",
+ "es-shim-unscopables": "^1.0.0"
}
},
- "assert-plus": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz",
- "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=",
- "dev": true
- },
"astral-regex": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz",
@@ -10864,40 +9888,16 @@
"lodash": "^4.17.14"
}
},
- "async-limiter": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.1.tgz",
- "integrity": "sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ==",
- "dev": true
- },
- "asynckit": {
- "version": "0.4.0",
- "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
- "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=",
- "dev": true
- },
- "aws-sign2": {
- "version": "0.7.0",
- "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz",
- "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=",
- "dev": true
- },
- "aws4": {
- "version": "1.11.0",
- "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.11.0.tgz",
- "integrity": "sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA==",
- "dev": true
- },
"axe-core": {
- "version": "4.1.1",
- "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.1.1.tgz",
- "integrity": "sha512-5Kgy8Cz6LPC9DJcNb3yjAXTu3XihQgEdnIg50c//zOC/MyLP0Clg+Y8Sh9ZjjnvBrDZU4DgXS9C3T9r4/scGZQ==",
+ "version": "4.4.1",
+ "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.4.1.tgz",
+ "integrity": "sha512-gd1kmb21kwNuWr6BQz8fv6GNECPBnUasepcoLbekws23NVBLODdsClRZ+bQ8+9Uomf3Sm3+Vwn0oYG9NvwnJCw==",
"dev": true
},
"balanced-match": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz",
- "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=",
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
+ "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==",
"dev": true
},
"base64-js": {
@@ -10906,19 +9906,10 @@
"integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==",
"dev": true
},
- "bcrypt-pbkdf": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz",
- "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=",
- "dev": true,
- "requires": {
- "tweetnacl": "^0.14.3"
- }
- },
"binary-extensions": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.1.0.tgz",
- "integrity": "sha512-1Yj8h9Q+QDF5FzhMs/c9+6UntbD5MkRfRwac8DoEm9ZfUBZ7tZ55YcGVAzEe4bXsdQHEk+s9S5wsOKVdZrw0tQ==",
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz",
+ "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==",
"dev": true
},
"bl": {
@@ -10930,39 +9921,34 @@
"buffer": "^5.5.0",
"inherits": "^2.0.4",
"readable-stream": "^3.4.0"
- },
- "dependencies": {
- "readable-stream": {
- "version": "3.6.0",
- "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz",
- "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==",
- "dev": true,
- "requires": {
- "inherits": "^2.0.3",
- "string_decoder": "^1.1.1",
- "util-deprecate": "^1.0.1"
- }
- }
}
},
"body-parser": {
- "version": "1.19.0",
- "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.0.tgz",
- "integrity": "sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw==",
+ "version": "1.20.0",
+ "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.0.tgz",
+ "integrity": "sha512-DfJ+q6EPcGKZD1QWUjSpqp+Q7bDQTsQIF4zfUAtZ6qk+H/3/QRhg9CEp39ss+/T2vw0+HaidC0ecJj/DRLIaKg==",
"dev": true,
"requires": {
- "bytes": "3.1.0",
+ "bytes": "3.1.2",
"content-type": "~1.0.4",
"debug": "2.6.9",
- "depd": "~1.1.2",
- "http-errors": "1.7.2",
+ "depd": "2.0.0",
+ "destroy": "1.2.0",
+ "http-errors": "2.0.0",
"iconv-lite": "0.4.24",
- "on-finished": "~2.3.0",
- "qs": "6.7.0",
- "raw-body": "2.4.0",
- "type-is": "~1.6.17"
+ "on-finished": "2.4.1",
+ "qs": "6.10.3",
+ "raw-body": "2.5.1",
+ "type-is": "~1.6.18",
+ "unpipe": "1.0.0"
},
"dependencies": {
+ "bytes": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz",
+ "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==",
+ "dev": true
+ },
"debug": {
"version": "2.6.9",
"resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
@@ -10981,69 +9967,70 @@
}
},
"boxen": {
- "version": "4.2.0",
- "resolved": "https://registry.npmjs.org/boxen/-/boxen-4.2.0.tgz",
- "integrity": "sha512-eB4uT9RGzg2odpER62bBwSLvUeGC+WbRjjyyFhGsKnc8wp/m0+hQsMUvUe3H2V0D5vw0nBdO1hCJoZo5mKeuIQ==",
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/boxen/-/boxen-3.2.0.tgz",
+ "integrity": "sha512-cU4J/+NodM3IHdSL2yN8bqYqnmlBTidDR4RC7nJs61ZmtGz8VZzM3HLQX0zY5mrSmPtR3xWwsq2jOUQqFZN8+A==",
"dev": true,
"requires": {
"ansi-align": "^3.0.0",
"camelcase": "^5.3.1",
- "chalk": "^3.0.0",
+ "chalk": "^2.4.2",
"cli-boxes": "^2.2.0",
- "string-width": "^4.1.0",
- "term-size": "^2.1.0",
- "type-fest": "^0.8.1",
- "widest-line": "^3.1.0"
+ "string-width": "^3.0.0",
+ "term-size": "^1.2.0",
+ "type-fest": "^0.3.0",
+ "widest-line": "^2.0.0"
},
"dependencies": {
- "ansi-styles": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
- "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
- "dev": true,
- "requires": {
- "color-convert": "^2.0.1"
- }
+ "ansi-regex": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.1.tgz",
+ "integrity": "sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==",
+ "dev": true
},
- "chalk": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz",
- "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==",
+ "camelcase": {
+ "version": "5.3.1",
+ "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz",
+ "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==",
+ "dev": true
+ },
+ "emoji-regex": {
+ "version": "7.0.3",
+ "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz",
+ "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==",
+ "dev": true
+ },
+ "is-fullwidth-code-point": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz",
+ "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=",
+ "dev": true
+ },
+ "string-width": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz",
+ "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==",
"dev": true,
"requires": {
- "ansi-styles": "^4.1.0",
- "supports-color": "^7.1.0"
+ "emoji-regex": "^7.0.1",
+ "is-fullwidth-code-point": "^2.0.0",
+ "strip-ansi": "^5.1.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==",
+ "strip-ansi": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz",
+ "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==",
"dev": true,
"requires": {
- "color-name": "~1.1.4"
+ "ansi-regex": "^4.1.0"
}
},
- "color-name": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
- "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
- "dev": true
- },
- "has-flag": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
- "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
+ "type-fest": {
+ "version": "0.3.1",
+ "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.3.1.tgz",
+ "integrity": "sha512-cUGJnCdr4STbePCgqNFbpVNCepa+kAVohJs1sLhxzdH+gnEoOd8VhbYa7pD3zZYGiURWM2xzEII3fQcRizDkYQ==",
"dev": true
- },
- "supports-color": {
- "version": "7.2.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
- "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
- "dev": true,
- "requires": {
- "has-flag": "^4.0.0"
- }
}
}
},
@@ -11067,15 +10054,15 @@
}
},
"browserslist": {
- "version": "4.20.2",
- "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.20.2.tgz",
- "integrity": "sha512-CQOBCqp/9pDvDbx3xfMi+86pr4KXIf2FDkTTdeuYw8OxS9t898LA1Khq57gtufFILXpfgsSx5woNgsBgvGjpsA==",
+ "version": "4.20.3",
+ "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.20.3.tgz",
+ "integrity": "sha512-NBhymBQl1zM0Y5dQT/O+xiLP9/rzOIQdKM/eMJBAq7yBgaB6krIYLGejrwVYnSHZdqjscB1SPuAjHwxjvN6Wdg==",
"dev": true,
"requires": {
- "caniuse-lite": "^1.0.30001317",
- "electron-to-chromium": "^1.4.84",
+ "caniuse-lite": "^1.0.30001332",
+ "electron-to-chromium": "^1.4.118",
"escalade": "^3.1.1",
- "node-releases": "^2.0.2",
+ "node-releases": "^2.0.3",
"picocolors": "^1.0.0"
}
},
@@ -11102,9 +10089,9 @@
"dev": true
},
"bytes": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz",
- "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==",
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz",
+ "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=",
"dev": true
},
"bytes-iec": {
@@ -11172,27 +10159,15 @@
"dev": true
},
"camelcase": {
- "version": "5.3.1",
- "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz",
- "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==",
+ "version": "6.3.0",
+ "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz",
+ "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==",
"dev": true
},
"caniuse-lite": {
- "version": "1.0.30001320",
- "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001320.tgz",
- "integrity": "sha512-MWPzG54AGdo3nWx7zHZTefseM5Y1ccM7hlQKHRqJkPozUaw3hNbBTMmLn16GG2FUzjR13Cr3NPfhIieX5PzXDA==",
- "dev": true
- },
- "canonicalize": {
- "version": "1.0.5",
- "resolved": "https://registry.npmjs.org/canonicalize/-/canonicalize-1.0.5.tgz",
- "integrity": "sha512-mAjKJPIyP0xqqv6IAkvso07StOmz6cmGtNDg3pXCSzXVZOqka7StIkAhJl/zHOi4M2CgpYfD6aeRWbnrmtvBEA==",
- "dev": true
- },
- "caseless": {
- "version": "0.12.0",
- "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz",
- "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=",
+ "version": "1.0.30001338",
+ "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001338.tgz",
+ "integrity": "sha512-1gLHWyfVoRDsHieO+CaeYe7jSo/MT7D7lhaXUiwwbuR5BwQxORs0f1tAwUSQr3YbxRXJvxHM/PA5FfPQRnsPeQ==",
"dev": true
},
"chai-a11y-axe": {
@@ -11202,65 +10177,17 @@
"dev": true,
"requires": {
"axe-core": "^4.3.3"
- },
- "dependencies": {
- "axe-core": {
- "version": "4.4.1",
- "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.4.1.tgz",
- "integrity": "sha512-gd1kmb21kwNuWr6BQz8fv6GNECPBnUasepcoLbekws23NVBLODdsClRZ+bQ8+9Uomf3Sm3+Vwn0oYG9NvwnJCw==",
- "dev": true
- }
}
},
"chalk": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz",
- "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==",
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
+ "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
"dev": true,
"requires": {
- "ansi-styles": "^4.1.0",
- "supports-color": "^7.1.0"
- },
- "dependencies": {
- "ansi-styles": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
- "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
- "dev": true,
- "requires": {
- "color-convert": "^2.0.1"
- }
- },
- "color-convert": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
- "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
- "dev": true,
- "requires": {
- "color-name": "~1.1.4"
- }
- },
- "color-name": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
- "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
- "dev": true
- },
- "has-flag": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
- "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
- "dev": true
- },
- "supports-color": {
- "version": "7.2.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
- "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
- "dev": true,
- "requires": {
- "has-flag": "^4.0.0"
- }
- }
+ "ansi-styles": "^3.2.1",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^5.3.0"
}
},
"chardet": {
@@ -11311,13 +10238,13 @@
"rimraf": "^3.0.2"
},
"dependencies": {
- "rimraf": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz",
- "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==",
+ "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": {
- "glob": "^7.1.3"
+ "minimist": "^1.2.6"
}
}
}
@@ -11350,9 +10277,9 @@
}
},
"cli-width": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-3.0.0.tgz",
- "integrity": "sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==",
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-2.2.1.tgz",
+ "integrity": "sha512-GRMWDxpOB6Dgk2E5Uo+3eEBvtOOlimMmpbFiKuLFnQzYDavtLFY3K5ona41jgN/WdRZtG7utuVSVTL4HbZHGkw==",
"dev": true
},
"cliui": {
@@ -11364,6 +10291,19 @@
"string-width": "^4.2.0",
"strip-ansi": "^6.0.0",
"wrap-ansi": "^6.2.0"
+ },
+ "dependencies": {
+ "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"
+ }
+ }
}
},
"clone": {
@@ -11412,16 +10352,7 @@
"version": "1.1.3",
"resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
"integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=",
- "dev": true
- },
- "combined-stream": {
- "version": "1.0.8",
- "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz",
- "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==",
- "dev": true,
- "requires": {
- "delayed-stream": "~1.0.0"
- }
+ "dev": true
},
"command-line-args": {
"version": "5.2.1",
@@ -11436,14 +10367,14 @@
}
},
"command-line-usage": {
- "version": "6.1.2",
- "resolved": "https://registry.npmjs.org/command-line-usage/-/command-line-usage-6.1.2.tgz",
- "integrity": "sha512-I+0XN613reAhpBQ6icsPOTwu9cvhc9NtLtUcY2fGYuwm9JZiWBzFDA8w0PHqQjru7Xth7fM/y9TJ13+VKdjh7Q==",
+ "version": "6.1.3",
+ "resolved": "https://registry.npmjs.org/command-line-usage/-/command-line-usage-6.1.3.tgz",
+ "integrity": "sha512-sH5ZSPr+7UStsloltmDh7Ce5fb8XPlHyoPzTpyyMuYCtervL65+ubVZ6Q61cFtFl62UyJlc8/JwERRbAFPUqgw==",
"dev": true,
"requires": {
- "array-back": "^4.0.1",
+ "array-back": "^4.0.2",
"chalk": "^2.4.2",
- "table-layout": "^1.0.1",
+ "table-layout": "^1.0.2",
"typical": "^5.2.0"
},
"dependencies": {
@@ -11453,17 +10384,6 @@
"integrity": "sha512-NbdMezxqf94cnNfWLL7V/im0Ub+Anbb0IoZhvzie8+4HJ4nMQuzHuy49FkGYCJK2yAloZ3meiB6AVMClbrI1vg==",
"dev": true
},
- "chalk": {
- "version": "2.4.2",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
- "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
- "dev": true,
- "requires": {
- "ansi-styles": "^3.2.1",
- "escape-string-regexp": "^1.0.5",
- "supports-color": "^5.3.0"
- }
- },
"typical": {
"version": "5.2.0",
"resolved": "https://registry.npmjs.org/typical/-/typical-5.2.0.tgz",
@@ -11496,12 +10416,6 @@
"vary": "~1.1.2"
},
"dependencies": {
- "bytes": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz",
- "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=",
- "dev": true
- },
"debug": {
"version": "2.6.9",
"resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
@@ -11516,12 +10430,6 @@
"resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
"integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
"dev": true
- },
- "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
}
}
},
@@ -11546,18 +10454,18 @@
}
},
"content-disposition": {
- "version": "0.5.3",
- "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.3.tgz",
- "integrity": "sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g==",
+ "version": "0.5.4",
+ "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz",
+ "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==",
"dev": true,
"requires": {
- "safe-buffer": "5.1.2"
+ "safe-buffer": "5.2.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==",
+ "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
}
}
@@ -11575,20 +10483,12 @@
"dev": true,
"requires": {
"safe-buffer": "~5.1.1"
- },
- "dependencies": {
- "safe-buffer": {
- "version": "5.1.2",
- "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
- "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
- "dev": true
- }
}
},
"cookie": {
- "version": "0.3.1",
- "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.3.1.tgz",
- "integrity": "sha1-5+Ch+e9DtMi6klxcWpboBtFoc7s=",
+ "version": "0.5.0",
+ "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz",
+ "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==",
"dev": true
},
"cookie-signature": {
@@ -11605,22 +10505,8 @@
"requires": {
"depd": "~2.0.0",
"keygrip": "~1.1.0"
- },
- "dependencies": {
- "depd": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz",
- "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==",
- "dev": true
- }
}
},
- "core-util-is": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
- "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=",
- "dev": true
- },
"cross-fetch": {
"version": "3.1.5",
"resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.1.5.tgz",
@@ -11653,6 +10539,12 @@
"integrity": "sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==",
"dev": true
},
+ "csp_evaluator": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/csp_evaluator/-/csp_evaluator-1.1.0.tgz",
+ "integrity": "sha512-TcB+ZH9wZBG314jAUpKHPl1oYbRJV+nAT2YwZ9y4fmUN0FkEJa8e/hKZoOgzLYp1Z/CJdFhbhhGIGh0XG8W54Q==",
+ "dev": true
+ },
"cssom": {
"version": "0.3.8",
"resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.8.tgz",
@@ -11668,15 +10560,6 @@
"cssom": "0.3.x"
}
},
- "dashdash": {
- "version": "1.14.1",
- "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz",
- "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=",
- "dev": true,
- "requires": {
- "assert-plus": "^1.0.0"
- }
- },
"debounce": {
"version": "1.2.1",
"resolved": "https://registry.npmjs.org/debounce/-/debounce-1.2.1.tgz",
@@ -11720,9 +10603,9 @@
"dev": true
},
"deep-is": {
- "version": "0.1.3",
- "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz",
- "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=",
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz",
+ "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==",
"dev": true
},
"deepmerge": {
@@ -11744,20 +10627,15 @@
"dev": true
},
"define-properties": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz",
- "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==",
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.4.tgz",
+ "integrity": "sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA==",
"dev": true,
"requires": {
- "object-keys": "^1.0.12"
+ "has-property-descriptors": "^1.0.0",
+ "object-keys": "^1.1.1"
}
},
- "delayed-stream": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
- "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=",
- "dev": true
- },
"delegates": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz",
@@ -11765,9 +10643,9 @@
"dev": true
},
"depd": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz",
- "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=",
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz",
+ "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==",
"dev": true
},
"dependency-graph": {
@@ -11777,21 +10655,15 @@
"dev": true
},
"destroy": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz",
- "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=",
- "dev": true
- },
- "details-element-polyfill": {
- "version": "2.4.0",
- "resolved": "https://registry.npmjs.org/details-element-polyfill/-/details-element-polyfill-2.4.0.tgz",
- "integrity": "sha512-jnZ/m0+b1gz3EcooitqL7oDEkKHEro659dt8bWB/T/HjiILucoQhHvvi5MEOAIFJXxxO+rIYJ/t3qCgfUOSU5g==",
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz",
+ "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==",
"dev": true
},
"devtools-protocol": {
- "version": "0.0.969999",
- "resolved": "https://registry.npmjs.org/devtools-protocol/-/devtools-protocol-0.0.969999.tgz",
- "integrity": "sha512-6GfzuDWU0OFAuOvBokXpXPLxjOJ5DZ157Ue3sGQQM3LgAamb8m0R0ruSfN0DDu+XG5XJgT50i6zZ/0o8RglreQ==",
+ "version": "0.0.981744",
+ "resolved": "https://registry.npmjs.org/devtools-protocol/-/devtools-protocol-0.0.981744.tgz",
+ "integrity": "sha512-0cuGS8+jhR67Fy7qG3i3Pc7Aw494sb9yG9QgpG97SFVWwolgYjlhJg7n+UaHxOQT30d1TYu/EYe9k01ivLErIg==",
"dev": true
},
"diff": {
@@ -11833,16 +10705,6 @@
"integrity": "sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=",
"dev": true
},
- "ecc-jsbn": {
- "version": "0.1.2",
- "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz",
- "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=",
- "dev": true,
- "requires": {
- "jsbn": "~0.1.0",
- "safer-buffer": "^2.1.0"
- }
- },
"ee-first": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz",
@@ -11850,9 +10712,9 @@
"dev": true
},
"electron-to-chromium": {
- "version": "1.4.96",
- "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.96.tgz",
- "integrity": "sha512-DPNjvNGPabv6FcyjzLAN4C0psN/GgD9rSGvMTuv81SeXG/EX3mCz0wiw9N1tUEnfQXYCJi3H8M0oFPRziZh7rw==",
+ "version": "1.4.136",
+ "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.136.tgz",
+ "integrity": "sha512-GnITX8rHnUrIVnTxU9UlsTnSemHUA2iF+6QrRqxFbp/mf0vfuSc/goEyyQhUX3TUUCE3mv/4BNuXOtaJ4ur0eA==",
"dev": true
},
"emoji-regex": {
@@ -11876,6 +10738,15 @@
"once": "^1.4.0"
}
},
+ "enquirer": {
+ "version": "2.3.6",
+ "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz",
+ "integrity": "sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==",
+ "dev": true,
+ "requires": {
+ "ansi-colors": "^4.1.1"
+ }
+ },
"errorstacks": {
"version": "2.4.0",
"resolved": "https://registry.npmjs.org/errorstacks/-/errorstacks-2.4.0.tgz",
@@ -11883,31 +10754,34 @@
"dev": true
},
"es-abstract": {
- "version": "1.19.1",
- "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.19.1.tgz",
- "integrity": "sha512-2vJ6tjA/UfqLm2MPs7jxVybLoB8i1t1Jd9R3kISld20sIxPcTbLuggQOUxeWeAvIUkduv/CfMjuh4WmiXr2v9w==",
+ "version": "1.20.0",
+ "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.20.0.tgz",
+ "integrity": "sha512-URbD8tgRthKD3YcC39vbvSDrX23upXnPcnGAjQfgxXF5ID75YcENawc9ZX/9iTP9ptUyfCLIxTTuMYoRfiOVKA==",
"dev": true,
"requires": {
"call-bind": "^1.0.2",
"es-to-primitive": "^1.2.1",
"function-bind": "^1.1.1",
+ "function.prototype.name": "^1.1.5",
"get-intrinsic": "^1.1.1",
"get-symbol-description": "^1.0.0",
"has": "^1.0.3",
- "has-symbols": "^1.0.2",
+ "has-property-descriptors": "^1.0.0",
+ "has-symbols": "^1.0.3",
"internal-slot": "^1.0.3",
"is-callable": "^1.2.4",
- "is-negative-zero": "^2.0.1",
+ "is-negative-zero": "^2.0.2",
"is-regex": "^1.1.4",
- "is-shared-array-buffer": "^1.0.1",
+ "is-shared-array-buffer": "^1.0.2",
"is-string": "^1.0.7",
- "is-weakref": "^1.0.1",
- "object-inspect": "^1.11.0",
+ "is-weakref": "^1.0.2",
+ "object-inspect": "^1.12.0",
"object-keys": "^1.1.1",
"object.assign": "^4.1.2",
- "string.prototype.trimend": "^1.0.4",
- "string.prototype.trimstart": "^1.0.4",
- "unbox-primitive": "^1.0.1"
+ "regexp.prototype.flags": "^1.4.1",
+ "string.prototype.trimend": "^1.0.5",
+ "string.prototype.trimstart": "^1.0.5",
+ "unbox-primitive": "^1.0.2"
}
},
"es-module-lexer": {
@@ -11916,6 +10790,15 @@
"integrity": "sha512-1HQ2M2sPtxwnvOvT1ZClHyQDiggdNjURWpY2we6aMKCQiUVxTmVs2UYPLIrD84sS+kMdUwfBSylbJPwNnBrnHQ==",
"dev": true
},
+ "es-shim-unscopables": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.0.tgz",
+ "integrity": "sha512-Jm6GPcCdC30eMLbZ2x8z2WuRwAws3zTBBKuusffYVUrNj/GVSUAZ+xKMaUpfNDR5IbyNA5LJbaecoUVbmUcB1w==",
+ "dev": true,
+ "requires": {
+ "has": "^1.0.3"
+ }
+ },
"es-to-primitive": {
"version": "1.2.1",
"resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz",
@@ -12101,12 +10984,6 @@
"integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==",
"dev": true
},
- "escape-goat": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/escape-goat/-/escape-goat-2.1.1.tgz",
- "integrity": "sha512-8/uIhbG12Csjy2JEW7D9pHbreaVaS/OpN3ycnyvElTdwM5n6GY6W6e2IPemfvGZeUMqZ9A/3GqIZMgKnBhAw/Q==",
- "dev": true
- },
"escape-html": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz",
@@ -12120,12 +10997,12 @@
"dev": true
},
"eslint": {
- "version": "8.12.0",
- "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.12.0.tgz",
- "integrity": "sha512-it1oBL9alZg1S8UycLm5YDMAkIhtH6FtAzuZs6YvoGVldWjbS08BkAdb/ymP9LlAyq8koANu32U7Ib/w+UNh8Q==",
+ "version": "8.14.0",
+ "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.14.0.tgz",
+ "integrity": "sha512-3/CE4aJX7LNEiE3i6FeodHmI/38GZtWCsAtsymScmzYapx8q1nVVb+eLcLSzATmCPXw5pT4TqVs1E0OmxAd9tw==",
"dev": true,
"requires": {
- "@eslint/eslintrc": "^1.2.1",
+ "@eslint/eslintrc": "^1.2.2",
"@humanwhocodes/config-array": "^0.9.2",
"ajv": "^6.10.0",
"chalk": "^4.0.0",
@@ -12162,12 +11039,46 @@
"v8-compile-cache": "^2.0.3"
},
"dependencies": {
+ "ansi-styles": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
+ "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+ "dev": true,
+ "requires": {
+ "color-convert": "^2.0.1"
+ }
+ },
"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
},
+ "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"
+ }
+ },
+ "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
+ },
"escape-string-regexp": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz",
@@ -12199,6 +11110,12 @@
"is-glob": "^4.0.3"
}
},
+ "has-flag": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
+ "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
+ "dev": true
+ },
"js-yaml": {
"version": "4.1.0",
"resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz",
@@ -12207,6 +11124,15 @@
"requires": {
"argparse": "^2.0.1"
}
+ },
+ "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"
+ }
}
}
},
@@ -12319,9 +11245,9 @@
"requires": {}
},
"eslint-plugin-import": {
- "version": "2.25.4",
- "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.25.4.tgz",
- "integrity": "sha512-/KJBASVFxpu0xg1kIBn9AUa8hQVnszpwgE7Ld0lKAlx7Ie87yzEzCgSkekt+le/YVhiaosO4Y14GDAOc41nfxA==",
+ "version": "2.26.0",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.26.0.tgz",
+ "integrity": "sha512-hYfi3FXaM8WPLf4S1cikh/r4IxnO6zrhZbEGz2b660EJRbuxgpDS5gkCuYgGWg2xxh2rBuIr4Pvhve/7c31koA==",
"dev": true,
"requires": {
"array-includes": "^3.1.4",
@@ -12329,14 +11255,14 @@
"debug": "^2.6.9",
"doctrine": "^2.1.0",
"eslint-import-resolver-node": "^0.3.6",
- "eslint-module-utils": "^2.7.2",
+ "eslint-module-utils": "^2.7.3",
"has": "^1.0.3",
- "is-core-module": "^2.8.0",
+ "is-core-module": "^2.8.1",
"is-glob": "^4.0.3",
- "minimatch": "^3.0.4",
+ "minimatch": "^3.1.2",
"object.values": "^1.1.5",
- "resolve": "^1.20.0",
- "tsconfig-paths": "^3.12.0"
+ "resolve": "^1.22.0",
+ "tsconfig-paths": "^3.14.1"
},
"dependencies": {
"debug": {
@@ -12446,9 +11372,9 @@
},
"dependencies": {
"estraverse": {
- "version": "5.2.0",
- "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz",
- "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==",
+ "version": "5.3.0",
+ "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz",
+ "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==",
"dev": true
}
}
@@ -12526,6 +11452,22 @@
"integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=",
"dev": true
},
+ "is-stream": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz",
+ "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=",
+ "dev": true
+ },
+ "lru-cache": {
+ "version": "4.1.5",
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz",
+ "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==",
+ "dev": true,
+ "requires": {
+ "pseudomap": "^1.0.2",
+ "yallist": "^2.1.2"
+ }
+ },
"shebang-command": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz",
@@ -12549,53 +11491,54 @@
"requires": {
"isexe": "^2.0.0"
}
+ },
+ "yallist": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz",
+ "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=",
+ "dev": true
}
}
},
"express": {
- "version": "4.17.1",
- "resolved": "https://registry.npmjs.org/express/-/express-4.17.1.tgz",
- "integrity": "sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g==",
+ "version": "4.18.1",
+ "resolved": "https://registry.npmjs.org/express/-/express-4.18.1.tgz",
+ "integrity": "sha512-zZBcOX9TfehHQhtupq57OF8lFZ3UZi08Y97dwFCkD8p9d/d2Y3M+ykKcwaMDEL+4qyUolgBDX6AblpR3fL212Q==",
"dev": true,
"requires": {
- "accepts": "~1.3.7",
+ "accepts": "~1.3.8",
"array-flatten": "1.1.1",
- "body-parser": "1.19.0",
- "content-disposition": "0.5.3",
+ "body-parser": "1.20.0",
+ "content-disposition": "0.5.4",
"content-type": "~1.0.4",
- "cookie": "0.4.0",
+ "cookie": "0.5.0",
"cookie-signature": "1.0.6",
"debug": "2.6.9",
- "depd": "~1.1.2",
+ "depd": "2.0.0",
"encodeurl": "~1.0.2",
"escape-html": "~1.0.3",
"etag": "~1.8.1",
- "finalhandler": "~1.1.2",
+ "finalhandler": "1.2.0",
"fresh": "0.5.2",
+ "http-errors": "2.0.0",
"merge-descriptors": "1.0.1",
"methods": "~1.1.2",
- "on-finished": "~2.3.0",
+ "on-finished": "2.4.1",
"parseurl": "~1.3.3",
"path-to-regexp": "0.1.7",
- "proxy-addr": "~2.0.5",
- "qs": "6.7.0",
+ "proxy-addr": "~2.0.7",
+ "qs": "6.10.3",
"range-parser": "~1.2.1",
- "safe-buffer": "5.1.2",
- "send": "0.17.1",
- "serve-static": "1.14.1",
- "setprototypeof": "1.1.1",
- "statuses": "~1.5.0",
+ "safe-buffer": "5.2.1",
+ "send": "0.18.0",
+ "serve-static": "1.15.0",
+ "setprototypeof": "1.2.0",
+ "statuses": "2.0.1",
"type-is": "~1.6.18",
"utils-merge": "1.0.1",
"vary": "~1.1.2"
},
"dependencies": {
- "cookie": {
- "version": "0.4.0",
- "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.0.tgz",
- "integrity": "sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg==",
- "dev": true
- },
"debug": {
"version": "2.6.9",
"resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
@@ -12612,19 +11555,13 @@
"dev": true
},
"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==",
+ "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
}
}
},
- "extend": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz",
- "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==",
- "dev": true
- },
"external-editor": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz",
@@ -12647,11 +11584,28 @@
}
}
},
- "extsprintf": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz",
- "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=",
- "dev": true
+ "extract-zip": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-2.0.1.tgz",
+ "integrity": "sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==",
+ "dev": true,
+ "requires": {
+ "@types/yauzl": "^2.9.1",
+ "debug": "^4.1.1",
+ "get-stream": "^5.1.0",
+ "yauzl": "^2.10.0"
+ },
+ "dependencies": {
+ "get-stream": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz",
+ "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==",
+ "dev": true,
+ "requires": {
+ "pump": "^3.0.0"
+ }
+ }
+ }
},
"fast-deep-equal": {
"version": "3.1.3",
@@ -12709,9 +11663,9 @@
}
},
"figures": {
- "version": "3.2.0",
- "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz",
- "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==",
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz",
+ "integrity": "sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI=",
"dev": true,
"requires": {
"escape-string-regexp": "^1.0.5"
@@ -12736,17 +11690,17 @@
}
},
"finalhandler": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz",
- "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==",
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz",
+ "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==",
"dev": true,
"requires": {
"debug": "2.6.9",
"encodeurl": "~1.0.2",
"escape-html": "~1.0.3",
- "on-finished": "~2.3.0",
+ "on-finished": "2.4.1",
"parseurl": "~1.3.3",
- "statuses": "~1.5.0",
+ "statuses": "2.0.1",
"unpipe": "~1.0.0"
},
"dependencies": {
@@ -12793,46 +11747,18 @@
"requires": {
"flatted": "^3.1.0",
"rimraf": "^3.0.2"
- },
- "dependencies": {
- "flatted": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.1.1.tgz",
- "integrity": "sha512-zAoAQiudy+r5SvnSw3KJy5os/oRJYHzrzja/tBDqrZtNhUw8bt6y8OBzMWcjWr+8liV8Eb6yOhw8WZ7VFZ5ZzA==",
- "dev": true
- },
- "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"
- }
- }
}
},
- "forever-agent": {
- "version": "0.6.1",
- "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz",
- "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=",
+ "flatted": {
+ "version": "3.2.5",
+ "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.5.tgz",
+ "integrity": "sha512-WIWGi2L3DyTUvUrwRKgGi9TwxQMUEqPOPQBVi71R96jZXJdFskXEmf54BoZaS1kknGODoIGASGEzBUYdyMCBJg==",
"dev": true
},
- "form-data": {
- "version": "2.3.3",
- "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz",
- "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==",
- "dev": true,
- "requires": {
- "asynckit": "^0.4.0",
- "combined-stream": "^1.0.6",
- "mime-types": "^2.1.12"
- }
- },
"forwarded": {
- "version": "0.1.2",
- "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz",
- "integrity": "sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ=",
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz",
+ "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==",
"dev": true
},
"fresh": {
@@ -12866,12 +11792,30 @@
"integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==",
"dev": true
},
+ "function.prototype.name": {
+ "version": "1.1.5",
+ "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.5.tgz",
+ "integrity": "sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA==",
+ "dev": true,
+ "requires": {
+ "call-bind": "^1.0.2",
+ "define-properties": "^1.1.3",
+ "es-abstract": "^1.19.0",
+ "functions-have-names": "^1.2.2"
+ }
+ },
"functional-red-black-tree": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz",
"integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=",
"dev": true
},
+ "functions-have-names": {
+ "version": "1.2.3",
+ "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz",
+ "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==",
+ "dev": true
+ },
"get-caller-file": {
"version": "2.0.5",
"resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz",
@@ -12890,13 +11834,10 @@
}
},
"get-stream": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz",
- "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==",
- "dev": true,
- "requires": {
- "pump": "^3.0.0"
- }
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz",
+ "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==",
+ "dev": true
},
"get-symbol-description": {
"version": "1.0.0",
@@ -12908,19 +11849,10 @@
"get-intrinsic": "^1.1.1"
}
},
- "getpass": {
- "version": "0.1.7",
- "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz",
- "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=",
- "dev": true,
- "requires": {
- "assert-plus": "^1.0.0"
- }
- },
"glob": {
- "version": "7.1.6",
- "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz",
- "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==",
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz",
+ "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==",
"dev": true,
"requires": {
"fs.realpath": "^1.0.0",
@@ -12941,12 +11873,12 @@
}
},
"global-dirs": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-2.1.0.tgz",
- "integrity": "sha512-MG6kdOUh/xBnyo9cJFeIKkLEc1AyFq42QTU4XiX51i2NEdxLxLWXIjEjmqKeSuKR7pAZjTqUVoT2b2huxVLgYQ==",
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-0.1.1.tgz",
+ "integrity": "sha1-sxnA3UYH81PzvpzKTHL8FIxJ9EU=",
"dev": true,
"requires": {
- "ini": "1.3.7"
+ "ini": "^1.3.4"
}
},
"globals": {
@@ -12956,14 +11888,6 @@
"dev": true,
"requires": {
"type-fest": "^0.20.2"
- },
- "dependencies": {
- "type-fest": {
- "version": "0.20.2",
- "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz",
- "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==",
- "dev": true
- }
}
},
"globby": {
@@ -12997,30 +11921,25 @@
"p-cancelable": "^1.0.0",
"to-readable-stream": "^1.0.0",
"url-parse-lax": "^3.0.0"
+ },
+ "dependencies": {
+ "get-stream": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz",
+ "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==",
+ "dev": true,
+ "requires": {
+ "pump": "^3.0.0"
+ }
+ }
}
},
"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
- },
- "har-schema": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz",
- "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=",
+ "version": "4.2.10",
+ "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz",
+ "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==",
"dev": true
},
- "har-validator": {
- "version": "5.1.5",
- "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.5.tgz",
- "integrity": "sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==",
- "dev": true,
- "requires": {
- "ajv": "^6.12.3",
- "har-schema": "^2.0.0"
- }
- },
"has": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz",
@@ -13031,9 +11950,9 @@
}
},
"has-bigints": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.1.tgz",
- "integrity": "sha512-LSBS2LjbNBTf6287JEbEzvJgftkF5qFkmCo9hDRpAzKhUOlJ+hx8dd4USs00SgsUNwc4617J9ki5YtEClM2ffA==",
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz",
+ "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==",
"dev": true
},
"has-flag": {
@@ -13042,6 +11961,15 @@
"integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=",
"dev": true
},
+ "has-property-descriptors": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz",
+ "integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==",
+ "dev": true,
+ "requires": {
+ "get-intrinsic": "^1.1.1"
+ }
+ },
"has-symbols": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz",
@@ -13079,6 +12007,12 @@
"http-errors": "~1.8.0"
},
"dependencies": {
+ "depd": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz",
+ "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=",
+ "dev": true
+ },
"http-errors": {
"version": "1.8.1",
"resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.8.1.tgz",
@@ -13092,16 +12026,10 @@
"toidentifier": "1.0.1"
}
},
- "setprototypeof": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz",
- "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==",
- "dev": true
- },
- "toidentifier": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz",
- "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==",
+ "statuses": {
+ "version": "1.5.0",
+ "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz",
+ "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=",
"dev": true
}
}
@@ -13113,24 +12041,16 @@
"dev": true
},
"http-errors": {
- "version": "1.7.2",
- "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz",
- "integrity": "sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg==",
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz",
+ "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==",
"dev": true,
"requires": {
- "depd": "~1.1.2",
- "inherits": "2.0.3",
- "setprototypeof": "1.1.1",
- "statuses": ">= 1.5.0 < 2",
- "toidentifier": "1.0.0"
- },
- "dependencies": {
- "inherits": {
- "version": "2.0.3",
- "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
- "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=",
- "dev": true
- }
+ "depd": "2.0.0",
+ "inherits": "2.0.4",
+ "setprototypeof": "1.2.0",
+ "statuses": "2.0.1",
+ "toidentifier": "1.0.1"
}
},
"http-link-header": {
@@ -13139,21 +12059,10 @@
"integrity": "sha1-oitBoMmx4tj6wb8baXxr1TLV9eQ=",
"dev": true
},
- "http-signature": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz",
- "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=",
- "dev": true,
- "requires": {
- "assert-plus": "^1.0.0",
- "jsprim": "^1.2.2",
- "sshpk": "^1.7.0"
- }
- },
"https-proxy-agent": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz",
- "integrity": "sha512-EkYm5BcKUGiduxzSt3Eppko+PiNWNEpa4ySk9vTC6wDsQJW9rHSa+UhGNJoRYp7bz6Ht1eaRIa6QaJqO5rCFbA==",
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz",
+ "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==",
"dev": true,
"requires": {
"agent-base": "6",
@@ -13232,9 +12141,9 @@
"dev": true
},
"ini": {
- "version": "1.3.7",
- "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.7.tgz",
- "integrity": "sha512-iKpRpXP+CrP2jyrxvg1kMUpXDyRUFDWurxbnVT1vQPx+Wz9uCYsMIqYuSBLV+PAaZG/d7kRLKRFc9oDMsH+mFQ==",
+ "version": "1.3.8",
+ "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz",
+ "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==",
"dev": true
},
"inquirer": {
@@ -13258,29 +12167,12 @@
"through": "^2.3.6"
},
"dependencies": {
- "ansi-escapes": {
- "version": "3.2.0",
- "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.2.0.tgz",
- "integrity": "sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ==",
- "dev": true
- },
"ansi-regex": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.1.tgz",
- "integrity": "sha512-+O9Jct8wf++lXxxFc4hc8LsjaSq0HFzzL7cVsw8pRDIPdjKD2mT4ytDZlLuSBZ4cLKZFXIrMGO7DbQCtMJJMKw==",
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.1.tgz",
+ "integrity": "sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==",
"dev": true
},
- "chalk": {
- "version": "2.4.2",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
- "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
- "dev": true,
- "requires": {
- "ansi-styles": "^3.2.1",
- "escape-string-regexp": "^1.0.5",
- "supports-color": "^5.3.0"
- }
- },
"cli-cursor": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz",
@@ -13290,33 +12182,12 @@
"restore-cursor": "^2.0.0"
}
},
- "cli-width": {
- "version": "2.2.1",
- "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-2.2.1.tgz",
- "integrity": "sha512-GRMWDxpOB6Dgk2E5Uo+3eEBvtOOlimMmpbFiKuLFnQzYDavtLFY3K5ona41jgN/WdRZtG7utuVSVTL4HbZHGkw==",
- "dev": true
- },
- "figures": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz",
- "integrity": "sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI=",
- "dev": true,
- "requires": {
- "escape-string-regexp": "^1.0.5"
- }
- },
"mimic-fn": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz",
"integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==",
"dev": true
},
- "mute-stream": {
- "version": "0.0.7",
- "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.7.tgz",
- "integrity": "sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s=",
- "dev": true
- },
"onetime": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz",
@@ -13336,27 +12207,6 @@
"signal-exit": "^3.0.2"
}
},
- "string-width": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz",
- "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==",
- "dev": true,
- "requires": {
- "is-fullwidth-code-point": "^2.0.0",
- "strip-ansi": "^4.0.0"
- },
- "dependencies": {
- "strip-ansi": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz",
- "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=",
- "dev": true,
- "requires": {
- "ansi-regex": "^3.0.0"
- }
- }
- }
- },
"strip-ansi": {
"version": "5.2.0",
"resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz",
@@ -13364,14 +12214,6 @@
"dev": true,
"requires": {
"ansi-regex": "^4.1.0"
- },
- "dependencies": {
- "ansi-regex": {
- "version": "4.1.1",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.1.tgz",
- "integrity": "sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==",
- "dev": true
- }
}
}
}
@@ -13387,12 +12229,6 @@
"side-channel": "^1.0.4"
}
},
- "intl": {
- "version": "1.2.5",
- "resolved": "https://registry.npmjs.org/intl/-/intl-1.2.5.tgz",
- "integrity": "sha1-giRKIZDE5Bn4Nx9ao02qNCDiq94=",
- "dev": true
- },
"intl-messageformat": {
"version": "4.4.0",
"resolved": "https://registry.npmjs.org/intl-messageformat/-/intl-messageformat-4.4.0.tgz",
@@ -13408,12 +12244,6 @@
"integrity": "sha512-IMSCKVf0USrM/959vj3xac7s8f87sc+80Y/ipBzdKy4ifBv5Gsj2tZ41EAaURVg01QU71fYr77uA8Meh6kELbg==",
"dev": true
},
- "intl-pluralrules": {
- "version": "1.2.2",
- "resolved": "https://registry.npmjs.org/intl-pluralrules/-/intl-pluralrules-1.2.2.tgz",
- "integrity": "sha512-SBdlNCJAhTA0I0uHg2dn7I+c6BCvSVk6zJ/01ozjwJK7BvKms9RH3w3Sd/Ag24KffZ/Yx6KJRCKAc7eE8TZLNg==",
- "dev": true
- },
"ip": {
"version": "1.1.5",
"resolved": "https://registry.npmjs.org/ip/-/ip-1.1.5.tgz",
@@ -13460,6 +12290,15 @@
"integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==",
"dev": true
},
+ "is-builtin-module": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-3.1.0.tgz",
+ "integrity": "sha512-OV7JjAgOTfAFJmHZLvpSTb4qi0nIILDV1gWPYDnDJUTNFM5aGlRAhk4QcT8i7TuAleeEV5Fdkqn3t4mS+Q11fg==",
+ "dev": true,
+ "requires": {
+ "builtin-modules": "^3.0.0"
+ }
+ },
"is-callable": {
"version": "1.2.4",
"resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.4.tgz",
@@ -13476,9 +12315,9 @@
}
},
"is-core-module": {
- "version": "2.8.1",
- "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.8.1.tgz",
- "integrity": "sha512-SdNCUs284hr40hFTFP6l0IfZ/RSrMXF3qgoRHd3/79unUTvrFO/JoXwkGm+5J/Oe3E/b5GsnG330uUNgRpu1PA==",
+ "version": "2.9.0",
+ "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.9.0.tgz",
+ "integrity": "sha512-+5FPy5PnwmO3lvfMb0AsoPaBG+5KHUI0wYFXOtYPnVVVspTFUuMZNfNaNVRt3FZadstu2c8x23vykRW/NBoU6A==",
"dev": true,
"requires": {
"has": "^1.0.3"
@@ -13494,9 +12333,9 @@
}
},
"is-docker": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.1.1.tgz",
- "integrity": "sha512-ZOoqiXfEwtGknTiuDEy8pN2CfE3TxMHprvNer1mXiqwkOT77Rw3YVrUQ52EqAOU3QAWDQ+bQdx7HJzrv7LS2Hw==",
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz",
+ "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==",
"dev": true
},
"is-extglob": {
@@ -13506,9 +12345,9 @@
"dev": true
},
"is-fullwidth-code-point": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz",
- "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=",
+ "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-generator-function": {
@@ -13530,13 +12369,13 @@
}
},
"is-installed-globally": {
- "version": "0.3.2",
- "resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.3.2.tgz",
- "integrity": "sha512-wZ8x1js7Ia0kecP/CHM/3ABkAmujX7WPvQk6uu3Fly/Mk44pySulQpnHG46OMjHGXApINnV4QhY3SWnECO2z5g==",
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.1.0.tgz",
+ "integrity": "sha1-Df2Y9akRFxbdU13aZJL2e/PSWoA=",
"dev": true,
"requires": {
- "global-dirs": "^2.0.1",
- "is-path-inside": "^3.0.1"
+ "global-dirs": "^0.1.0",
+ "is-path-inside": "^1.0.0"
}
},
"is-module": {
@@ -13552,9 +12391,9 @@
"dev": true
},
"is-npm": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/is-npm/-/is-npm-4.0.0.tgz",
- "integrity": "sha512-96ECIfh9xtDDlPylNPXhzjsykHsMJZ18ASpaWzQyBr4YRTcVjUvzaHayDAES2oU/3KpljhHUjtSRNiDwi0F0ig==",
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/is-npm/-/is-npm-3.0.0.tgz",
+ "integrity": "sha512-wsigDr1Kkschp2opC4G3yA6r9EgVA6NjRpWzIi9axXqeIaAATPRJc4uLujXe3Nd9uO8KoDyA4MD6aZSeXTADhA==",
"dev": true
},
"is-number": {
@@ -13564,9 +12403,9 @@
"dev": true
},
"is-number-object": {
- "version": "1.0.6",
- "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.6.tgz",
- "integrity": "sha512-bEVOqiRcvo3zO1+G2lVMy+gkkEm9Yh7cDMRusKKu5ZJKPUYSJwICTKZrNKHA2EbSP0Tu0+6B/emsYNHZyn6K8g==",
+ "version": "1.0.7",
+ "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz",
+ "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==",
"dev": true,
"requires": {
"has-tostringtag": "^1.0.0"
@@ -13579,10 +12418,13 @@
"dev": true
},
"is-path-inside": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.2.tgz",
- "integrity": "sha512-/2UGPSgmtqwo1ktx8NDHjuPwZWmHhO+gj0f93EkhLB5RgW9RZevWYYlIkS6zePc6U2WpOdQYIwHe9YC4DWEBVg==",
- "dev": true
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-1.0.1.tgz",
+ "integrity": "sha1-jvW33lBDej/cprToZe96pVy0gDY=",
+ "dev": true,
+ "requires": {
+ "path-is-inside": "^1.0.1"
+ }
},
"is-regex": {
"version": "1.1.4",
@@ -13595,15 +12437,18 @@
}
},
"is-shared-array-buffer": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.1.tgz",
- "integrity": "sha512-IU0NmyknYZN0rChcKhRO1X8LYz5Isj/Fsqh8NJOSf+N/hCOTwy29F32Ik7a+QszE63IdvmwdTPDd6cZ5pg4cwA==",
- "dev": true
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz",
+ "integrity": "sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==",
+ "dev": true,
+ "requires": {
+ "call-bind": "^1.0.2"
+ }
},
"is-stream": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz",
- "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=",
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz",
+ "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==",
"dev": true
},
"is-string": {
@@ -13654,10 +12499,16 @@
"integrity": "sha512-VjSeb/lHmkoyd8ryPVIKvOCn4D1koMqY+vqyjjUfc3xyKtP4dYOxM44sZrnqQSzSds3xyOrUTLTC9LVCVgLngw==",
"dev": true
},
+ "isarray": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz",
+ "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=",
+ "dev": true
+ },
"isbinaryfile": {
- "version": "4.0.8",
- "resolved": "https://registry.npmjs.org/isbinaryfile/-/isbinaryfile-4.0.8.tgz",
- "integrity": "sha512-53h6XFniq77YdW+spoRrebh0mnmTxRPTlcuIArO57lmMdq4uBKFKaeTjnb92oYWrSn/LVL+LT+Hap2tFQj8V+w==",
+ "version": "4.0.10",
+ "resolved": "https://registry.npmjs.org/isbinaryfile/-/isbinaryfile-4.0.10.tgz",
+ "integrity": "sha512-iHrqe5shvBUcFbmZq9zOQHBoeOhZJu6RQGrDpBgenUm/Am+F3JM2MgQj+rK3Z601fzrL5gLZWtAPH2OBaSVcyw==",
"dev": true
},
"isexe": {
@@ -13676,12 +12527,6 @@
"whatwg-fetch": "^3.4.1"
}
},
- "isstream": {
- "version": "0.1.2",
- "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz",
- "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=",
- "dev": true
- },
"istanbul-lib-coverage": {
"version": "3.2.0",
"resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz",
@@ -13733,9 +12578,9 @@
"dev": true
},
"js-library-detector": {
- "version": "6.4.0",
- "resolved": "https://registry.npmjs.org/js-library-detector/-/js-library-detector-6.4.0.tgz",
- "integrity": "sha512-NB2sYpmgqiTd7PNNhgp6bnEZmjvTUdAbzxABvYXWLpTL/t158T6mPnD8uYNd0FDP73YWyMrTYDvPxqdvCTbv2g==",
+ "version": "6.5.0",
+ "resolved": "https://registry.npmjs.org/js-library-detector/-/js-library-detector-6.5.0.tgz",
+ "integrity": "sha512-Kq7VckJ5kb26kHMAu1sDO8t2qr7M5Uw6Gf7fVGtu1YceoHdqTcobwnB5kStcktusPuPmiCE8PbCaiLzhiBsSAw==",
"dev": true
},
"js-tokens": {
@@ -13745,33 +12590,21 @@
"dev": true
},
"js-yaml": {
- "version": "3.14.0",
- "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.0.tgz",
- "integrity": "sha512-/4IbIeHcD9VMHFqDR/gQ7EdZdLimOvW2DdcxFjdyyZ9NsbS+ccrXqVWDtab/lRl5AlUqmpBx8EhPaWR+OtY17A==",
+ "version": "3.14.1",
+ "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz",
+ "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==",
"dev": true,
"requires": {
"argparse": "^1.0.7",
"esprima": "^4.0.0"
}
},
- "jsbn": {
- "version": "0.1.1",
- "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz",
- "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=",
- "dev": true
- },
"json-buffer": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.0.tgz",
"integrity": "sha1-Wx85evx11ne96Lz8Dkfh+aPZqJg=",
"dev": true
},
- "json-schema": {
- "version": "0.2.3",
- "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz",
- "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=",
- "dev": true
- },
"json-schema-traverse": {
"version": "0.4.1",
"resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
@@ -13784,12 +12617,6 @@
"integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=",
"dev": true
},
- "json-stringify-safe": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz",
- "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=",
- "dev": true
- },
"json5": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz",
@@ -13799,69 +12626,6 @@
"minimist": "^1.2.0"
}
},
- "jsonld": {
- "version": "1.8.1",
- "resolved": "https://registry.npmjs.org/jsonld/-/jsonld-1.8.1.tgz",
- "integrity": "sha512-f0rusl5v8aPKS3jApT5fhYsdTC/JpyK1PoJ+ZtYYtZXoyb1J0Z///mJqLwrfL/g4NueFSqPymDYIi1CcSk7b8Q==",
- "dev": true,
- "requires": {
- "canonicalize": "^1.0.1",
- "rdf-canonize": "^1.0.2",
- "request": "^2.88.0",
- "semver": "^5.6.0",
- "xmldom": "0.1.19"
- },
- "dependencies": {
- "semver": {
- "version": "5.7.1",
- "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
- "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==",
- "dev": true
- }
- }
- },
- "jsonlint-mod": {
- "version": "1.7.6",
- "resolved": "https://registry.npmjs.org/jsonlint-mod/-/jsonlint-mod-1.7.6.tgz",
- "integrity": "sha512-oGuk6E1ehmIpw0w9ttgb2KsDQQgGXBzZczREW8OfxEm9eCQYL9/LCexSnh++0z3AiYGcXpBgqDSx9AAgzl/Bvg==",
- "dev": true,
- "requires": {
- "chalk": "^2.4.2",
- "JSV": "^4.0.2",
- "underscore": "^1.9.1"
- },
- "dependencies": {
- "chalk": {
- "version": "2.4.2",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
- "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
- "dev": true,
- "requires": {
- "ansi-styles": "^3.2.1",
- "escape-string-regexp": "^1.0.5",
- "supports-color": "^5.3.0"
- }
- }
- }
- },
- "jsprim": {
- "version": "1.4.1",
- "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz",
- "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=",
- "dev": true,
- "requires": {
- "assert-plus": "1.0.0",
- "extsprintf": "1.3.0",
- "json-schema": "0.2.3",
- "verror": "1.10.0"
- }
- },
- "JSV": {
- "version": "4.0.2",
- "resolved": "https://registry.npmjs.org/JSV/-/JSV-4.0.2.tgz",
- "integrity": "sha1-0Hf2glVx+CEy+d/67Vh7QCn+/1c=",
- "dev": true
- },
"just-extend": {
"version": "4.2.1",
"resolved": "https://registry.npmjs.org/just-extend/-/just-extend-4.2.1.tgz",
@@ -13917,10 +12681,31 @@
"vary": "^1.1.2"
},
"dependencies": {
- "depd": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz",
- "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==",
+ "http-errors": {
+ "version": "1.8.1",
+ "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.8.1.tgz",
+ "integrity": "sha512-Kpk9Sm7NmI+RHhnj6OIWDI1d6fIoFAtFt9RLaTMRlg/8w49juAStsrBgp0Dp4OdxdVbRIeKhtCUvoi/RuAhO4g==",
+ "dev": true,
+ "requires": {
+ "depd": "~1.1.2",
+ "inherits": "2.0.4",
+ "setprototypeof": "1.2.0",
+ "statuses": ">= 1.5.0 < 2",
+ "toidentifier": "1.0.1"
+ },
+ "dependencies": {
+ "depd": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz",
+ "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=",
+ "dev": true
+ }
+ }
+ },
+ "statuses": {
+ "version": "1.5.0",
+ "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz",
+ "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=",
"dev": true
}
}
@@ -13961,6 +12746,12 @@
"resolve-path": "^1.4.0"
},
"dependencies": {
+ "depd": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz",
+ "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=",
+ "dev": true
+ },
"http-errors": {
"version": "1.8.1",
"resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.8.1.tgz",
@@ -13974,16 +12765,10 @@
"toidentifier": "1.0.1"
}
},
- "setprototypeof": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz",
- "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==",
- "dev": true
- },
- "toidentifier": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz",
- "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==",
+ "statuses": {
+ "version": "1.5.0",
+ "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz",
+ "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=",
"dev": true
}
}
@@ -14029,45 +12814,40 @@
}
},
"lighthouse": {
- "version": "7.0.0",
- "resolved": "https://registry.npmjs.org/lighthouse/-/lighthouse-7.0.0.tgz",
- "integrity": "sha512-HxSbbg1WUZFsdUm0U6MCffr6J6marWW8kTlsAGaGh9oE7SFmxHh7eslK5u2sz70QXQZcZf8bfWRIkSx94dFbQA==",
+ "version": "9.3.0",
+ "resolved": "https://registry.npmjs.org/lighthouse/-/lighthouse-9.3.0.tgz",
+ "integrity": "sha512-jooRAn9LQYk/KgALmwd9fPcmfGecVnd15pr7Ya4pZ1mhG9SKgVOIWwj8cjxZlWATrMV31ySwkX37dw/Jepm9gw==",
"dev": true,
"requires": {
- "axe-core": "4.1.1",
- "chrome-launcher": "^0.13.4",
+ "axe-core": "4.3.5",
+ "chrome-launcher": "^0.15.0",
"configstore": "^5.0.1",
+ "csp_evaluator": "1.1.0",
"cssstyle": "1.2.1",
- "details-element-polyfill": "^2.4.0",
+ "enquirer": "^2.3.6",
"http-link-header": "^0.8.0",
- "inquirer": "^7.3.3",
- "intl": "^1.2.5",
"intl-messageformat": "^4.4.0",
- "intl-pluralrules": "^1.0.3",
- "jpeg-js": "^0.4.1",
+ "jpeg-js": "^0.4.3",
"js-library-detector": "^6.4.0",
- "jsonld": "^1.5.0",
- "jsonlint-mod": "^1.7.5",
- "lighthouse-logger": "^1.2.0",
- "lighthouse-stack-packs": "^1.4.0",
+ "lighthouse-logger": "^1.3.0",
+ "lighthouse-stack-packs": "^1.7.0",
+ "lodash.clonedeep": "^4.5.0",
"lodash.get": "^4.4.2",
"lodash.isequal": "^4.5.0",
"lodash.set": "^4.3.2",
- "lookup-closest-locale": "6.0.4",
+ "lookup-closest-locale": "6.2.0",
"metaviewport-parser": "0.2.0",
- "open": "^6.4.0",
+ "open": "^8.4.0",
"parse-cache-control": "1.0.1",
- "ps-list": "^7.2.0",
+ "ps-list": "^8.0.0",
"raven": "^2.2.1",
- "rimraf": "^2.6.1",
- "robots-parser": "^2.0.1",
+ "robots-parser": "^3.0.0",
"semver": "^5.3.0",
"speedline-core": "^1.4.3",
- "third-party-web": "^0.12.2",
- "update-notifier": "^4.1.0",
- "ws": "3.3.2",
- "yargs": "^16.1.1",
- "yargs-parser": "^20.2.4"
+ "third-party-web": "^0.12.7",
+ "ws": "^7.0.0",
+ "yargs": "^17.3.1",
+ "yargs-parser": "^21.0.0"
},
"dependencies": {
"ansi-styles": {
@@ -14079,6 +12859,24 @@
"color-convert": "^2.0.1"
}
},
+ "axe-core": {
+ "version": "4.3.5",
+ "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.3.5.tgz",
+ "integrity": "sha512-WKTW1+xAzhMS5dJsxWkliixlO/PqC4VhmO9T4juNYcaTg9jzWiJsou6m5pxWYGfigWbwzJWeFY6z47a+4neRXA==",
+ "dev": true
+ },
+ "chrome-launcher": {
+ "version": "0.15.0",
+ "resolved": "https://registry.npmjs.org/chrome-launcher/-/chrome-launcher-0.15.0.tgz",
+ "integrity": "sha512-ZQqX5kb9H0+jy1OqLnWampfocrtSZaGl7Ny3F9GRha85o4odbL8x55paUzh51UC7cEmZ5obp3H2Mm70uC2PpRA==",
+ "dev": true,
+ "requires": {
+ "@types/node": "*",
+ "escape-string-regexp": "^4.0.0",
+ "is-wsl": "^2.2.0",
+ "lighthouse-logger": "^1.0.0"
+ }
+ },
"cliui": {
"version": "7.0.4",
"resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz",
@@ -14105,46 +12903,46 @@
"integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
"dev": true
},
- "has-flag": {
+ "debug": {
+ "version": "2.6.9",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+ "dev": true,
+ "requires": {
+ "ms": "2.0.0"
+ }
+ },
+ "escape-string-regexp": {
"version": "4.0.0",
- "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
- "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
+ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz",
+ "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==",
"dev": true
},
- "inquirer": {
- "version": "7.3.3",
- "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-7.3.3.tgz",
- "integrity": "sha512-JG3eIAj5V9CwcGvuOmoo6LB9kbAYT8HXffUl6memuszlwDC/qvFAJw49XJ5NROSFNPxp3iQg1GqkFhaY/CR0IA==",
+ "lighthouse-logger": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/lighthouse-logger/-/lighthouse-logger-1.3.0.tgz",
+ "integrity": "sha512-BbqAKApLb9ywUli+0a+PcV04SyJ/N1q/8qgCNe6U97KbPCS1BTksEuHFLYdvc8DltuhfxIUBqDZsC0bBGtl3lA==",
"dev": true,
"requires": {
- "ansi-escapes": "^4.2.1",
- "chalk": "^4.1.0",
- "cli-cursor": "^3.1.0",
- "cli-width": "^3.0.0",
- "external-editor": "^3.0.3",
- "figures": "^3.0.0",
- "lodash": "^4.17.19",
- "mute-stream": "0.0.8",
- "run-async": "^2.4.0",
- "rxjs": "^6.6.0",
- "string-width": "^4.1.0",
- "strip-ansi": "^6.0.0",
- "through": "^2.3.6"
+ "debug": "^2.6.9",
+ "marky": "^1.2.2"
}
},
- "is-wsl": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz",
- "integrity": "sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0=",
+ "ms": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+ "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
"dev": true
},
"open": {
- "version": "6.4.0",
- "resolved": "https://registry.npmjs.org/open/-/open-6.4.0.tgz",
- "integrity": "sha512-IFenVPgF70fSm1keSd2iDBIDIBZkroLeuffXq+wKTzTJlBpesFWojV9lb8mzOfaAzM1sr7HQHuO0vtV0zYekGg==",
+ "version": "8.4.0",
+ "resolved": "https://registry.npmjs.org/open/-/open-8.4.0.tgz",
+ "integrity": "sha512-XgFPPM+B28FtCCgSb9I+s9szOC1vZRSwgWsRUA5ylIxRTgKozqjOCrVOqGsYABPYK5qnfqClxZTFBa8PKt2v6Q==",
"dev": true,
"requires": {
- "is-wsl": "^1.1.0"
+ "define-lazy-prop": "^2.0.0",
+ "is-docker": "^2.1.1",
+ "is-wsl": "^2.2.0"
}
},
"semver": {
@@ -14153,46 +12951,15 @@
"integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==",
"dev": true
},
- "supports-color": {
- "version": "7.2.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
- "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
- "dev": true,
- "requires": {
- "has-flag": "^4.0.0"
- }
- },
- "update-notifier": {
- "version": "4.1.3",
- "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-4.1.3.tgz",
- "integrity": "sha512-Yld6Z0RyCYGB6ckIjffGOSOmHXj1gMeE7aROz4MG+XMkmixBX4jUngrGXNYz7wPKBmtoD4MnBa2Anu7RSKht/A==",
+ "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": {
- "boxen": "^4.2.0",
- "chalk": "^3.0.0",
- "configstore": "^5.0.1",
- "has-yarn": "^2.1.0",
- "import-lazy": "^2.1.0",
- "is-ci": "^2.0.0",
- "is-installed-globally": "^0.3.1",
- "is-npm": "^4.0.0",
- "is-yarn-global": "^0.3.0",
- "latest-version": "^5.0.0",
- "pupa": "^2.0.1",
- "semver-diff": "^3.1.1",
- "xdg-basedir": "^4.0.0"
- },
- "dependencies": {
- "chalk": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz",
- "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==",
- "dev": true,
- "requires": {
- "ansi-styles": "^4.1.0",
- "supports-color": "^7.1.0"
- }
- }
+ "emoji-regex": "^8.0.0",
+ "is-fullwidth-code-point": "^3.0.0",
+ "strip-ansi": "^6.0.1"
}
},
"wrap-ansi": {
@@ -14206,25 +12973,31 @@
"strip-ansi": "^6.0.0"
}
},
+ "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==",
+ "version": "17.4.1",
+ "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.4.1.tgz",
+ "integrity": "sha512-WSZD9jgobAg3ZKuCQZSa3g9QOJeCCqLoLAykiWgmXnDo9EPnn4RPf5qVTtzgOx66o6/oqhcA5tHtJXpG8pMt3g==",
"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",
+ "string-width": "^4.2.3",
"y18n": "^5.0.5",
- "yargs-parser": "^20.2.2"
+ "yargs-parser": "^21.0.0"
}
},
"yargs-parser": {
- "version": "20.2.6",
- "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.6.tgz",
- "integrity": "sha512-AP1+fQIWSM/sMiET8fyayjx/J+JmTPt2Mr0FkrgqB4todtfa53sOsrSAcIrJRD5XS20bKUwaDIuMkWKCEiQLKA==",
+ "version": "21.0.1",
+ "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.0.1.tgz",
+ "integrity": "sha512-9BK1jFpLzJROCI5TzwZL/TU4gqjK5xiHV/RfWLOahrjAko/e4DJkRDZQXfvqAsiZzzYhgAzbgz6lg48jcm4GLg==",
"dev": true
}
}
@@ -14257,9 +13030,9 @@
}
},
"lighthouse-stack-packs": {
- "version": "1.4.0",
- "resolved": "https://registry.npmjs.org/lighthouse-stack-packs/-/lighthouse-stack-packs-1.4.0.tgz",
- "integrity": "sha512-wdv94WUjaqUwtW8DOapng45Yah62c5O5geNVeoSQlnoagfbTO/YbiwNlfzDIF1xNKRkPlsfr/oWHhXsaHXDivg==",
+ "version": "1.8.1",
+ "resolved": "https://registry.npmjs.org/lighthouse-stack-packs/-/lighthouse-stack-packs-1.8.1.tgz",
+ "integrity": "sha512-LSCu9Ugt9NPvRfBNzAjMDLvYev9r/93OTmbIWt9iXwiCmd999I/zneRTwsFLtlQWGKwNbDHS9vXnU+KpXUb1qg==",
"dev": true
},
"lilconfig": {
@@ -14269,9 +13042,9 @@
"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==",
+ "version": "2.2.3",
+ "resolved": "https://registry.npmjs.org/lit/-/lit-2.2.3.tgz",
+ "integrity": "sha512-5/v+r9dH3Pw/o0rhp/qYk3ERvOUclNF31bWb0FiW6MPgwdQIr+/KCt/p3zcd8aPl8lIGnxdGrVcZA+gWS6oFOQ==",
"dev": true,
"requires": {
"@lit/reactive-element": "^1.3.0",
@@ -14290,9 +13063,9 @@
}
},
"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==",
+ "version": "2.2.3",
+ "resolved": "https://registry.npmjs.org/lit-html/-/lit-html-2.2.3.tgz",
+ "integrity": "sha512-vI4j3eWwtQaR8q/O63juZVliBIFMio716X719/lSsGH4UWPy2/7Qf377jsNs4cx3gCHgIbx8yxFgXFQ/igZyXQ==",
"dev": true,
"requires": {
"@types/trusted-types": "^2.0.2"
@@ -14320,6 +13093,12 @@
"integrity": "sha1-soqmKIorn8ZRA1x3EfZathkDMaY=",
"dev": true
},
+ "lodash.clonedeep": {
+ "version": "4.5.0",
+ "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz",
+ "integrity": "sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8=",
+ "dev": true
+ },
"lodash.get": {
"version": "4.4.2",
"resolved": "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz",
@@ -14372,12 +13151,29 @@
"cli-cursor": "^3.1.0",
"slice-ansi": "^4.0.0",
"wrap-ansi": "^6.2.0"
+ },
+ "dependencies": {
+ "ansi-escapes": {
+ "version": "4.3.2",
+ "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz",
+ "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==",
+ "dev": true,
+ "requires": {
+ "type-fest": "^0.21.3"
+ }
+ },
+ "type-fest": {
+ "version": "0.21.3",
+ "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz",
+ "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==",
+ "dev": true
+ }
}
},
"lookup-closest-locale": {
- "version": "6.0.4",
- "resolved": "https://registry.npmjs.org/lookup-closest-locale/-/lookup-closest-locale-6.0.4.tgz",
- "integrity": "sha512-bWoFbSGe6f1GvMGzj17LrwMX4FhDXDwZyH04ySVCPbtOJADcSRguZNKewoJ3Ful/MOxD/wRHvFPadk/kYZUbuQ==",
+ "version": "6.2.0",
+ "resolved": "https://registry.npmjs.org/lookup-closest-locale/-/lookup-closest-locale-6.2.0.tgz",
+ "integrity": "sha512-/c2kL+Vnp1jnV6K6RpDTHK3dgg0Tu2VVp+elEiJpjfS1UyY7AjOYHohRug6wT0OpoX2qFgNORndE9RqesfVxWQ==",
"dev": true
},
"lowercase-keys": {
@@ -14387,13 +13183,12 @@
"dev": true
},
"lru-cache": {
- "version": "4.1.5",
- "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz",
- "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==",
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz",
+ "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==",
"dev": true,
"requires": {
- "pseudomap": "^1.0.2",
- "yallist": "^2.1.2"
+ "yallist": "^4.0.0"
}
},
"make-dir": {
@@ -14414,9 +13209,9 @@
}
},
"marky": {
- "version": "1.2.1",
- "resolved": "https://registry.npmjs.org/marky/-/marky-1.2.1.tgz",
- "integrity": "sha512-md9k+Gxa3qLH6sUKpeC2CNkJK/Ld+bEz5X96nYwloqphQE0CKCVEKco/6jxEZixinqNdz5RFi/KaCyfbMDMAXQ==",
+ "version": "1.2.4",
+ "resolved": "https://registry.npmjs.org/marky/-/marky-1.2.4.tgz",
+ "integrity": "sha512-zd2/GiSn6U3/jeFVZ0J9CA1LzQ8RfIVvXkb/U0swFHF/zT+dVohTAWjmo2DcIuofmIIIROlwTbd+shSeXmxr0w==",
"dev": true
},
"md5": {
@@ -14470,19 +13265,25 @@
"picomatch": "^2.3.1"
}
},
+ "mime": {
+ "version": "1.6.0",
+ "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz",
+ "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==",
+ "dev": true
+ },
"mime-db": {
- "version": "1.44.0",
- "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.44.0.tgz",
- "integrity": "sha512-/NOTfLrsPBVeH7YtFPgsVWveuL+4SjjYxaQ1xtM1KMFj7HdxlBlxeyNLzhyJVx7r4rZGJAZ/6lkKCitSc/Nmpg==",
+ "version": "1.52.0",
+ "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz",
+ "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==",
"dev": true
},
"mime-types": {
- "version": "2.1.27",
- "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.27.tgz",
- "integrity": "sha512-JIhqnCasI9yD+SsmkquHBxTSEuZdQX5BuQnS2Vc7puQQQ+8yiP5AY5uWhpdv4YL4VM5c6iliiYWPgJ/nJQLp7w==",
+ "version": "2.1.35",
+ "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz",
+ "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==",
"dev": true,
"requires": {
- "mime-db": "1.44.0"
+ "mime-db": "1.52.0"
}
},
"mimic-fn": {
@@ -14498,9 +13299,9 @@
"dev": true
},
"minimatch": {
- "version": "3.0.4",
- "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
- "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
+ "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
"dev": true,
"requires": {
"brace-expansion": "^1.1.7"
@@ -14513,13 +13314,10 @@
"dev": true
},
"mkdirp": {
- "version": "0.5.5",
- "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz",
- "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==",
- "dev": true,
- "requires": {
- "minimist": "^1.2.5"
- }
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz",
+ "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==",
+ "dev": true
},
"mkdirp-classic": {
"version": "0.5.3",
@@ -14534,9 +13332,9 @@
"dev": true
},
"mute-stream": {
- "version": "0.0.8",
- "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz",
- "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==",
+ "version": "0.0.7",
+ "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.7.tgz",
+ "integrity": "sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s=",
"dev": true
},
"nanocolors": {
@@ -14546,9 +13344,9 @@
"dev": true
},
"nanoid": {
- "version": "3.3.3",
- "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.3.tgz",
- "integrity": "sha512-p1sjXuopFs0xg+fPASzQ28agW1oHD7xDsd9Xkf3T15H3c/cifrFHVwrh74PdoklAPi+i7MdRsE47vm2r6JoB+w==",
+ "version": "3.3.4",
+ "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.4.tgz",
+ "integrity": "sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==",
"dev": true
},
"nanospinner": {
@@ -14567,9 +13365,9 @@
"dev": true
},
"negotiator": {
- "version": "0.6.2",
- "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz",
- "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==",
+ "version": "0.6.3",
+ "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz",
+ "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==",
"dev": true
},
"nise": {
@@ -14585,12 +13383,6 @@
"path-to-regexp": "^1.7.0"
},
"dependencies": {
- "isarray": {
- "version": "0.0.1",
- "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz",
- "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=",
- "dev": true
- },
"path-to-regexp": {
"version": "1.8.0",
"resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-1.8.0.tgz",
@@ -14609,18 +13401,36 @@
"dev": true,
"requires": {
"whatwg-url": "^5.0.0"
+ },
+ "dependencies": {
+ "tr46": {
+ "version": "0.0.3",
+ "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz",
+ "integrity": "sha1-gYT9NH2snNwYWZLzpmIuFLnZq2o=",
+ "dev": true
+ },
+ "webidl-conversions": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz",
+ "integrity": "sha1-JFNCdeKnvGvnvIZhHMFq4KVlSHE=",
+ "dev": true
+ },
+ "whatwg-url": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz",
+ "integrity": "sha1-lmRU6HZUYuN2RNNib2dCzotwll0=",
+ "dev": true,
+ "requires": {
+ "tr46": "~0.0.3",
+ "webidl-conversions": "^3.0.0"
+ }
+ }
}
},
- "node-forge": {
- "version": "0.10.0",
- "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-0.10.0.tgz",
- "integrity": "sha512-PPmu8eEeG9saEUvI97fm4OYxXVB6bFvyNTyiUOBichBpFG8A1Ljw3bY62+5oOjDEMHRnd0Y7HQ+x7uzxOzC6JA==",
- "dev": true
- },
"node-releases": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.2.tgz",
- "integrity": "sha512-XxYDdcQ6eKqp/YjI+tb2C5WM2LgjnZrfYg4vgQt49EK268b6gYCHsBLrK2qvJo4FmCtqmKezb0WZFK4fkrZNsg==",
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.4.tgz",
+ "integrity": "sha512-gbMzqQtTtDz/00jQzZ21PQzdI9PyLYqUSvD0p3naOhX4odFji0ZxYdnVwPTxmSwkmxhcFImpozceidSG+AgoPQ==",
"dev": true
},
"normalize-path": {
@@ -14652,12 +13462,6 @@
}
}
},
- "oauth-sign": {
- "version": "0.9.0",
- "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz",
- "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==",
- "dev": true
- },
"object-inspect": {
"version": "1.12.0",
"resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.0.tgz",
@@ -14694,9 +13498,9 @@
}
},
"on-finished": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz",
- "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=",
+ "version": "2.4.1",
+ "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz",
+ "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==",
"dev": true,
"requires": {
"ee-first": "1.1.1"
@@ -14893,12 +13697,6 @@
"integrity": "sha1-elfrVQpng/kRUzH89GY9XI4AelA=",
"dev": true
},
- "performance-now": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz",
- "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=",
- "dev": true
- },
"picocolors": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz",
@@ -14911,6 +13709,12 @@
"integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==",
"dev": true
},
+ "pify": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz",
+ "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=",
+ "dev": true
+ },
"pkg-dir": {
"version": "4.2.0",
"resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz",
@@ -14990,6 +13794,15 @@
"requires": {
"ms": "^2.1.1"
}
+ },
+ "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"
+ }
}
}
},
@@ -15006,9 +13819,9 @@
"dev": true
},
"prettier": {
- "version": "2.6.1",
- "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.6.1.tgz",
- "integrity": "sha512-8UVbTBYGwN37Bs9LERmxCPjdvPxlEowx2urIL6urHzdb3SDq4B/Z6xLFCblrSnE4iKWcS6ziJ3aOYrc1kz/E2A==",
+ "version": "2.6.2",
+ "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.6.2.tgz",
+ "integrity": "sha512-PkUpF+qoXTqhOeWL9fu7As8LXsIUZ1WYaJiY/a7McAQzxjk82OF0tibkFXVCDImZtWxbvojFjerkiLb0/q8mew==",
"dev": true
},
"prettier-linter-helpers": {
@@ -15027,12 +13840,12 @@
"dev": true
},
"proxy-addr": {
- "version": "2.0.6",
- "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.6.tgz",
- "integrity": "sha512-dh/frvCBVmSsDYzw6n926jv974gddhkFPfiN8hPOi30Wax25QZyZEGveluCgliBnqmuM+UJmBErbAUFIoDbjOw==",
+ "version": "2.0.7",
+ "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz",
+ "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==",
"dev": true,
"requires": {
- "forwarded": "~0.1.2",
+ "forwarded": "0.2.0",
"ipaddr.js": "1.9.1"
}
},
@@ -15043,9 +13856,9 @@
"dev": true
},
"ps-list": {
- "version": "7.2.0",
- "resolved": "https://registry.npmjs.org/ps-list/-/ps-list-7.2.0.tgz",
- "integrity": "sha512-v4Bl6I3f2kJfr5o80ShABNHAokIgY+wFDTQfE+X3zWYgSGQOCBeYptLZUpoOALBqO5EawmDN/tjTldJesd0ujQ==",
+ "version": "8.1.0",
+ "resolved": "https://registry.npmjs.org/ps-list/-/ps-list-8.1.0.tgz",
+ "integrity": "sha512-NoGBqJe7Ou3kfQxEvDzDyKGAyEgwIuD3YrfXinjcCmBRv0hTld0Xb71hrXvtsNPj7HSFATfemvzB8PPJtq6Yag==",
"dev": true
},
"pseudomap": {
@@ -15054,12 +13867,6 @@
"integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=",
"dev": true
},
- "psl": {
- "version": "1.8.0",
- "resolved": "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz",
- "integrity": "sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ==",
- "dev": true
- },
"pump": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz",
@@ -15076,26 +13883,17 @@
"integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==",
"dev": true
},
- "pupa": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/pupa/-/pupa-2.1.1.tgz",
- "integrity": "sha512-l1jNAspIBSFqbT+y+5FosojNpVpF94nlI+wDUpqP9enwOTfHx9f0gh5nB96vl+6yTpsJsypeNrwfzPrKuHB41A==",
- "dev": true,
- "requires": {
- "escape-goat": "^2.0.0"
- }
- },
"puppeteer-core": {
- "version": "13.5.2",
- "resolved": "https://registry.npmjs.org/puppeteer-core/-/puppeteer-core-13.5.2.tgz",
- "integrity": "sha512-uxHOWCHt9mGUCLu8qtbEy3UqHlBRMzGCyPmAeoq2KrtmPOC0ZJPRZrDLWJMG3E/gwuHinDtZnBbnFfRfk/PABg==",
+ "version": "13.7.0",
+ "resolved": "https://registry.npmjs.org/puppeteer-core/-/puppeteer-core-13.7.0.tgz",
+ "integrity": "sha512-rXja4vcnAzFAP1OVLq/5dWNfwBGuzcOARJ6qGV7oAZhnLmVRU8G5MsdeQEAOy332ZhkIOnn9jp15R89LKHyp2Q==",
"dev": true,
"requires": {
"cross-fetch": "3.1.5",
"debug": "4.3.4",
- "devtools-protocol": "0.0.969999",
+ "devtools-protocol": "0.0.981744",
"extract-zip": "2.0.1",
- "https-proxy-agent": "5.0.0",
+ "https-proxy-agent": "5.0.1",
"pkg-dir": "4.2.0",
"progress": "2.0.3",
"proxy-from-env": "1.1.0",
@@ -15105,36 +13903,6 @@
"ws": "8.5.0"
},
"dependencies": {
- "extract-zip": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-2.0.1.tgz",
- "integrity": "sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==",
- "dev": true,
- "requires": {
- "@types/yauzl": "^2.9.1",
- "debug": "^4.1.1",
- "get-stream": "^5.1.0",
- "yauzl": "^2.10.0"
- }
- },
- "get-stream": {
- "version": "5.2.0",
- "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz",
- "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==",
- "dev": true,
- "requires": {
- "pump": "^3.0.0"
- }
- },
- "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"
- }
- },
"ws": {
"version": "8.5.0",
"resolved": "https://registry.npmjs.org/ws/-/ws-8.5.0.tgz",
@@ -15145,10 +13913,13 @@
}
},
"qs": {
- "version": "6.7.0",
- "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz",
- "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==",
- "dev": true
+ "version": "6.10.3",
+ "resolved": "https://registry.npmjs.org/qs/-/qs-6.10.3.tgz",
+ "integrity": "sha512-wr7M2E0OFRfIfJZjKGieI8lBKb7fRCH4Fv5KNPEs7gJ8jadvotdsS08PzOKR7opXhZ/Xkjtt3WF9g38drmyRqQ==",
+ "dev": true,
+ "requires": {
+ "side-channel": "^1.0.4"
+ }
},
"queue-microtask": {
"version": "1.2.3",
@@ -15175,6 +13946,12 @@
"uuid": "3.3.2"
},
"dependencies": {
+ "cookie": {
+ "version": "0.3.1",
+ "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.3.1.tgz",
+ "integrity": "sha1-5+Ch+e9DtMi6klxcWpboBtFoc7s=",
+ "dev": true
+ },
"uuid": {
"version": "3.3.2",
"resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz",
@@ -15184,15 +13961,23 @@
}
},
"raw-body": {
- "version": "2.4.0",
- "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.0.tgz",
- "integrity": "sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q==",
+ "version": "2.5.1",
+ "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz",
+ "integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==",
"dev": true,
"requires": {
- "bytes": "3.1.0",
- "http-errors": "1.7.2",
+ "bytes": "3.1.2",
+ "http-errors": "2.0.0",
"iconv-lite": "0.4.24",
"unpipe": "1.0.0"
+ },
+ "dependencies": {
+ "bytes": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz",
+ "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==",
+ "dev": true
+ }
}
},
"rc": {
@@ -15215,22 +14000,15 @@
}
}
},
- "rdf-canonize": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/rdf-canonize/-/rdf-canonize-1.2.0.tgz",
- "integrity": "sha512-MQdcRDz4+82nUrEb3hNQangBDpmep15uMmnWclGi/1KS0bNVc8oHpoNI0PFLHZsvwgwRzH31bO1JAScqUAstvw==",
+ "readable-stream": {
+ "version": "3.6.0",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz",
+ "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==",
"dev": true,
"requires": {
- "node-forge": "^0.10.0",
- "semver": "^6.3.0"
- },
- "dependencies": {
- "semver": {
- "version": "6.3.0",
- "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
- "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==",
- "dev": true
- }
+ "inherits": "^2.0.3",
+ "string_decoder": "^1.1.1",
+ "util-deprecate": "^1.0.1"
}
},
"readdirp": {
@@ -15248,6 +14026,17 @@
"integrity": "sha512-EJ4UNY/U1t2P/2k6oqotuX2Cc3T6nxJwsM0N0asT7dhrtH1ltUxDn4NalSYmPE2rCkVpcf/X6R0wDwcFpzhd4w==",
"dev": true
},
+ "regexp.prototype.flags": {
+ "version": "1.4.3",
+ "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.4.3.tgz",
+ "integrity": "sha512-fjggEOO3slI6Wvgjwflkc4NFRCTZAu5CnNfBd5qOMYhWdn67nJBBu34/TkD++eeFmd8C9r9jfXJ27+nSiRkSUA==",
+ "dev": true,
+ "requires": {
+ "call-bind": "^1.0.2",
+ "define-properties": "^1.1.3",
+ "functions-have-names": "^1.2.2"
+ }
+ },
"regexpp": {
"version": "3.2.0",
"resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz",
@@ -15272,48 +14061,6 @@
"rc": "^1.2.8"
}
},
- "request": {
- "version": "2.88.2",
- "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz",
- "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==",
- "dev": true,
- "requires": {
- "aws-sign2": "~0.7.0",
- "aws4": "^1.8.0",
- "caseless": "~0.12.0",
- "combined-stream": "~1.0.6",
- "extend": "~3.0.2",
- "forever-agent": "~0.6.1",
- "form-data": "~2.3.2",
- "har-validator": "~5.1.3",
- "http-signature": "~1.2.0",
- "is-typedarray": "~1.0.0",
- "isstream": "~0.1.2",
- "json-stringify-safe": "~5.0.1",
- "mime-types": "~2.1.19",
- "oauth-sign": "~0.9.0",
- "performance-now": "^2.1.0",
- "qs": "~6.5.2",
- "safe-buffer": "^5.1.2",
- "tough-cookie": "~2.5.0",
- "tunnel-agent": "^0.6.0",
- "uuid": "^3.3.2"
- },
- "dependencies": {
- "qs": {
- "version": "6.5.2",
- "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz",
- "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==",
- "dev": true
- },
- "uuid": {
- "version": "3.4.0",
- "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz",
- "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==",
- "dev": true
- }
- }
- },
"require-directory": {
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz",
@@ -15353,6 +14100,12 @@
"path-is-absolute": "1.0.1"
},
"dependencies": {
+ "depd": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz",
+ "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=",
+ "dev": true
+ },
"http-errors": {
"version": "1.6.3",
"resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz",
@@ -15376,6 +14129,12 @@
"resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz",
"integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==",
"dev": true
+ },
+ "statuses": {
+ "version": "1.5.0",
+ "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz",
+ "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=",
+ "dev": true
}
}
},
@@ -15405,24 +14164,24 @@
"dev": true
},
"rimraf": {
- "version": "2.7.1",
- "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz",
- "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==",
+ "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"
}
},
"robots-parser": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/robots-parser/-/robots-parser-2.2.0.tgz",
- "integrity": "sha512-PsUtHqiuk5MiC6WFnTFxry7NZfuuwh5eG7WBx+iYS5zFx5BlitW0s5uizl8mfCBVW/v9t0FRI95L1cACXI6PJw==",
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/robots-parser/-/robots-parser-3.0.0.tgz",
+ "integrity": "sha512-6xkze3WRdneibICBAzMKcXyTKQw5shA3GbwoEJy7RSvxpZNGF0GMuYKE1T0VMP4fwx/fQs0n0mtriOqRtk5L1w==",
"dev": true
},
"rollup": {
- "version": "2.70.1",
- "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.70.1.tgz",
- "integrity": "sha512-CRYsI5EuzLbXdxC6RnYhOuRdtz4bhejPMSWjsFLfVM/7w/85n2szZv6yExqUXsBdz5KT8eoubeyDUDjhLHEslA==",
+ "version": "2.72.0",
+ "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.72.0.tgz",
+ "integrity": "sha512-KqtR2YcO35/KKijg4nx4STO3569aqCUeGRkKWnJ6r+AvBBrVY9L4pmf4NHVrQr4mTOq6msbohflxr2kpihhaOA==",
"dev": true,
"requires": {
"fsevents": "~2.3.2"
@@ -15444,9 +14203,9 @@
}
},
"rxjs": {
- "version": "6.6.6",
- "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.6.tgz",
- "integrity": "sha512-/oTwee4N4iWzAMAL9xdGKjkEHmIwupR3oXbQjCKywF1BeFohswF3vZdogbmEF6pZkOsXTzWkrZszrWpQTByYVg==",
+ "version": "6.6.7",
+ "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz",
+ "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==",
"dev": true,
"requires": {
"tslib": "^1.9.0"
@@ -15461,9 +14220,9 @@
}
},
"safe-buffer": {
- "version": "5.2.1",
- "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
- "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==",
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
+ "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
"dev": true
},
"safer-buffer": {
@@ -15479,61 +14238,44 @@
"dev": true,
"requires": {
"lru-cache": "^6.0.0"
- },
- "dependencies": {
- "lru-cache": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz",
- "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==",
- "dev": true,
- "requires": {
- "yallist": "^4.0.0"
- }
- },
- "yallist": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
- "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
- "dev": true
- }
}
},
"semver-diff": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/semver-diff/-/semver-diff-3.1.1.tgz",
- "integrity": "sha512-GX0Ix/CJcHyB8c4ykpHGIAvLyOwOobtM/8d+TQkAd81/bEjgPHrfba41Vpesr7jX/t8Uh+R3EX9eAS5be+jQYg==",
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/semver-diff/-/semver-diff-2.1.0.tgz",
+ "integrity": "sha1-S7uEN8jTfksM8aaP1ybsbWRdbTY=",
"dev": true,
"requires": {
- "semver": "^6.3.0"
+ "semver": "^5.0.3"
},
"dependencies": {
"semver": {
- "version": "6.3.0",
- "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
- "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==",
+ "version": "5.7.1",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
+ "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==",
"dev": true
}
}
},
"send": {
- "version": "0.17.1",
- "resolved": "https://registry.npmjs.org/send/-/send-0.17.1.tgz",
- "integrity": "sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg==",
+ "version": "0.18.0",
+ "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz",
+ "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==",
"dev": true,
"requires": {
"debug": "2.6.9",
- "depd": "~1.1.2",
- "destroy": "~1.0.4",
+ "depd": "2.0.0",
+ "destroy": "1.2.0",
"encodeurl": "~1.0.2",
"escape-html": "~1.0.3",
"etag": "~1.8.1",
"fresh": "0.5.2",
- "http-errors": "~1.7.2",
+ "http-errors": "2.0.0",
"mime": "1.6.0",
- "ms": "2.1.1",
- "on-finished": "~2.3.0",
+ "ms": "2.1.3",
+ "on-finished": "2.4.1",
"range-parser": "~1.2.1",
- "statuses": "~1.5.0"
+ "statuses": "2.0.1"
},
"dependencies": {
"debug": {
@@ -15553,30 +14295,24 @@
}
}
},
- "mime": {
- "version": "1.6.0",
- "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz",
- "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==",
- "dev": true
- },
"ms": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz",
- "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==",
+ "version": "2.1.3",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
+ "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==",
"dev": true
}
}
},
"serve-static": {
- "version": "1.14.1",
- "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.14.1.tgz",
- "integrity": "sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg==",
+ "version": "1.15.0",
+ "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz",
+ "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==",
"dev": true,
"requires": {
"encodeurl": "~1.0.2",
"escape-html": "~1.0.3",
"parseurl": "~1.3.3",
- "send": "0.17.1"
+ "send": "0.18.0"
}
},
"set-blocking": {
@@ -15586,9 +14322,9 @@
"dev": true
},
"setprototypeof": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz",
- "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==",
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz",
+ "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==",
"dev": true
},
"shebang-command": {
@@ -15618,19 +14354,19 @@
}
},
"signal-exit": {
- "version": "3.0.3",
- "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz",
- "integrity": "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==",
+ "version": "3.0.7",
+ "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz",
+ "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==",
"dev": true
},
"sinon": {
- "version": "13.0.1",
- "resolved": "https://registry.npmjs.org/sinon/-/sinon-13.0.1.tgz",
- "integrity": "sha512-8yx2wIvkBjIq/MGY1D9h1LMraYW+z1X0mb648KZnKSdvLasvDu7maa0dFaNYdTDczFgbjNw2tOmWdTk9saVfwQ==",
+ "version": "13.0.2",
+ "resolved": "https://registry.npmjs.org/sinon/-/sinon-13.0.2.tgz",
+ "integrity": "sha512-KvOrztAVqzSJWMDoxM4vM+GPys1df2VBoXm+YciyB/OLMamfS3VXh3oGh5WtrAGSzrgczNWFFY22oKb7Fi5eeA==",
"dev": true,
"requires": {
"@sinonjs/commons": "^1.8.3",
- "@sinonjs/fake-timers": "^9.0.0",
+ "@sinonjs/fake-timers": "^9.1.2",
"@sinonjs/samsam": "^6.1.1",
"diff": "^5.0.0",
"nise": "^5.1.1",
@@ -15668,14 +14404,6 @@
"mkdirp": "^1.0.4",
"nanospinner": "^1.0.0",
"picocolors": "^1.0.0"
- },
- "dependencies": {
- "mkdirp": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz",
- "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==",
- "dev": true
- }
}
},
"slash": {
@@ -15718,15 +14446,15 @@
"resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
"integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
"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
}
}
},
+ "source-map": {
+ "version": "0.7.3",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz",
+ "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==",
+ "dev": true
+ },
"speedline-core": {
"version": "1.4.3",
"resolved": "https://registry.npmjs.org/speedline-core/-/speedline-core-1.4.3.tgz",
@@ -15744,23 +14472,6 @@
"integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=",
"dev": true
},
- "sshpk": {
- "version": "1.16.1",
- "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz",
- "integrity": "sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==",
- "dev": true,
- "requires": {
- "asn1": "~0.2.3",
- "assert-plus": "^1.0.0",
- "bcrypt-pbkdf": "^1.0.0",
- "dashdash": "^1.12.0",
- "ecc-jsbn": "~0.1.1",
- "getpass": "^0.1.1",
- "jsbn": "~0.1.0",
- "safer-buffer": "^2.0.2",
- "tweetnacl": "~0.14.0"
- }
- },
"stack-trace": {
"version": "0.0.10",
"resolved": "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.10.tgz",
@@ -15768,65 +14479,81 @@
"dev": true
},
"statuses": {
- "version": "1.5.0",
- "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz",
- "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=",
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz",
+ "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==",
"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==",
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz",
+ "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==",
"dev": true,
"requires": {
- "safe-buffer": "~5.1.0"
+ "safe-buffer": "~5.2.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==",
+ "version": "5.2.1",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
+ "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==",
"dev": true
}
}
},
"string-width": {
- "version": "4.2.0",
- "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz",
- "integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==",
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz",
+ "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==",
"dev": true,
"requires": {
- "emoji-regex": "^8.0.0",
- "is-fullwidth-code-point": "^3.0.0",
- "strip-ansi": "^6.0.0"
+ "is-fullwidth-code-point": "^2.0.0",
+ "strip-ansi": "^4.0.0"
},
"dependencies": {
+ "ansi-regex": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.1.tgz",
+ "integrity": "sha512-+O9Jct8wf++lXxxFc4hc8LsjaSq0HFzzL7cVsw8pRDIPdjKD2mT4ytDZlLuSBZ4cLKZFXIrMGO7DbQCtMJJMKw==",
+ "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==",
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz",
+ "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=",
"dev": true
+ },
+ "strip-ansi": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz",
+ "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "^3.0.0"
+ }
}
}
},
"string.prototype.trimend": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.4.tgz",
- "integrity": "sha512-y9xCjw1P23Awk8EvTpcyL2NIr1j7wJ39f+k6lvRnSMz+mz9CGz9NYPelDk42kOz6+ql8xjfK8oYzy3jAP5QU5A==",
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.5.tgz",
+ "integrity": "sha512-I7RGvmjV4pJ7O3kdf+LXFpVfdNOxtCW/2C8f6jNiW4+PQchwxkCDzlk1/7p+Wl4bqFIZeF47qAHXLuHHWKAxog==",
"dev": true,
"requires": {
"call-bind": "^1.0.2",
- "define-properties": "^1.1.3"
+ "define-properties": "^1.1.4",
+ "es-abstract": "^1.19.5"
}
},
"string.prototype.trimstart": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.4.tgz",
- "integrity": "sha512-jh6e984OBfvxS50tdY2nRZnoC5/mLFKOREQfw8t5yytkoUsJRNxvI/E39qu1sD0OtWI3OC0XgKSmcWwziwYuZw==",
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.5.tgz",
+ "integrity": "sha512-THx16TJCGlsN0o6dl2o6ncWUsdgnLRSA23rRE5pyGBw/mLr3Ej/R2LaqCtgP8VNMGZsvMWnf9ooZPyY2bHvUFg==",
"dev": true,
"requires": {
"call-bind": "^1.0.2",
- "define-properties": "^1.1.3"
+ "define-properties": "^1.1.4",
+ "es-abstract": "^1.19.5"
}
},
"strip-ansi": {
@@ -15926,26 +14653,16 @@
"fs-constants": "^1.0.0",
"inherits": "^2.0.3",
"readable-stream": "^3.1.1"
- },
- "dependencies": {
- "readable-stream": {
- "version": "3.6.0",
- "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz",
- "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==",
- "dev": true,
- "requires": {
- "inherits": "^2.0.3",
- "string_decoder": "^1.1.1",
- "util-deprecate": "^1.0.1"
- }
- }
}
},
"term-size": {
- "version": "2.2.1",
- "resolved": "https://registry.npmjs.org/term-size/-/term-size-2.2.1.tgz",
- "integrity": "sha512-wK0Ri4fOGjv/XPy8SBHZChl8CM7uMc5VML7SqiQ0zG7+J5Vr+RMQDoHa2CNT6KHUnTGIXH34UDMkPzAUyapBZg==",
- "dev": true
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/term-size/-/term-size-1.2.0.tgz",
+ "integrity": "sha1-RYuDiH8oj8Vtb/+/rSYuJmOO+mk=",
+ "dev": true,
+ "requires": {
+ "execa": "^0.7.0"
+ }
},
"text-table": {
"version": "0.2.0",
@@ -15954,9 +14671,9 @@
"dev": true
},
"third-party-web": {
- "version": "0.12.3",
- "resolved": "https://registry.npmjs.org/third-party-web/-/third-party-web-0.12.3.tgz",
- "integrity": "sha512-wnPlVUKzet4hnejKMEsVj5eIL0V2PLzgjJ3fLyGo9GV1pUOMa0NjeIzJNJ0pTEUL2GJAqlFKxo8EYML27SF/ng==",
+ "version": "0.12.7",
+ "resolved": "https://registry.npmjs.org/third-party-web/-/third-party-web-0.12.7.tgz",
+ "integrity": "sha512-9d/OfjEOjyeOpnm4F9o0KSK6BI6ytvi9DINSB5h1+jdlCvQlhKpViMSxWpBN9WstdfDQ61BS6NxWqcPCuQCAJg==",
"dev": true
},
"through": {
@@ -15971,6 +14688,26 @@
"integrity": "sha1-8y6srFoXW+ol1/q1Zas+2HQe9W8=",
"dev": true
},
+ "tmp": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.1.0.tgz",
+ "integrity": "sha512-J7Z2K08jbGcdA1kkQpJSqLF6T0tdQqpR2pnSUXsIchbPdTI9v3e85cLW0d6WDhwuAleOV71j2xWs8qMPfK7nKw==",
+ "dev": true,
+ "requires": {
+ "rimraf": "^2.6.3"
+ },
+ "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"
+ }
+ }
+ }
+ },
"to-readable-stream": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/to-readable-stream/-/to-readable-stream-1.0.0.tgz",
@@ -15987,27 +14724,20 @@
}
},
"toidentifier": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz",
- "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==",
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz",
+ "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==",
"dev": true
},
- "tough-cookie": {
- "version": "2.5.0",
- "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz",
- "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==",
+ "tr46": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/tr46/-/tr46-3.0.0.tgz",
+ "integrity": "sha512-l7FvfAHlcmulp8kr+flpQZmVwtu7nfRV7NZujtN0OqES8EL4O4e0qqzL0DC5gAvx/ZC/9lk6rhcUwYvkBnBnYA==",
"dev": true,
"requires": {
- "psl": "^1.1.28",
"punycode": "^2.1.1"
}
},
- "tr46": {
- "version": "0.0.3",
- "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz",
- "integrity": "sha1-gYT9NH2snNwYWZLzpmIuFLnZq2o=",
- "dev": true
- },
"tree-kill": {
"version": "1.2.2",
"resolved": "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.2.tgz",
@@ -16027,9 +14757,9 @@
}
},
"tslib": {
- "version": "2.3.1",
- "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.1.tgz",
- "integrity": "sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw==",
+ "version": "2.4.0",
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.0.tgz",
+ "integrity": "sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==",
"dev": true
},
"tsscmp": {
@@ -16055,21 +14785,6 @@
}
}
},
- "tunnel-agent": {
- "version": "0.6.0",
- "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz",
- "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=",
- "dev": true,
- "requires": {
- "safe-buffer": "^5.0.1"
- }
- },
- "tweetnacl": {
- "version": "0.14.5",
- "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz",
- "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=",
- "dev": true
- },
"type-check": {
"version": "0.4.0",
"resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz",
@@ -16086,9 +14801,9 @@
"dev": true
},
"type-fest": {
- "version": "0.8.1",
- "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz",
- "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==",
+ "version": "0.20.2",
+ "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz",
+ "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==",
"dev": true
},
"type-is": {
@@ -16128,21 +14843,15 @@
"integrity": "sha512-00y/AXhx0/SsnI51fTc0rLRmafiGOM4/O+ny10Ps7f+j/b8p/ZY11ytMgznXkOVo4GQ+KwQG5UQLkLGirsACRg==",
"dev": true
},
- "ultron": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/ultron/-/ultron-1.1.1.tgz",
- "integrity": "sha512-UIEXBNeYmKptWH6z8ZnqTeS8fV74zG0/eRU9VGkpzz+LIJNs8W/zM/L+7ctCkRrgbNnnR0xxw4bKOr0cW0N0Og==",
- "dev": true
- },
"unbox-primitive": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.1.tgz",
- "integrity": "sha512-tZU/3NqK3dA5gpE1KtyiJUrEB0lxnGkMFHptJ7q6ewdZ8s12QrODwNbhIJStmJkd1QDXa1NRA8aF2A1zk/Ypyw==",
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz",
+ "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==",
"dev": true,
"requires": {
- "function-bind": "^1.1.1",
- "has-bigints": "^1.0.1",
- "has-symbols": "^1.0.2",
+ "call-bind": "^1.0.2",
+ "has-bigints": "^1.0.2",
+ "has-symbols": "^1.0.3",
"which-boxed-primitive": "^1.0.2"
}
},
@@ -16156,12 +14865,6 @@
"through": "^2.3.8"
}
},
- "underscore": {
- "version": "1.13.2",
- "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.13.2.tgz",
- "integrity": "sha512-ekY1NhRzq0B08g4bGuX4wd2jZx5GnKz6mKSqFL4nqBlfyMGiG10gDFhDTMEfYmDL6Jy0FUIZp7wiRB+0BP7J2g==",
- "dev": true
- },
"unique-string": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/unique-string/-/unique-string-2.0.0.tgz",
@@ -16197,39 +14900,6 @@
"xdg-basedir": "^3.0.0"
},
"dependencies": {
- "ansi-regex": {
- "version": "4.1.1",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.1.tgz",
- "integrity": "sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==",
- "dev": true
- },
- "boxen": {
- "version": "3.2.0",
- "resolved": "https://registry.npmjs.org/boxen/-/boxen-3.2.0.tgz",
- "integrity": "sha512-cU4J/+NodM3IHdSL2yN8bqYqnmlBTidDR4RC7nJs61ZmtGz8VZzM3HLQX0zY5mrSmPtR3xWwsq2jOUQqFZN8+A==",
- "dev": true,
- "requires": {
- "ansi-align": "^3.0.0",
- "camelcase": "^5.3.1",
- "chalk": "^2.4.2",
- "cli-boxes": "^2.2.0",
- "string-width": "^3.0.0",
- "term-size": "^1.2.0",
- "type-fest": "^0.3.0",
- "widest-line": "^2.0.0"
- }
- },
- "chalk": {
- "version": "2.4.2",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
- "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
- "dev": true,
- "requires": {
- "ansi-styles": "^3.2.1",
- "escape-string-regexp": "^1.0.5",
- "supports-color": "^5.3.0"
- }
- },
"configstore": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/configstore/-/configstore-4.0.0.tgz",
@@ -16259,52 +14929,12 @@
"is-obj": "^1.0.0"
}
},
- "emoji-regex": {
- "version": "7.0.3",
- "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz",
- "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==",
- "dev": true
- },
- "global-dirs": {
- "version": "0.1.1",
- "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-0.1.1.tgz",
- "integrity": "sha1-sxnA3UYH81PzvpzKTHL8FIxJ9EU=",
- "dev": true,
- "requires": {
- "ini": "^1.3.4"
- }
- },
- "is-installed-globally": {
- "version": "0.1.0",
- "resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.1.0.tgz",
- "integrity": "sha1-Df2Y9akRFxbdU13aZJL2e/PSWoA=",
- "dev": true,
- "requires": {
- "global-dirs": "^0.1.0",
- "is-path-inside": "^1.0.0"
- }
- },
- "is-npm": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/is-npm/-/is-npm-3.0.0.tgz",
- "integrity": "sha512-wsigDr1Kkschp2opC4G3yA6r9EgVA6NjRpWzIi9axXqeIaAATPRJc4uLujXe3Nd9uO8KoDyA4MD6aZSeXTADhA==",
- "dev": true
- },
"is-obj": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz",
"integrity": "sha1-PkcprB9f3gJc19g6iW2rn09n2w8=",
"dev": true
},
- "is-path-inside": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-1.0.1.tgz",
- "integrity": "sha1-jvW33lBDej/cprToZe96pVy0gDY=",
- "dev": true,
- "requires": {
- "path-is-inside": "^1.0.1"
- }
- },
"make-dir": {
"version": "1.3.0",
"resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.3.0.tgz",
@@ -16314,62 +14944,6 @@
"pify": "^3.0.0"
}
},
- "pify": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz",
- "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=",
- "dev": true
- },
- "semver": {
- "version": "5.7.1",
- "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
- "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==",
- "dev": true
- },
- "semver-diff": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/semver-diff/-/semver-diff-2.1.0.tgz",
- "integrity": "sha1-S7uEN8jTfksM8aaP1ybsbWRdbTY=",
- "dev": true,
- "requires": {
- "semver": "^5.0.3"
- }
- },
- "string-width": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz",
- "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==",
- "dev": true,
- "requires": {
- "emoji-regex": "^7.0.1",
- "is-fullwidth-code-point": "^2.0.0",
- "strip-ansi": "^5.1.0"
- }
- },
- "strip-ansi": {
- "version": "5.2.0",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz",
- "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==",
- "dev": true,
- "requires": {
- "ansi-regex": "^4.1.0"
- }
- },
- "term-size": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/term-size/-/term-size-1.2.0.tgz",
- "integrity": "sha1-RYuDiH8oj8Vtb/+/rSYuJmOO+mk=",
- "dev": true,
- "requires": {
- "execa": "^0.7.0"
- }
- },
- "type-fest": {
- "version": "0.3.1",
- "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.3.1.tgz",
- "integrity": "sha512-cUGJnCdr4STbePCgqNFbpVNCepa+kAVohJs1sLhxzdH+gnEoOd8VhbYa7pD3zZYGiURWM2xzEII3fQcRizDkYQ==",
- "dev": true
- },
"unique-string": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/unique-string/-/unique-string-1.0.0.tgz",
@@ -16379,42 +14953,6 @@
"crypto-random-string": "^1.0.0"
}
},
- "widest-line": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-2.0.1.tgz",
- "integrity": "sha512-Ba5m9/Fa4Xt9eb2ELXt77JxVDV8w7qQrH0zS/TWSJdLyAwQjWoOzpzj5lwVftDz6n/EOu3tNACS84v509qwnJA==",
- "dev": true,
- "requires": {
- "string-width": "^2.1.1"
- },
- "dependencies": {
- "ansi-regex": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.1.tgz",
- "integrity": "sha512-+O9Jct8wf++lXxxFc4hc8LsjaSq0HFzzL7cVsw8pRDIPdjKD2mT4ytDZlLuSBZ4cLKZFXIrMGO7DbQCtMJJMKw==",
- "dev": true
- },
- "string-width": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz",
- "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==",
- "dev": true,
- "requires": {
- "is-fullwidth-code-point": "^2.0.0",
- "strip-ansi": "^4.0.0"
- }
- },
- "strip-ansi": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz",
- "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=",
- "dev": true,
- "requires": {
- "ansi-regex": "^3.0.0"
- }
- }
- }
- },
"write-file-atomic": {
"version": "2.4.3",
"resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-2.4.3.tgz",
@@ -16435,9 +14973,9 @@
}
},
"uri-js": {
- "version": "4.4.0",
- "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.0.tgz",
- "integrity": "sha512-B0yRTzYdUCCn9n+F4+Gh4yIDtMQcaJsmYBDsTSG8g/OejKBodLQ2IHfN3bM7jUsRXndopT7OIXWdYqc1fjmV6g==",
+ "version": "4.4.1",
+ "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz",
+ "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==",
"dev": true,
"requires": {
"punycode": "^2.1.0"
@@ -16471,9 +15009,9 @@
"dev": true
},
"v8-compile-cache": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.2.0.tgz",
- "integrity": "sha512-gTpR5XQNKFwOd4clxfnhaqvfqMpqEwr4tOtCyz4MtYZX2JYhfr1JvBFKdS+7K/9rfpZR3VLX+YWBbKoxCgS43Q==",
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz",
+ "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==",
"dev": true
},
"v8-to-istanbul": {
@@ -16485,14 +15023,6 @@
"@types/istanbul-lib-coverage": "^2.0.1",
"convert-source-map": "^1.6.0",
"source-map": "^0.7.3"
- },
- "dependencies": {
- "source-map": {
- "version": "0.7.3",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz",
- "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==",
- "dev": true
- }
}
},
"vary": {
@@ -16501,37 +15031,26 @@
"integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=",
"dev": true
},
- "verror": {
- "version": "1.10.0",
- "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz",
- "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=",
- "dev": true,
- "requires": {
- "assert-plus": "^1.0.0",
- "core-util-is": "1.0.2",
- "extsprintf": "^1.2.0"
- }
- },
"webidl-conversions": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz",
- "integrity": "sha1-JFNCdeKnvGvnvIZhHMFq4KVlSHE=",
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz",
+ "integrity": "sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==",
"dev": true
},
"whatwg-fetch": {
- "version": "3.6.1",
- "resolved": "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-3.6.1.tgz",
- "integrity": "sha512-IEmN/ZfmMw6G1hgZpVd0LuZXOQDisrMOZrzYd5x3RAK4bMPlJohKUZWZ9t/QsTvH0dV9TbPDcc2OSuIDcihnHA==",
+ "version": "3.6.2",
+ "resolved": "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-3.6.2.tgz",
+ "integrity": "sha512-bJlen0FcuU/0EMLrdbJ7zOnW6ITZLrZMIarMUVmdKtsGvZna8vxKYaexICWPfZ8qwf9fzNq+UEIZrnSaApt6RA==",
"dev": true
},
"whatwg-url": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz",
- "integrity": "sha1-lmRU6HZUYuN2RNNib2dCzotwll0=",
+ "version": "11.0.0",
+ "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-11.0.0.tgz",
+ "integrity": "sha512-RKT8HExMpoYx4igMiVMY83lN6UeITKJlBQ+vR/8ZJ8OCdSiN3RwCq+9gH0+Xzj0+5IrM6i4j/6LuvzbZIQgEcQ==",
"dev": true,
"requires": {
- "tr46": "~0.0.3",
- "webidl-conversions": "^3.0.0"
+ "tr46": "^3.0.0",
+ "webidl-conversions": "^7.0.0"
}
},
"which": {
@@ -16563,12 +15082,12 @@
"dev": true
},
"widest-line": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-3.1.0.tgz",
- "integrity": "sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg==",
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-2.0.1.tgz",
+ "integrity": "sha512-Ba5m9/Fa4Xt9eb2ELXt77JxVDV8w7qQrH0zS/TWSJdLyAwQjWoOzpzj5lwVftDz6n/EOu3tNACS84v509qwnJA==",
"dev": true,
"requires": {
- "string-width": "^4.0.0"
+ "string-width": "^2.1.1"
}
},
"word-wrap": {
@@ -16629,6 +15148,17 @@
"resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
"integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
"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"
+ }
}
}
},
@@ -16651,23 +15181,11 @@
}
},
"ws": {
- "version": "3.3.2",
- "resolved": "https://registry.npmjs.org/ws/-/ws-3.3.2.tgz",
- "integrity": "sha512-t+WGpsNxhMR4v6EClXS8r8km5ZljKJzyGhJf7goJz9k5Ye3+b5Bvno5rjqPuIBn5mnn5GBb7o8IrIWHxX1qOLQ==",
+ "version": "7.5.7",
+ "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.7.tgz",
+ "integrity": "sha512-KMvVuFzpKBuiIXW3E4u3mySRO2/mCHSyZDJQM5NQ9Q9KHWHWh0NHgfbRMLLrceUK5qAL4ytALJbpRMjixFZh8A==",
"dev": true,
- "requires": {
- "async-limiter": "~1.0.0",
- "safe-buffer": "~5.1.0",
- "ultron": "~1.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
- }
- }
+ "requires": {}
},
"xdg-basedir": {
"version": "4.0.0",
@@ -16675,22 +15193,16 @@
"integrity": "sha512-PSNhEJDejZYV7h50BohL09Er9VaIefr2LMAf3OEmpCkjOi34eYyQYAXUTjEQtZJTKcF0E2UKTh+osDLsgNim9Q==",
"dev": true
},
- "xmldom": {
- "version": "0.1.19",
- "resolved": "https://registry.npmjs.org/xmldom/-/xmldom-0.1.19.tgz",
- "integrity": "sha1-Yx/Ad3bv2EEYvyUXGzftTQdaCrw=",
- "dev": true
- },
"y18n": {
- "version": "5.0.8",
- "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz",
- "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==",
+ "version": "4.0.3",
+ "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz",
+ "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==",
"dev": true
},
"yallist": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz",
- "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=",
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
+ "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
"dev": true
},
"yargs": {
@@ -16712,6 +15224,12 @@
"yargs-parser": "^18.1.2"
},
"dependencies": {
+ "camelcase": {
+ "version": "5.3.1",
+ "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz",
+ "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==",
+ "dev": true
+ },
"find-up": {
"version": "4.1.0",
"resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz",
@@ -16761,22 +15279,45 @@
"integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==",
"dev": true
},
- "y18n": {
- "version": "4.0.3",
- "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz",
- "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==",
- "dev": true
+ "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"
+ }
+ },
+ "yargs-parser": {
+ "version": "18.1.3",
+ "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz",
+ "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==",
+ "dev": true,
+ "requires": {
+ "camelcase": "^5.0.0",
+ "decamelize": "^1.2.0"
+ }
}
}
},
"yargs-parser": {
- "version": "18.1.3",
- "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz",
- "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==",
+ "version": "13.1.2",
+ "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.2.tgz",
+ "integrity": "sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==",
"dev": true,
"requires": {
"camelcase": "^5.0.0",
"decamelize": "^1.2.0"
+ },
+ "dependencies": {
+ "camelcase": {
+ "version": "5.3.1",
+ "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz",
+ "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==",
+ "dev": true
+ }
}
},
"yauzl": {
diff --git a/package.json b/package.json
index ce7201a5..98aaaa57 100644
--- a/package.json
+++ b/package.json
@@ -23,10 +23,11 @@
"lib"
],
"scripts": {
- "build": "tsc --build",
+ "build": "tsc --build tsconfig.build.json",
"build:docs": "cd docs && JEKYLL_ENV=production bundle exec jekyll build",
- "clean": "tsc --build --clean",
+ "clean": "tsc --build --clean tsconfig.build.json",
"lint": "eslint . --ignore-path .gitignore",
+ "postlint": "tsc",
"prepack": "npm run build",
"presize": "npm run build",
"size": "size-limit",
@@ -35,25 +36,30 @@
"prettier": "@github/prettier-config",
"devDependencies": {
"@github/prettier-config": "^0.0.4",
- "@lhci/cli": "^0.7.0",
- "@open-wc/testing": "^3.1.2",
+ "@lhci/cli": "^0.9.0",
+ "@open-wc/testing": "^3.1.4",
"@size-limit/preset-small-lib": "^7.0.8",
- "@typescript-eslint/eslint-plugin": "^5.16.0",
- "@typescript-eslint/parser": "^5.16.0",
+ "@typescript-eslint/eslint-plugin": "^5.22.0",
+ "@typescript-eslint/parser": "^5.22.0",
"@web/dev-server-esbuild": "^0.3.0",
"@web/test-runner": "^0.13.27",
- "eslint": "^8.12.0",
+ "eslint": "^8.14.0",
"eslint-plugin-github": "^4.3.6",
"sinon": "^13.0.1",
"size-limit": "^7.0.8",
- "tslib": "^2.3.1",
+ "tslib": "^2.4.0",
"typescript": "^4.6.3"
},
"size-limit": [
{
"path": "lib/index.js",
"import": "{controller, attr, target, targets}",
- "limit": "1.64kb"
+ "limit": "2.5kb"
+ },
+ {
+ "path": "lib/abilities.js",
+ "import": "{providable}",
+ "limit": "1.1kb"
}
]
}
diff --git a/src/abilities.ts b/src/abilities.ts
new file mode 100644
index 00000000..53da07a6
--- /dev/null
+++ b/src/abilities.ts
@@ -0,0 +1 @@
+export {provide, getProvide, consume, getConsume, providable} from './providable.js'
diff --git a/src/ability.ts b/src/ability.ts
new file mode 100644
index 00000000..771bbd3f
--- /dev/null
+++ b/src/ability.ts
@@ -0,0 +1,18 @@
+import type {CustomElementClass} from './custom-element.js'
+
+type Decorator = (Class: CustomElementClass) => unknown
+const abilityMarkers = new WeakMap>()
+export const createAbility = (
+ decorate: (Class: TClass) => TExtend
+): ((Class: TClass) => TExtend) => {
+ return (Class: TClass): TExtend => {
+ const markers = abilityMarkers.get(Class)
+ if (markers?.has(decorate as Decorator)) return Class as unknown as TExtend
+ const NewClass = decorate(Class) as TExtend
+ Object.defineProperty(NewClass, 'name', {value: Class.name})
+ const newMarkers = new Set(markers)
+ newMarkers.add(decorate as Decorator)
+ abilityMarkers.set(NewClass as unknown as CustomElementClass, newMarkers)
+ return NewClass
+ }
+}
diff --git a/src/actionable.ts b/src/actionable.ts
new file mode 100644
index 00000000..97f66b9b
--- /dev/null
+++ b/src/actionable.ts
@@ -0,0 +1,58 @@
+import type {CustomElementClass, CustomElement} from './custom-element.js'
+import type {ControllableClass} from './controllable.js'
+import {registerTag, observeElementForTags, parseElementTags} from './tag-observer.js'
+import {controllable, attachShadowCallback} from './controllable.js'
+import {createAbility} from './ability.js'
+
+const parseActionAttribute = (tag: string): [tagName: string, event: string, method: string] => {
+ const eventSep = tag.lastIndexOf(':')
+ const methodSep = Math.max(0, tag.lastIndexOf('#')) || tag.length
+ return [tag.slice(eventSep + 1, methodSep), tag.slice(0, eventSep), tag.slice(methodSep + 1) || 'handleEvent']
+}
+registerTag(
+ 'data-action',
+ parseActionAttribute,
+ (el: Element, controller: Element | ShadowRoot, tag: string, event: string) => {
+ el.addEventListener(event, handleEvent)
+ }
+)
+
+const actionables = new WeakSet()
+// Bind a single function to all events to avoid anonymous closure performance penalty.
+function handleEvent(event: Event) {
+ const el = event.currentTarget as Element
+ for (const [tag, type, method] of parseElementTags(el, 'data-action', parseActionAttribute)) {
+ if (event.type === type) {
+ type EventDispatcher = CustomElement & Record unknown>
+ const controller = el.closest(tag)!
+ if (actionables.has(controller) && typeof controller[method] === 'function') {
+ controller[method](event)
+ }
+ const root = el.getRootNode()
+ if (root instanceof ShadowRoot) {
+ const shadowController = root.host as EventDispatcher
+ if (shadowController.matches(tag) && actionables.has(shadowController)) {
+ if (typeof shadowController[method] === 'function') {
+ shadowController[method](event)
+ }
+ }
+ }
+ }
+ }
+}
+
+export const actionable = createAbility(
+ (Class: T): T & ControllableClass =>
+ class extends controllable(Class) {
+ constructor() {
+ super()
+ actionables.add(this)
+ observeElementForTags(this)
+ }
+
+ [attachShadowCallback](root: ShadowRoot) {
+ super[attachShadowCallback]?.(root)
+ observeElementForTags(root)
+ }
+ }
+)
diff --git a/src/attr.ts b/src/attr.ts
deleted file mode 100644
index 7317c9dc..00000000
--- a/src/attr.ts
+++ /dev/null
@@ -1,96 +0,0 @@
-import type {CustomElement} from './custom-element.js'
-import {dasherize} from './dasherize.js'
-import {meta} from './core.js'
-
-const attrKey = 'attr'
-type attrValue = string | number | boolean
-
-/**
- * Attr is a decorator which tags a property as one to be initialized via
- * `initializeAttrs`.
- *
- * The signature is typed such that the property must be one of a String,
- * Number or Boolean. This matches the behavior of `initializeAttrs`.
- */
-export function attr(proto: Record, key: K): void {
- meta(proto, attrKey).add(key)
-}
-
-/**
- * initializeAttrs is called with a set of class property names (if omitted, it
- * will look for any properties tagged with the `@attr` decorator). With this
- * list it defines property descriptors for each property that map to `data-*`
- * attributes on the HTMLElement instance.
- *
- * It works around Native Class Property semantics - which are equivalent to
- * calling `Object.defineProperty` on the instance upon creation, but before
- * `constructor()` is called.
- *
- * If a class property is assigned to the class body, it will infer the type
- * (using `typeof`) and define an appropriate getter/setter combo that aligns
- * to that type. This means class properties assigned to Numbers can only ever
- * be Numbers, assigned to Booleans can only ever be Booleans, and assigned to
- * Strings can only ever be Strings.
- *
- * This is automatically called as part of `@controller`. If a class uses the
- * `@controller` decorator it should not call this manually.
- */
-const initialized = new WeakSet()
-export function initializeAttrs(instance: HTMLElement, names?: Iterable): void {
- if (initialized.has(instance)) return
- initialized.add(instance)
- if (!names) names = meta(Object.getPrototypeOf(instance), attrKey)
- for (const key of names) {
- const value = (>(instance))[key]
- const name = attrToAttributeName(key)
- let descriptor: PropertyDescriptor = {
- configurable: true,
- get(this: HTMLElement): string {
- return this.getAttribute(name) || ''
- },
- set(this: HTMLElement, newValue: string) {
- this.setAttribute(name, newValue || '')
- }
- }
- if (typeof value === 'number') {
- descriptor = {
- configurable: true,
- get(this: HTMLElement): number {
- return Number(this.getAttribute(name) || 0)
- },
- set(this: HTMLElement, newValue: string) {
- this.setAttribute(name, newValue)
- }
- }
- } else if (typeof value === 'boolean') {
- descriptor = {
- configurable: true,
- get(this: HTMLElement): boolean {
- return this.hasAttribute(name)
- },
- set(this: HTMLElement, newValue: boolean) {
- this.toggleAttribute(name, newValue)
- }
- }
- }
- Object.defineProperty(instance, key, descriptor)
- if (key in instance && !instance.hasAttribute(name)) {
- descriptor.set!.call(instance, value)
- }
- }
-}
-
-const attrToAttributeName = (name: string) => `data-${dasherize(name)}`
-
-export function defineObservedAttributes(classObject: CustomElement): void {
- let observed = classObject.observedAttributes || []
- Object.defineProperty(classObject, 'observedAttributes', {
- configurable: true,
- get() {
- return [...meta(classObject.prototype, attrKey)].map(attrToAttributeName).concat(observed)
- },
- set(attributes: string[]) {
- observed = attributes
- }
- })
-}
diff --git a/src/attrable.ts b/src/attrable.ts
new file mode 100644
index 00000000..ba8637b3
--- /dev/null
+++ b/src/attrable.ts
@@ -0,0 +1,114 @@
+import type {CustomElementClass} from './custom-element.js'
+import type {ControllableClass} from './controllable.js'
+import {controllable} from './controllable.js'
+import {dasherize, mustDasherize} from './dasherize.js'
+import {createMark} from './mark.js'
+import {createAbility} from './ability.js'
+
+const attrChangedCallback = Symbol()
+
+export interface Attrable {
+ [key: PropertyKey]: unknown
+ [attrChangedCallback](changed: Map): void
+}
+
+export interface AttrableClass {
+ new (): Attrable
+}
+
+const Identity = (v: unknown) => v
+let setFromMutation = false
+const attrs = new WeakMap>()
+
+const handleMutations = (mutations: MutationRecord[]) => {
+ for (const mutation of mutations) {
+ if (mutation.type === 'attributes') {
+ const name = mutation.attributeName!
+ const el = mutation.target as Element & {[key: PropertyKey]: unknown}
+ const key = attrs.get(el)?.get(name)
+ if (key) {
+ setFromMutation = true
+ el[key] = el.getAttribute(name)
+ setFromMutation = false
+ }
+ }
+ }
+}
+const observer = new MutationObserver(handleMutations)
+
+const [attr, getAttr, initializeAttrs] = createMark(
+ ({name}) => mustDasherize(name, '@attr'),
+ (instance: Element & Attrable, {name, kind, access}) => {
+ let cast: typeof Identity | typeof Boolean | typeof Number | typeof String = Identity
+ let initialValue: unknown
+ if (access.get) {
+ initialValue = access.get.call(instance)
+ } else if ('value' in access && kind !== 'method') {
+ initialValue = access.value
+ }
+ let value = initialValue
+ const attributeName = dasherize(name)
+ const setCallback = (kind === 'method' ? access.value : access.set) || Identity
+ const getCallback = access.get || (() => value)
+ if (!attrs.get(instance)) attrs.set(instance, new Map())
+ attrs.get(instance)!.set(attributeName, name)
+ if (typeof value === 'number') {
+ cast = Number
+ } else if (typeof value === 'boolean') {
+ cast = Boolean
+ } else if (typeof value === 'string') {
+ cast = String
+ }
+ const queue = new Map()
+ const requestAttrChanged = async (newValue: unknown) => {
+ queue.set(name, newValue)
+ if (queue.size > 1) return
+ await Promise.resolve()
+ const changed = new Map(queue)
+ queue.clear()
+ instance[attrChangedCallback](changed)
+ }
+ return {
+ get() {
+ const has = instance.hasAttribute(attributeName)
+ if (has) {
+ return cast === Boolean ? has : cast(instance.getAttribute(attributeName))
+ }
+ return cast(getCallback.call(instance))
+ },
+ set(newValue: unknown) {
+ const isInitial = newValue === null
+ if (isInitial) newValue = initialValue
+ const same = Object.is(value, newValue)
+ value = newValue
+ setCallback.call(instance, value)
+ if (setFromMutation || same || isInitial) return
+ requestAttrChanged(newValue)
+ }
+ }
+ }
+)
+
+export {attr, getAttr, attrChangedCallback}
+export const attrable = createAbility(
+ (Class: T): T & ControllableClass & AttrableClass =>
+ class extends controllable(Class) {
+ [key: PropertyKey]: unknown
+ constructor() {
+ super()
+ initializeAttrs(this)
+ observer.observe(this, {attributeFilter: Array.from(getAttr(this)).map(dasherize)})
+ }
+
+ [attrChangedCallback](changed: Map) {
+ if (!this.isConnected) return
+ for (const [name, value] of changed) {
+ if (typeof value === 'boolean') {
+ this.toggleAttribute(dasherize(name), value)
+ } else {
+ this.setAttribute(dasherize(name), String(value))
+ }
+ }
+ }
+ }
+)
diff --git a/src/auto-shadow-root.ts b/src/auto-shadow-root.ts
deleted file mode 100644
index c30fb0e7..00000000
--- a/src/auto-shadow-root.ts
+++ /dev/null
@@ -1,11 +0,0 @@
-export function autoShadowRoot(element: HTMLElement): void {
- for (const template of element.querySelectorAll('template[data-shadowroot]')) {
- if (template.parentElement === element) {
- element
- .attachShadow({
- mode: template.getAttribute('data-shadowroot') === 'closed' ? 'closed' : 'open'
- })
- .append(template.content.cloneNode(true))
- }
- }
-}
diff --git a/src/bind.ts b/src/bind.ts
deleted file mode 100644
index 6b4dc64b..00000000
--- a/src/bind.ts
+++ /dev/null
@@ -1,111 +0,0 @@
-const controllers = new WeakSet()
-
-/*
- * Bind `[data-action]` elements from the DOM to their actions.
- *
- */
-export function bind(controller: HTMLElement): void {
- controllers.add(controller)
- if (controller.shadowRoot) bindShadow(controller.shadowRoot)
- bindElements(controller)
- listenForBind(controller.ownerDocument)
-}
-
-export function bindShadow(root: ShadowRoot): void {
- bindElements(root)
- listenForBind(root)
-}
-
-const observers = new WeakMap()
-/**
- * Set up observer that will make sure any actions that are dynamically
- * injected into `el` will be bound to it's controller.
- *
- * This returns a Subscription object which you can call `unsubscribe()` on to
- * stop further live updates.
- */
-export function listenForBind(el: Node = document): Subscription {
- if (observers.has(el)) return observers.get(el)!
- let closed = false
- const observer = new MutationObserver(mutations => {
- for (const mutation of mutations) {
- if (mutation.type === 'attributes' && mutation.target instanceof Element) {
- bindActions(mutation.target)
- } else if (mutation.type === 'childList' && mutation.addedNodes.length) {
- for (const node of mutation.addedNodes) {
- if (node instanceof Element) {
- bindElements(node)
- }
- }
- }
- }
- })
- observer.observe(el, {childList: true, subtree: true, attributeFilter: ['data-action']})
- const subscription = {
- get closed() {
- return closed
- },
- unsubscribe() {
- closed = true
- observers.delete(el)
- observer.disconnect()
- }
- }
- observers.set(el, subscription)
- return subscription
-}
-
-interface Subscription {
- closed: boolean
- unsubscribe(): void
-}
-
-function bindElements(root: Element | ShadowRoot) {
- for (const el of root.querySelectorAll('[data-action]')) {
- bindActions(el)
- }
- // Also bind the controller to itself
- if (root instanceof Element && root.hasAttribute('data-action')) {
- bindActions(root)
- }
-}
-
-// Bind a single function to all events to avoid anonymous closure performance penalty.
-function handleEvent(event: Event) {
- const el = event.currentTarget as Element
- for (const binding of bindings(el)) {
- if (event.type === binding.type) {
- type EventDispatcher = HTMLElement & Record unknown>
- const controller = el.closest(binding.tag)!
- if (controllers.has(controller) && typeof controller[binding.method] === 'function') {
- controller[binding.method](event)
- }
- const root = el.getRootNode()
- if (root instanceof ShadowRoot && controllers.has(root.host) && root.host.matches(binding.tag)) {
- const shadowController = root.host as EventDispatcher
- if (typeof shadowController[binding.method] === 'function') {
- shadowController[binding.method](event)
- }
- }
- }
- }
-}
-
-type Binding = {type: string; tag: string; method: string}
-function* bindings(el: Element): Iterable {
- for (const action of (el.getAttribute('data-action') || '').trim().split(/\s+/)) {
- const eventSep = action.lastIndexOf(':')
- const methodSep = Math.max(0, action.lastIndexOf('#')) || action.length
- yield {
- type: action.slice(0, eventSep),
- tag: action.slice(eventSep + 1, methodSep),
- method: action.slice(methodSep + 1) || 'handleEvent'
- } || 'handleEvent'
- }
-}
-
-function bindActions(el: Element) {
- for (const binding of bindings(el)) {
- el.addEventListener(binding.type, handleEvent)
- }
-}
diff --git a/src/controllable.ts b/src/controllable.ts
new file mode 100644
index 00000000..a92368a0
--- /dev/null
+++ b/src/controllable.ts
@@ -0,0 +1,71 @@
+import type {CustomElementClass, CustomElement} from './custom-element.js'
+import {createAbility} from './ability.js'
+
+export interface Controllable {
+ [attachShadowCallback]?(shadowRoot: ShadowRoot): void
+ [attachInternalsCallback]?(internals: ElementInternals): void
+}
+export interface ControllableClass {
+ // TS mandates Constructors that get mixins have `...args: any[]`
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
+ new (...args: any[]): Controllable
+}
+
+export const attachShadowCallback = Symbol()
+export const attachInternalsCallback = Symbol()
+
+const shadows = new WeakMap()
+const internals = new WeakMap()
+const internalsCalled = new WeakSet()
+export const controllable = createAbility(
+ (Class: T): T & ControllableClass =>
+ class extends Class {
+ // TS mandates Constructors that get mixins have `...args: any[]`
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
+ constructor(...args: any[]) {
+ super(...args)
+ const shadowRoot = this.shadowRoot
+ if (shadowRoot && shadowRoot !== shadows.get(this)) this[attachShadowCallback](shadowRoot)
+ if (!internalsCalled.has(this)) {
+ try {
+ this.attachInternals()
+ } catch {
+ // Ignore errors
+ }
+ }
+ }
+
+ connectedCallback() {
+ this.setAttribute('data-catalyst', '')
+ super.connectedCallback?.()
+ }
+
+ attachShadow(...args: [init: ShadowRootInit]): ShadowRoot {
+ const shadowRoot = super.attachShadow(...args)
+ this[attachShadowCallback](shadowRoot)
+ return shadowRoot
+ }
+
+ [attachShadowCallback](this: CustomElement & Controllable, shadowRoot: ShadowRoot) {
+ shadows.set(this, shadowRoot)
+ }
+
+ attachInternals(): ElementInternals {
+ if (internals.has(this) && !internalsCalled.has(this)) {
+ internalsCalled.add(this)
+ return internals.get(this)!
+ }
+ const elementInternals = super.attachInternals()
+ this[attachInternalsCallback](elementInternals)
+ internals.set(this, elementInternals)
+ return elementInternals
+ }
+
+ [attachInternalsCallback](elementInternals: ElementInternals) {
+ const shadowRoot = elementInternals.shadowRoot
+ if (shadowRoot && shadowRoot !== shadows.get(this)) {
+ this[attachShadowCallback](shadowRoot)
+ }
+ }
+ }
+)
diff --git a/src/controller.ts b/src/controller.ts
index 4be1adbd..69e1c3bb 100644
--- a/src/controller.ts
+++ b/src/controller.ts
@@ -1,11 +1,15 @@
-import {CatalystDelegate} from './core.js'
-import type {CustomElement} from './custom-element.js'
+import type {CustomElementClass} from './custom-element.js'
+import {targetable} from './targetable.js'
+import {attrable} from './attrable.js'
+import {actionable} from './actionable.js'
+import {register} from './register.js'
+
/**
* Controller is a decorator to be used over a class that extends HTMLElement.
* It will automatically `register()` the component in the customElement
* registry, as well as ensuring `bind(this)` is called on `connectedCallback`,
* wrapping the classes `connectedCallback` method if needed.
*/
-export function controller(classObject: CustomElement): void {
- new CatalystDelegate(classObject)
+export function controller(Class: T) {
+ return register(actionable(attrable(targetable(Class))))
}
diff --git a/src/core.ts b/src/core.ts
index 4344de01..274f88cd 100644
--- a/src/core.ts
+++ b/src/core.ts
@@ -1,13 +1,10 @@
import {register} from './register.js'
-import {bind, bindShadow} from './bind.js'
-import {autoShadowRoot} from './auto-shadow-root.js'
-import {defineObservedAttributes, initializeAttrs} from './attr.js'
-import type {CustomElement} from './custom-element.js'
+import type {CustomElementClass} from './custom-element.js'
const symbol = Symbol.for('catalyst')
export class CatalystDelegate {
- constructor(classObject: CustomElement) {
+ constructor(classObject: CustomElementClass) {
// eslint-disable-next-line @typescript-eslint/no-this-alias
const delegate = this
@@ -42,7 +39,6 @@ export class CatalystDelegate {
}
})
- defineObservedAttributes(classObject)
register(classObject)
}
@@ -53,11 +49,7 @@ export class CatalystDelegate {
connectedCallback(instance: HTMLElement, connectedCallback: () => void) {
instance.toggleAttribute('data-catalyst', true)
customElements.upgrade(instance)
- autoShadowRoot(instance)
- initializeAttrs(instance)
- bind(instance)
connectedCallback?.call(instance)
- if (instance.shadowRoot) bindShadow(instance.shadowRoot)
}
disconnectedCallback(element: HTMLElement, disconnectedCallback: () => void) {
@@ -71,7 +63,6 @@ export class CatalystDelegate {
newValue: string | null,
attributeChangedCallback: (...args: unknown[]) => void
) {
- initializeAttrs(instance)
if (name !== 'data-catalyst' && attributeChangedCallback) {
attributeChangedCallback.call(instance, name, oldValue, newValue)
}
diff --git a/src/custom-element.ts b/src/custom-element.ts
index b86a5b6f..74961c64 100644
--- a/src/custom-element.ts
+++ b/src/custom-element.ts
@@ -1,4 +1,19 @@
-export interface CustomElement {
- new (): HTMLElement
+export interface CustomElement extends HTMLElement {
+ connectedCallback?(): void
+ attributeChangedCallback?(name: string, oldValue: string | null, newValue: string | null): void
+ disconnectedCallback?(): void
+ adoptedCallback?(): void
+ formAssociatedCallback?(form: HTMLFormElement): void
+ formDisabledCallback?(disabled: boolean): void
+ formResetCallback?(): void
+ formStateRestoreCallback?(state: unknown, reason: 'autocomplete' | 'restore'): void
+}
+
+export interface CustomElementClass {
+ // TS mandates Constructors that get mixins have `...args: any[]`
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
+ new (...args: any[]): CustomElement
observedAttributes?: string[]
+ disabledFeatures?: string[]
+ formAssociated?: boolean
}
diff --git a/src/dasherize.ts b/src/dasherize.ts
index a21fb1c3..b0699f84 100644
--- a/src/dasherize.ts
+++ b/src/dasherize.ts
@@ -1,6 +1,14 @@
export const dasherize = (str: unknown): string =>
- String(str)
+ String(typeof str === 'symbol' ? str.description : str)
.replace(/([A-Z]($|[a-z]))/g, '-$1')
.replace(/--/g, '-')
.replace(/^-|-$/, '')
.toLowerCase()
+
+export const mustDasherize = (str: unknown, type = 'property'): string => {
+ const dashed = dasherize(str)
+ if (!dashed.includes('-')) {
+ throw new DOMException(`${type}: ${String(str)} is not a valid ${type} name`, 'SyntaxError')
+ }
+ return dashed
+}
diff --git a/src/findtarget.ts b/src/findtarget.ts
deleted file mode 100644
index 69f448a5..00000000
--- a/src/findtarget.ts
+++ /dev/null
@@ -1,37 +0,0 @@
-/**
- * findTarget will run `querySelectorAll` against the given controller, plus
- * its shadowRoot, returning any the first child that:
- *
- * - Matches the selector of `[data-target~="tag.name"]` where tag is the
- * tagName of the given HTMLElement, and `name` is the given `name` argument.
- *
- * - Closest ascendant of the element, that matches the tagname of the
- * controller, is the specific instance of the controller itself - in other
- * words it is not nested in other controllers of the same type.
- *
- */
-export function findTarget(controller: HTMLElement, name: string): Element | undefined {
- const tag = controller.tagName.toLowerCase()
- if (controller.shadowRoot) {
- for (const el of controller.shadowRoot.querySelectorAll(`[data-target~="${tag}.${name}"]`)) {
- if (!el.closest(tag)) return el
- }
- }
- for (const el of controller.querySelectorAll(`[data-target~="${tag}.${name}"]`)) {
- if (el.closest(tag) === controller) return el
- }
-}
-
-export function findTargets(controller: HTMLElement, name: string): Element[] {
- const tag = controller.tagName.toLowerCase()
- const targets = []
- if (controller.shadowRoot) {
- for (const el of controller.shadowRoot.querySelectorAll(`[data-targets~="${tag}.${name}"]`)) {
- if (!el.closest(tag)) targets.push(el)
- }
- }
- for (const el of controller.querySelectorAll(`[data-targets~="${tag}.${name}"]`)) {
- if (el.closest(tag) === controller) targets.push(el)
- }
- return targets
-}
diff --git a/src/get-property-descriptor.ts b/src/get-property-descriptor.ts
new file mode 100644
index 00000000..370f65b6
--- /dev/null
+++ b/src/get-property-descriptor.ts
@@ -0,0 +1,7 @@
+export const getPropertyDescriptor = (instance: unknown, key: PropertyKey): PropertyDescriptor | undefined => {
+ while (instance) {
+ const descriptor = Object.getOwnPropertyDescriptor(instance, key)
+ if (descriptor) return descriptor
+ instance = Object.getPrototypeOf(instance)
+ }
+}
diff --git a/src/index.ts b/src/index.ts
index 0cb35f27..73190b7d 100644
--- a/src/index.ts
+++ b/src/index.ts
@@ -1,7 +1,20 @@
-export {bind, listenForBind} from './bind.js'
-export {register} from './register.js'
-export {findTarget, findTargets} from './findtarget.js'
-export {target, targets} from './target.js'
export {controller} from './controller.js'
-export {attr, initializeAttrs, defineObservedAttributes} from './attr.js'
-export {autoShadowRoot} from './auto-shadow-root.js'
+
+export {register} from './register.js'
+export {registerTag, observeElementForTags, parseElementTags} from './tag-observer.js'
+export {createMark} from './mark.js'
+export {dasherize, mustDasherize} from './dasherize.js'
+
+export {actionable} from './actionable.js'
+export {
+ target,
+ getTarget,
+ targets,
+ getTargets,
+ targetChangedCallback,
+ targetsChangedCallback,
+ targetable
+} from './targetable.js'
+export {attr, getAttr, attrable, attrChangedCallback} from './attrable.js'
+
+export type {CustomElement, CustomElementClass} from './custom-element.js'
diff --git a/src/mark.ts b/src/mark.ts
new file mode 100644
index 00000000..31e263a0
--- /dev/null
+++ b/src/mark.ts
@@ -0,0 +1,67 @@
+import {getPropertyDescriptor} from './get-property-descriptor.js'
+
+type PropertyType = 'field' | 'getter' | 'setter' | 'method'
+export interface PropertyDecorator {
+ (proto: object, key: PropertyKey, descriptor?: PropertyDescriptor): void
+ readonly static: unique symbol
+}
+type GetMarks = (instance: T) => Set
+type InitializeMarks = (instance: T) => void
+
+type Context = {
+ kind: PropertyType
+ name: PropertyKey
+ access: PropertyDescriptor
+}
+
+const getType = (descriptor?: PropertyDescriptor): PropertyType => {
+ if (descriptor) {
+ if (typeof descriptor.value === 'function') return 'method'
+ if (typeof descriptor.get === 'function') return 'getter'
+ if (typeof descriptor.set === 'function') return 'setter'
+ }
+ return 'field'
+}
+
+export function createMark(
+ validate: (context: {name: PropertyKey; kind: PropertyType}) => void,
+ initialize: (instance: T, context: Context) => PropertyDescriptor | void
+): [PropertyDecorator, GetMarks, InitializeMarks] {
+ const marks = new WeakMap>()
+ const get = (proto: object): Set => {
+ if (!marks.has(proto)) {
+ const parent = Object.getPrototypeOf(proto)
+ marks.set(proto, new Set(parent ? get(parent) || [] : []))
+ }
+ return marks.get(proto)!
+ }
+ const marker = (proto: object, name: PropertyKey, descriptor?: PropertyDescriptor): void => {
+ if (get(proto).has(name)) return
+ validate({name, kind: getType(descriptor)})
+ get(proto).add(name)
+ }
+ marker.static = Symbol()
+ const getMarks = (instance: T): Set => {
+ const proto = Object.getPrototypeOf(instance)
+ for (const key of proto.constructor[marker.static] || []) {
+ marker(proto, key, Object.getOwnPropertyDescriptor(proto, key))
+ }
+ return new Set(get(proto))
+ }
+ return [
+ marker as PropertyDecorator,
+ getMarks,
+ (instance: T): void => {
+ for (const name of getMarks(instance)) {
+ const access: PropertyDescriptor = getPropertyDescriptor(instance, name) || {
+ value: void 0,
+ configurable: true,
+ writable: true,
+ enumerable: true
+ }
+ const newDescriptor = initialize(instance, {name, kind: getType(access), access}) || access
+ Object.defineProperty(instance, name, Object.assign({configurable: true, enumerable: true}, newDescriptor))
+ }
+ }
+ ]
+}
diff --git a/src/providable.ts b/src/providable.ts
new file mode 100644
index 00000000..70d10faf
--- /dev/null
+++ b/src/providable.ts
@@ -0,0 +1,122 @@
+import type {CustomElementClass, CustomElement} from './custom-element.js'
+import {createMark} from './mark.js'
+import {createAbility} from './ability.js'
+
+export interface Context {
+ name: PropertyKey
+ initialValue?: T
+}
+export type ContextCallback = (value: ValueType, dispose?: () => void) => void
+export type ContextType> = T extends Context ? Y : never
+
+export class ContextEvent> extends Event {
+ public constructor(
+ public readonly context: T,
+ public readonly callback: ContextCallback>,
+ public readonly multiple?: boolean
+ ) {
+ super('context-request', {bubbles: true, composed: true})
+ }
+}
+
+function isContextEvent(event: unknown): event is ContextEvent> {
+ return (
+ event instanceof Event &&
+ event.type === 'context-request' &&
+ 'context' in event &&
+ 'callback' in event &&
+ 'multiple' in event
+ )
+}
+
+const contexts = new WeakMap void>>>()
+const [provide, getProvide, initProvide] = createMark(
+ ({name, kind}) => {
+ if (kind === 'setter') throw new Error(`@provide cannot decorate setter ${String(name)}`)
+ if (kind === 'method') throw new Error(`@provide cannot decorate method ${String(name)}`)
+ },
+ (instance: CustomElement, {name, kind, access}) => {
+ return {
+ get: () => (kind === 'getter' ? access.get!.call(instance) : access.value),
+ set: (newValue: unknown) => {
+ access.set?.call(instance, newValue)
+ for (const callback of contexts.get(instance)?.get(name) || []) callback(newValue)
+ }
+ }
+ }
+)
+const [consume, getConsume, initConsume] = createMark(
+ ({name, kind}) => {
+ if (kind === 'method') throw new Error(`@consume cannot decorate method ${String(name)}`)
+ },
+ (instance: CustomElement, {name, access}) => {
+ const initialValue: unknown = access.get?.call(instance) ?? access.value
+ let currentValue = initialValue
+ instance.dispatchEvent(
+ new ContextEvent(
+ {name, initialValue},
+ (value: unknown, dispose?: () => void) => {
+ if (!disposes.has(instance)) disposes.set(instance, new Map())
+ const instanceDisposes = disposes.get(instance)!
+ if (instanceDisposes.has(name)) {
+ const oldDispose = instanceDisposes.get(name)!
+ if (oldDispose !== dispose) oldDispose()
+ }
+ if (dispose) instanceDisposes.set(name, dispose)
+ currentValue = value
+ access.set?.call(instance, currentValue)
+ },
+ true
+ )
+ )
+ return {get: () => currentValue}
+ }
+)
+
+const disposes = new WeakMap void>>()
+
+export {consume, provide, getProvide, getConsume}
+export const providable = createAbility(
+ (Class: T): T =>
+ class extends Class {
+ [key: PropertyKey]: unknown
+
+ // TS mandates Constructors that get mixins have `...args: any[]`
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
+ constructor(...args: any[]) {
+ super(...args)
+ initProvide(this)
+ const provides = getProvide(this)
+ if (provides.size) {
+ if (!contexts.has(this)) contexts.set(this, new Map())
+ const instanceContexts = contexts.get(this)!
+ this.addEventListener('context-request', event => {
+ if (!isContextEvent(event)) return
+ const name = event.context.name
+ if (!provides.has(name)) return
+ const value = this[name]
+ const dispose = () => instanceContexts.get(name)?.delete(callback)
+ const eventCallback = event.callback
+ const callback = (newValue: unknown) => eventCallback(newValue, dispose)
+ if (event.multiple) {
+ if (!instanceContexts.has(name)) instanceContexts.set(name, new Set())
+ instanceContexts.get(name)!.add(callback)
+ }
+ event.stopPropagation()
+ callback(value)
+ })
+ }
+ }
+
+ connectedCallback() {
+ initConsume(this)
+ super.connectedCallback?.()
+ }
+
+ disconnectedCallback() {
+ for (const dispose of disposes.get(this)?.values() || []) {
+ dispose()
+ }
+ }
+ }
+)
diff --git a/src/register.ts b/src/register.ts
index ecc87265..5808a90c 100644
--- a/src/register.ts
+++ b/src/register.ts
@@ -1,4 +1,4 @@
-import type {CustomElement} from './custom-element.js'
+import type {CustomElementClass} from './custom-element.js'
import {dasherize} from './dasherize.js'
/**
@@ -8,8 +8,8 @@ import {dasherize} from './dasherize.js'
*
* Example: HelloController => hello-controller
*/
-export function register(classObject: CustomElement): void {
- const name = dasherize(classObject.name).replace(/-element$/, '')
+export function register(classObject: T): T {
+ const name = dasherize(classObject.name).replace(/-(element|controller|component)$/, '')
try {
window.customElements.define(name, classObject)
@@ -19,8 +19,7 @@ export function register(classObject: CustomElement): void {
} catch (e: unknown) {
// The only reason for window.customElements.define to throw a `NotSupportedError`
// is if the element has already been defined.
- if (e instanceof DOMException && e.name === 'NotSupportedError') return
-
- throw e
+ if (!(e instanceof DOMException && e.name === 'NotSupportedError')) throw e
}
+ return classObject
}
diff --git a/src/tag-observer.ts b/src/tag-observer.ts
new file mode 100644
index 00000000..249a0911
--- /dev/null
+++ b/src/tag-observer.ts
@@ -0,0 +1,67 @@
+type Parse = (str: string) => string[]
+type Found = (el: Element, controller: Element | ShadowRoot, tag: string, ...parsed: string[]) => void
+
+function closestShadowPiercing(el: Element, tagName: string): Element | null {
+ const closest: Element | null = el.closest(tagName)
+ if (!closest) {
+ const shadow = el.getRootNode()
+ if (!(shadow instanceof ShadowRoot)) return null
+ return shadow.host.closest(tagName)
+ }
+ return closest
+}
+
+export const parseElementTags = (el: Element, tag: string, parse: Parse) =>
+ (el.getAttribute(tag) || '')
+ .trim()
+ .split(/\s+/g)
+ .map((tagPart: string) => parse(tagPart))
+
+const registry = new Map()
+const observer = new MutationObserver((mutations: MutationRecord[]) => {
+ for (const mutation of mutations) {
+ if (mutation.type === 'attributes') {
+ const tag = mutation.attributeName!
+ const el = mutation.target
+
+ if (el instanceof Element && registry.has(tag)) {
+ const [parse, found] = registry.get(tag)!
+ for (const [tagName, ...meta] of parseElementTags(el, tag, parse)) {
+ const controller = closestShadowPiercing(el, tagName)
+ if (controller) found(el, controller, tag, ...meta)
+ }
+ }
+ } else if (mutation.addedNodes.length) {
+ for (const node of mutation.addedNodes) {
+ if (node instanceof Element) observeElementForTags(node)
+ }
+ }
+ }
+})
+
+export const registerTag = (tag: string, parse: Parse, found: Found) => {
+ if (registry.has(tag)) throw new Error('duplicate tag')
+ registry.set(tag, [parse, found])
+}
+
+export const observeElementForTags = (root: Element | ShadowRoot) => {
+ for (const [tag, [parse, found]] of registry) {
+ for (const el of root.querySelectorAll(`[${tag}]`)) {
+ for (const [tagName, ...meta] of parseElementTags(el, tag, parse)) {
+ const controller = closestShadowPiercing(el, tagName)
+ if (controller) found(el, controller, tag, ...meta)
+ }
+ }
+ if (root instanceof Element && root.hasAttribute(tag)) {
+ for (const [tagName, ...meta] of parseElementTags(root, tag, parse)) {
+ const controller = closestShadowPiercing(root, tagName)
+ if (controller) found(root, controller, tag, ...meta)
+ }
+ }
+ }
+ observer.observe(root instanceof Element ? root.ownerDocument : root, {
+ childList: true,
+ subtree: true,
+ attributeFilter: Array.from(registry.keys())
+ })
+}
diff --git a/src/target.ts b/src/target.ts
deleted file mode 100644
index 0ce510e6..00000000
--- a/src/target.ts
+++ /dev/null
@@ -1,36 +0,0 @@
-import {findTarget, findTargets} from './findtarget.js'
-import {meta} from './core.js'
-
-/**
- * Target is a decorator which - when assigned to a property field on the
- * class - will override that class field, turning it into a Getter which
- * returns a call to `findTarget(this, key)` where `key` is the name of the
- * property field. In other words, `@target foo` becomes a getter for
- * `findTarget(this, 'foo')`.
- */
-export function target(proto: Record, key: K): void {
- meta(proto, 'target').add(key)
- Object.defineProperty(proto, key, {
- configurable: true,
- get() {
- return findTarget(this, key)
- }
- })
-}
-
-/**
- * Targets is a decorator which - when assigned to a property field on the
- * class - will override that class field, turning it into a Getter which
- * returns a call to `findTargets(this, key)` where `key` is the name of the
- * property field. In other words, `@targets foo` becomes a getter for
- * `findTargets(this, 'foo')`.
- */
-export function targets(proto: Record, key: K): void {
- meta(proto, 'targets').add(key)
- Object.defineProperty(proto, key, {
- configurable: true,
- get() {
- return findTargets(this, key)
- }
- })
-}
diff --git a/src/targetable.ts b/src/targetable.ts
new file mode 100644
index 00000000..88aa8fd1
--- /dev/null
+++ b/src/targetable.ts
@@ -0,0 +1,120 @@
+import type {CustomElementClass} from './custom-element.js'
+import type {ControllableClass} from './controllable.js'
+import {registerTag, observeElementForTags} from './tag-observer.js'
+import {createMark} from './mark.js'
+import {controllable, attachShadowCallback} from './controllable.js'
+import {dasherize} from './dasherize.js'
+import {createAbility} from './ability.js'
+
+export interface Targetable {
+ [targetChangedCallback](key: PropertyKey, target: Element): void
+ [targetsChangedCallback](key: PropertyKey, targets: Element[]): void
+}
+export interface TargetableClass {
+ new (): Targetable
+}
+
+const targetChangedCallback = Symbol()
+const targetsChangedCallback = Symbol()
+
+const [target, getTarget, initializeTarget] = createMark(
+ ({name, kind}) => {
+ if (kind === 'getter') throw new Error(`@target cannot decorate get ${String(name)}`)
+ },
+ (instance: Element, {name, access}) => {
+ const selector = [
+ `[data-target~="${instance.tagName.toLowerCase()}.${dasherize(name)}"]`,
+ `[data-target~="${instance.tagName.toLowerCase()}.${String(name)}"]`
+ ]
+ const find = findTarget(instance, selector.join(', '), false)
+ return {
+ get: find,
+ set: () => {
+ if (access?.set) access.set.call(instance, find())
+ }
+ }
+ }
+)
+const [targets, getTargets, initializeTargets] = createMark(
+ ({name, kind}) => {
+ if (kind === 'getter') throw new Error(`@target cannot decorate get ${String(name)}`)
+ },
+ (instance: Element, {name, access}) => {
+ const selector = [
+ `[data-targets~="${instance.tagName.toLowerCase()}.${dasherize(name)}"]`,
+ `[data-targets~="${instance.tagName.toLowerCase()}.${String(name)}"]`
+ ]
+ const find = findTarget(instance, selector.join(', '), true)
+ return {
+ get: find,
+ set: () => {
+ if (access?.set) access.set.call(instance, find())
+ }
+ }
+ }
+)
+
+function setTarget(el: Element, controller: Element | ShadowRoot, tag: string, key: string): void {
+ const get = tag === 'data-targets' ? getTargets : getTarget
+ if (controller instanceof ShadowRoot) {
+ controller = controllers.get(controller)!
+ }
+ if (controller && get(controller)?.has(key)) {
+ ;(controller as unknown as Record)[key] = {}
+ }
+}
+
+registerTag('data-target', (str: string) => str.split('.'), setTarget)
+registerTag('data-targets', (str: string) => str.split('.'), setTarget)
+const shadows = new WeakMap()
+const controllers = new WeakMap()
+
+const findTarget = (controller: Element, selector: string, many: boolean) => () => {
+ const nodes = []
+ const shadow = shadows.get(controller)
+ if (shadow) {
+ for (const el of shadow.querySelectorAll(selector)) {
+ if (!el.closest(controller.tagName)) {
+ nodes.push(el)
+ if (!many) break
+ }
+ }
+ }
+ if (many || !nodes.length) {
+ for (const el of controller.querySelectorAll(selector)) {
+ if (el.closest(controller.tagName) === controller) {
+ nodes.push(el)
+ if (!many) break
+ }
+ }
+ }
+ return many ? nodes : nodes[0]
+}
+
+export {target, getTarget, targets, getTargets, targetChangedCallback, targetsChangedCallback}
+export const targetable = createAbility(
+ (Class: T): T & ControllableClass & TargetableClass =>
+ class extends controllable(Class) {
+ constructor() {
+ super()
+ observeElementForTags(this)
+ initializeTarget(this)
+ initializeTargets(this)
+ }
+
+ [targetChangedCallback]() {
+ return
+ }
+
+ [targetsChangedCallback]() {
+ return
+ }
+
+ [attachShadowCallback](root: ShadowRoot) {
+ super[attachShadowCallback]?.(root)
+ shadows.set(this, root)
+ controllers.set(root, this)
+ observeElementForTags(root)
+ }
+ }
+)
diff --git a/test/ability.ts b/test/ability.ts
new file mode 100644
index 00000000..e3c0ad14
--- /dev/null
+++ b/test/ability.ts
@@ -0,0 +1,101 @@
+import type {CustomElement} from '../src/custom-element.js'
+import {expect, fixture, html} from '@open-wc/testing'
+import {restore} from 'sinon'
+import {createAbility} from '../src/ability.js'
+
+describe('ability', () => {
+ const calls: string[] = []
+ const fakeable = createAbility(
+ Class =>
+ class extends Class {
+ foo() {
+ return 'foo!'
+ }
+ connectedCallback() {
+ calls.push('fakeable connectedCallback')
+ super.connectedCallback?.()
+ }
+ disconnectedCallback() {
+ calls.push('fakeable disconnectedCallback')
+ super.disconnectedCallback?.()
+ }
+ adoptedCallback() {
+ calls.push('fakeable adoptedCallback')
+ super.adoptedCallback?.()
+ }
+ attributeChangedCallback(name: string, oldValue: string | null, newValue: string | null) {
+ calls.push('fakeable attributeChangedCallback')
+ super.attributeChangedCallback?.(name, oldValue, newValue)
+ }
+ }
+ )
+ const otherfakeable = createAbility(
+ Class =>
+ class extends Class {
+ bar() {
+ return 'bar!'
+ }
+ connectedCallback() {
+ calls.push('otherfakeable connectedCallback')
+ super.connectedCallback?.()
+ }
+ disconnectedCallback() {
+ calls.push('otherfakeable disconnectedCallback')
+ super.disconnectedCallback?.()
+ }
+ adoptedCallback() {
+ calls.push('otherfakeable adoptedCallback')
+ super.adoptedCallback?.()
+ }
+ attributeChangedCallback(name: string, oldValue: string | null, newValue: string | null) {
+ calls.push('otherfakeable attributeChangedCallback')
+ super.attributeChangedCallback?.(name, oldValue, newValue)
+ }
+ }
+ )
+ class Element extends HTMLElement {
+ connectedCallback() {}
+ disconnectedCallback() {}
+ adoptedCallback() {}
+ attributeChangedCallback() {}
+ }
+
+ afterEach(() => restore())
+
+ it('creates a function, which creates a subclass of the given class', async () => {
+ const DElement = fakeable(Element)
+ expect(DElement).to.have.property('prototype').instanceof(Element)
+ })
+
+ it('retains original class name', () => {
+ const DElement = fakeable(Element)
+ const D2Element = otherfakeable(Element)
+ expect(DElement).to.have.property('name', 'Element')
+ expect(D2Element).to.have.property('name', 'Element')
+ })
+
+ it('can be used in decorator position', async () => {
+ @fakeable
+ class DElement extends HTMLElement {}
+
+ expect(DElement).to.have.property('prototype').instanceof(HTMLElement)
+ })
+
+ it('can be chained with multiple abilities', async () => {
+ const DElement = fakeable(Element)
+ expect(Element).to.not.equal(DElement)
+ const D2Element = otherfakeable(DElement)
+ expect(DElement).to.not.equal(D2Element)
+ expect(DElement).to.have.property('prototype').be.instanceof(Element)
+ expect(D2Element).to.have.property('prototype').be.instanceof(Element)
+ })
+
+ it('can be called multiple times, but only applies once', async () => {
+ const MultipleFakeable = fakeable(fakeable(fakeable(fakeable(fakeable(Element)))))
+ customElements.define('multiple-fakeable', MultipleFakeable)
+ const instance: CustomElement = await fixture(html` `)
+ expect(calls).to.eql(['fakeable connectedCallback'])
+ instance.connectedCallback!()
+ expect(calls).to.eql(['fakeable connectedCallback', 'fakeable connectedCallback'])
+ })
+})
diff --git a/test/actionable.ts b/test/actionable.ts
new file mode 100644
index 00000000..124619ce
--- /dev/null
+++ b/test/actionable.ts
@@ -0,0 +1,247 @@
+import {expect, fixture, html} from '@open-wc/testing'
+import {fake} from 'sinon'
+import {actionable} from '../src/actionable.js'
+
+describe('Actionable', () => {
+ @actionable
+ class BindTestElement extends HTMLElement {
+ foo = fake()
+ bar = fake()
+ handleEvent = fake()
+ }
+ window.customElements.define('bind-test', BindTestElement)
+ let instance: BindTestElement
+ beforeEach(async () => {
+ instance = await fixture(html`
+
+
+
+
+
+
+
`)
+ })
+
+ it('binds events on elements based on their data-action attribute', () => {
+ expect(instance.foo).to.have.callCount(0)
+ instance.querySelector('#el1')!.click()
+ expect(instance.foo).to.have.callCount(1)
+ })
+
+ it('allows for the presence of `:` in an event name', () => {
+ expect(instance.foo).to.have.callCount(0)
+ instance.querySelector('#el2')!.dispatchEvent(new CustomEvent('custom:event'))
+ expect(instance.foo).to.have.callCount(1)
+ })
+
+ it('binds events on the controller to itself', () => {
+ expect(instance.foo).to.have.callCount(0)
+ instance.dispatchEvent(new CustomEvent('foo'))
+ expect(instance.foo).to.have.callCount(1)
+ })
+
+ it('does not bind elements whose closest selector is not this controller', () => {
+ instance.ownerDocument.querySelector('#el6')!.click()
+ expect(instance.foo).to.have.callCount(0)
+ })
+
+ it('does not bind elements whose data-action does not match controller tagname', () => {
+ expect(instance.foo).to.have.callCount(0)
+ instance.querySelector('#el2')!.click()
+ expect(instance.foo).to.have.callCount(0)
+ })
+
+ it('does not bind methods that dont exist', () => {
+ expect(instance.foo).to.have.callCount(0)
+ instance.querySelector('#el3')!.click()
+ expect(instance.foo).to.have.callCount(0)
+ })
+
+ it('can bind multiple event types', () => {
+ expect(instance.foo).to.have.callCount(0)
+ instance.querySelector('#el3')!.dispatchEvent(new CustomEvent('focus'))
+ expect(instance.foo).to.have.callCount(1)
+ instance.querySelector('#el3')!.dispatchEvent(new CustomEvent('submit'))
+ expect(instance.foo).to.have.callCount(2)
+ expect(instance.foo.getCall(0).args[0].type).to.equal('focus')
+ expect(instance.foo.getCall(1).args[0].type).to.equal('submit')
+ })
+
+ it('binds to `handleEvent` is function name is omitted', () => {
+ expect(instance.handleEvent).to.have.callCount(0)
+ instance.querySelector('#el4')!.dispatchEvent(new CustomEvent('handle'))
+ expect(instance.handleEvent).to.have.callCount(1)
+ instance.querySelector('#el4')!.dispatchEvent(new CustomEvent('other'))
+ expect(instance.handleEvent).to.have.callCount(2)
+ expect(instance.handleEvent.getCall(0).args[0].type).to.equal('handle')
+ expect(instance.handleEvent.getCall(1).args[0].type).to.equal('other')
+ })
+
+ it('can bind multiple actions separated by line feed', () => {
+ expect(instance.foo).to.have.callCount(0)
+ instance.querySelector('#el5')!.dispatchEvent(new CustomEvent('click'))
+ expect(instance.foo).to.have.callCount(1)
+ expect(instance.bar).to.have.callCount(1)
+ expect(instance.foo.getCall(0).args[0].type).to.equal('click')
+ expect(instance.bar.getCall(0).args[0].type).to.equal('click')
+ })
+
+ it('can bind multiple elements to the same event', () => {
+ expect(instance.foo).to.have.callCount(0)
+ instance.querySelector('#el1')!.click()
+ expect(instance.foo).to.have.callCount(1)
+ instance.querySelector('#el5')!.click()
+ expect(instance.foo).to.have.callCount(2)
+ expect(instance.foo.getCall(0).args[0].target.id).to.equal('el1')
+ expect(instance.foo.getCall(1).args[0].target.id).to.equal('el5')
+ })
+
+ it('binds elements added to elements subtree', async () => {
+ const el1 = document.createElement('div')
+ const el2 = document.createElement('div')
+ el1.setAttribute('data-action', 'click:bind-test#foo')
+ el2.setAttribute('data-action', 'submit:bind-test#foo')
+ instance.append(el1, el2)
+
+ // We need to wait for one microtask after injecting the HTML into to
+ // controller so that the actions have been bound to the controller.
+ await Promise.resolve()
+
+ expect(instance.foo).to.have.callCount(0)
+ el1.click()
+ expect(instance.foo).to.have.callCount(1)
+ el2.dispatchEvent(new CustomEvent('submit'))
+ expect(instance.foo).to.have.callCount(2)
+ })
+
+ it('can bind elements within the shadowDOM', async () => {
+ const el1 = document.createElement('div')
+ const el2 = document.createElement('div')
+ el1.setAttribute('data-action', 'click:bind-test#foo')
+ el2.setAttribute('data-action', 'submit:bind-test#foo')
+ const shadowRoot = instance.attachShadow({mode: 'open'})
+ shadowRoot.append(el1, el2)
+
+ // We need to wait for one microtask after injecting the HTML into to
+ // controller so that the actions have been bound to the controller.
+ await Promise.resolve()
+
+ expect(instance.foo).to.have.callCount(0)
+ el1.click()
+ expect(instance.foo).to.have.callCount(1)
+ el2.dispatchEvent(new CustomEvent('submit'))
+ expect(instance.foo).to.have.callCount(2)
+ })
+
+ it('can bind elements within a closed shadowDOM', async () => {
+ const el1 = document.createElement('div')
+ const el2 = document.createElement('div')
+ el1.setAttribute('data-action', 'click:bind-test#foo')
+ el2.setAttribute('data-action', 'submit:bind-test#foo')
+ const shadowRoot = instance.attachShadow({mode: 'closed'})
+ shadowRoot.append(el1, el2)
+
+ // We need to wait for one microtask after injecting the HTML into to
+ // controller so that the actions have been bound to the controller.
+ await Promise.resolve()
+
+ expect(instance.foo).to.have.callCount(0)
+ el1.click()
+ expect(instance.foo).to.have.callCount(1)
+ el2.dispatchEvent(new CustomEvent('submit'))
+ expect(instance.foo).to.have.callCount(2)
+ })
+
+ describe('mutations', () => {
+ it('re-binds actions that are denoted by HTML that is dynamically injected into the controller', async function () {
+ const button = document.createElement('button')
+ button.setAttribute('data-action', 'click:bind-test#foo')
+ instance.appendChild(button)
+
+ // We need to wait for one microtask after injecting the HTML into to
+ // controller so that the actions have been bound to the controller.
+ await Promise.resolve()
+
+ button.click()
+ expect(instance.foo).to.have.callCount(1)
+ })
+
+ it('binds elements mutated in shadowDOM', async () => {
+ const el1 = document.createElement('div')
+ const el2 = document.createElement('div')
+ const shadowRoot = instance.attachShadow({mode: 'open'})
+ shadowRoot.append(el1, el2)
+
+ // We need to wait for one microtask after injecting the HTML into to
+ // controller so that the actions have been bound to the controller.
+ await Promise.resolve()
+
+ el1.click()
+ expect(instance.foo).to.have.callCount(0)
+
+ el1.setAttribute('data-action', 'click:bind-test#foo')
+ el2.setAttribute('data-action', 'submit:bind-test#foo')
+
+ // We need to wait for one microtask after injecting the HTML into to
+ // controller so that the actions have been bound to the controller.
+ await Promise.resolve()
+
+ expect(instance.foo).to.have.callCount(0)
+ el1.click()
+ expect(instance.foo).to.have.callCount(1)
+ el2.dispatchEvent(new CustomEvent('submit'))
+ expect(instance.foo).to.have.callCount(2)
+ })
+
+ it('re-binds actions deeply in the HTML', async function () {
+ instance.innerHTML = `
+
+ `
+ // We need to wait for one microtask after injecting the HTML into to
+ // controller so that the actions have been bound to the controller.
+ await Promise.resolve()
+
+ instance.querySelector('button')!.click()
+ expect(instance.foo).to.have.callCount(1)
+ })
+
+ it('will not fire if the binding attribute is removed', () => {
+ expect(instance.foo).to.have.callCount(0)
+ const el = instance.querySelector('#el1')!
+
+ el.click()
+ expect(instance.foo).to.have.callCount(1)
+ el.setAttribute('data-action', 'click:other-element#foo')
+ el.click()
+ expect(instance.foo).to.have.callCount(1)
+ })
+
+ it('will rebind elements if the attribute changes', async function () {
+ expect(instance.foo).to.have.callCount(0)
+ const el = instance.querySelector('#el1')!
+
+ el.click()
+ expect(instance.foo).to.have.callCount(1)
+ el.setAttribute('data-action', 'submit:bind-test#foo')
+ el.click()
+ expect(instance.foo).to.have.callCount(1)
+
+ // We need to wait for one microtask after injecting the HTML into to
+ // controller so that the actions have been bound to the controller.
+ await Promise.resolve()
+
+ el.dispatchEvent(new CustomEvent('submit'))
+ expect(instance.foo).to.have.callCount(2)
+ })
+ })
+})
diff --git a/test/attr.ts b/test/attr.ts
deleted file mode 100644
index 31728283..00000000
--- a/test/attr.ts
+++ /dev/null
@@ -1,154 +0,0 @@
-import {expect, fixture, html} from '@open-wc/testing'
-import {controller} from '../src/controller.js'
-import {attr} from '../src/attr.js'
-
-describe('Attr', () => {
- @controller
- class InitializeAttrTest extends HTMLElement {
- @attr foo = 'hello'
- bar = 1
- }
-
- let instance
- beforeEach(async () => {
- instance = await fixture(html` `)
- })
-
- it('does not error during creation', () => {
- document.createElement('initialize-attr-test')
- })
-
- it('marks attrs as observedAttributes', () => {
- expect(InitializeAttrTest.observedAttributes).to.eql(['data-foo'])
- })
-
- it('creates a getter/setter pair for each given attr name', () => {
- expect(instance.foo).to.equal('hello')
- expect(instance).to.have.ownPropertyDescriptor('foo')
- })
-
- it('sets the attribute to a previously defined value on the key', () => {
- expect(instance.foo).to.equal('hello')
- expect(instance.getAttributeNames()).to.include('data-foo')
- expect(instance.getAttribute('data-foo')).to.equal('hello')
- })
-
- it('reflects the `data-*` attribute name of the given key', () => {
- expect(instance.foo).to.equal('hello')
- instance.foo = 'bar'
- expect(instance.getAttributeNames()).to.include('data-foo')
- expect(instance.getAttribute('data-foo')).to.equal('bar')
- instance.setAttribute('data-foo', 'baz')
- expect(instance.foo).to.equal('baz')
- })
-
- it('sets the attribute to a previously defined value on the key', () => {
- instance.foo = 'hello'
- expect(instance.foo).to.equal('hello')
- expect(instance.getAttributeNames()).to.include('data-foo')
- expect(instance.getAttribute('data-foo')).to.equal('hello')
- })
-
- it('prioritises the value in the attribute over the property', async () => {
- instance = await fixture(html` `)
- expect(instance.foo).to.equal('goodbye')
- expect(instance.getAttributeNames()).to.include('data-foo')
- expect(instance.getAttribute('data-foo')).to.equal('goodbye')
- })
-
- describe('types', () => {
- it('infers number types from property and casts as number always', async () => {
- @controller
- class NumberAttrTest extends HTMLElement {
- @attr foo = 1
- }
- expect(NumberAttrTest).to.have.property('observedAttributes').include('data-foo')
- instance = await fixture(html` `)
- expect(instance.foo).to.equal(1)
- expect(instance.getAttributeNames()).to.include('data-foo')
- expect(instance.getAttribute('data-foo')).to.equal('1')
- instance.setAttribute('data-foo', '7')
- expect(instance.foo).to.equal(7)
- instance.setAttribute('data-foo', '-3.14')
- expect(instance.foo).to.equal(-3.14)
- instance.setAttribute('data-foo', 'Not a Number')
- expect(Number.isNaN(instance.foo)).to.equal(true)
- instance.removeAttribute('data-foo')
- expect(instance.foo).to.equal(0)
- instance.foo = 3.14
- expect(instance.getAttribute('data-foo')).to.equal('3.14')
- })
-
- it('infers boolean types from property and uses has/toggleAttribute', async () => {
- @controller
- class BooleanAttrTest extends HTMLElement {
- @attr foo = false
- }
- expect(BooleanAttrTest).to.have.property('observedAttributes').include('data-foo')
- instance = await fixture(html` `)
- expect(instance.foo).to.equal(false)
- expect(instance.getAttributeNames()).to.not.include('data-foo')
- expect(instance.getAttribute('data-foo')).to.equal(null)
- instance.setAttribute('data-foo', '7')
- expect(instance.foo).to.equal(true)
- instance.setAttribute('data-foo', 'hello')
- expect(instance.foo).to.equal(true)
- instance.setAttribute('data-foo', 'false')
- expect(instance.foo).to.equal(true)
- instance.removeAttribute('data-foo')
- expect(instance.foo).to.equal(false)
- instance.foo = '1'
- expect(instance.foo).to.equal(true)
- expect(instance.getAttributeNames()).to.include('data-foo')
- expect(instance.getAttribute('data-foo')).to.equal('')
- instance.foo = false
- expect(instance.getAttributeNames()).to.not.include('data-foo')
- })
-
- it('defaults to inferring string type for non-boolean non-number types', async () => {
- @controller
- class RegExpAttrTest extends HTMLElement {
- @attr foo = /^a regexp$/
- }
- expect(RegExpAttrTest).to.have.property('observedAttributes').include('data-foo')
- instance = await fixture(html` `)
- expect(instance.foo).to.equal('/^a regexp$/')
- expect(instance.getAttributeNames()).to.include('data-foo')
- expect(instance.getAttribute('data-foo')).to.equal('/^a regexp$/')
- })
- })
-
- describe('naming', () => {
- @controller
- class NamingAttrTest extends HTMLElement {
- @attr fooBarBazBing = 'a'
- @attr URLBar = 'b'
- @attr ClipX = 'c'
- }
-
- beforeEach(async () => {
- instance = await fixture(html` `)
- })
-
- it('converts camel cased property names to their HTML dasherized equivalents', async () => {
- expect(NamingAttrTest).to.have.property('observedAttributes').include('data-foo-bar-baz-bing')
- expect(instance.fooBarBazBing).to.equal('a')
- instance.fooBarBazBing = 'bar'
- expect(instance.getAttributeNames()).to.include('data-foo-bar-baz-bing')
- })
-
- it('will intuitively dasherize acryonyms', async () => {
- expect(NamingAttrTest).to.have.property('observedAttributes').include('data-url-bar')
- expect(instance.URLBar).to.equal('b')
- instance.URLBar = 'bar'
- expect(instance.getAttributeNames()).to.include('data-url-bar')
- })
-
- it('dasherizes cap suffixed names correctly', async () => {
- expect(NamingAttrTest).to.have.property('observedAttributes').include('data-clip-x')
- expect(instance.ClipX).to.equal('c')
- instance.ClipX = 'bar'
- expect(instance.getAttributeNames()).to.include('data-clip-x')
- })
- })
-})
diff --git a/test/attrable.ts b/test/attrable.ts
new file mode 100644
index 00000000..1a497ccc
--- /dev/null
+++ b/test/attrable.ts
@@ -0,0 +1,298 @@
+import {expect, fixture, html} from '@open-wc/testing'
+import {attr, attrable} from '../src/attrable.js'
+
+describe('Attrable', () => {
+ {
+ @attrable
+ class InitializeAttrTest extends HTMLElement {
+ @attr fooBar = 'hello'
+ fooBaz = 1
+
+ getCount = 0
+ setCount = 0
+ #bing = 'world'
+ get bingBaz() {
+ this.getCount += 1
+ return this.#bing
+ }
+ @attr set bingBaz(value: string) {
+ this.setCount += 1
+ this.#bing = value
+ }
+ }
+ window.customElements.define('initialize-attr-test', InitializeAttrTest)
+
+ let instance: InitializeAttrTest
+ beforeEach(async () => {
+ instance = await fixture(html` `)
+ })
+
+ it('does not error during creation', () => {
+ document.createElement('initialize-attr-test')
+ })
+
+ it('does not alter field values from their initial value', () => {
+ expect(instance).to.have.property('fooBar', 'hello')
+ expect(instance).to.have.property('fooBaz', 1)
+ expect(instance).to.have.property('bingBaz', 'world')
+ })
+
+ it('does not create attributes based on the initial value', () => {
+ expect(instance).to.not.have.attribute('foo-bar')
+ expect(instance).to.not.have.attribute('foo-baz')
+ expect(instance).to.not.have.attribute('bing-baz')
+ })
+
+ it('prioritises the value in the attribute over the property', async () => {
+ instance = await fixture(html` `)
+ expect(instance).to.have.property('fooBar', 'goodbye')
+ expect(instance).to.have.attribute('foo-bar', 'goodbye')
+ expect(instance).to.have.property('bingBaz', 'universe')
+ expect(instance).to.have.attribute('bing-baz', 'universe')
+ })
+
+ it('changes the property when the attribute changes', async () => {
+ instance.setAttribute('foo-bar', 'goodbye')
+ await Promise.resolve()
+ expect(instance).to.have.property('fooBar', 'goodbye')
+ instance.setAttribute('bing-baz', 'universe')
+ await Promise.resolve()
+ expect(instance).to.have.property('bingBaz', 'universe')
+ })
+
+ it('resets to the default value when the attribute is removed', async () => {
+ instance.setAttribute('foo-bar', 'goodbye')
+ expect(instance).to.have.property('fooBar', 'goodbye')
+ instance.setAttribute('foo-bar', 'goodbye')
+ instance.removeAttribute('foo-bar')
+ await Promise.resolve()
+ expect(instance).to.have.property('fooBar', 'hello')
+ })
+
+ it('changes the attribute when the property changes', async () => {
+ instance.fooBar = 'goodbye'
+ await Promise.resolve()
+ expect(instance).to.have.attribute('foo-bar', 'goodbye')
+ instance.bingBaz = 'universe'
+ await Promise.resolve()
+ expect(instance).to.have.attribute('bing-baz', 'universe')
+ })
+
+ it('calls underlying get when retrieving, with no attribute set', async () => {
+ instance.getCount = 0
+ instance.setCount = 0
+ instance.removeAttribute('bing-baz')
+ instance.bingBaz
+ expect(instance).to.have.property('getCount', 1)
+ })
+
+ it('does not overly eagerly call get/set on attribute change', async () => {
+ instance.getCount = 0
+ instance.setCount = 0
+ instance.setAttribute('bing-baz', 'one')
+ instance.setAttribute('bing-baz', 'one')
+ instance.setAttribute('bing-baz', 'one')
+ instance.setAttribute('bing-baz', 'one')
+ await Promise.resolve()
+ expect(instance).to.have.property('getCount', 0)
+ expect(instance).to.have.property('setCount', 4)
+ })
+ }
+
+ describe('types', () => {
+ it('infers number types from property and casts as number always', async () => {
+ @attrable
+ class NumberAttrTest extends HTMLElement {
+ @attr fooBar = 1
+ }
+ window.customElements.define('number-attr-test', NumberAttrTest)
+ const instance = await fixture(html` `)
+
+ expect(instance).to.have.property('fooBar', 1)
+ expect(instance).to.not.have.attribute('foo-bar')
+ instance.setAttribute('foo-bar', '7')
+ await Promise.resolve()
+ expect(instance).to.have.property('fooBar', 7)
+ instance.setAttribute('foo-bar', '-3.14')
+ await Promise.resolve()
+ expect(instance).to.have.property('fooBar', -3.14)
+ instance.setAttribute('foo-bar', 'Not a Number')
+ await Promise.resolve()
+ expect(instance).to.have.property('fooBar').satisfy(Number.isNaN)
+ instance.fooBar = 3.14
+ await Promise.resolve()
+ expect(instance.getAttribute('foo-bar')).to.equal('3.14')
+ instance.removeAttribute('foo-bar')
+ await Promise.resolve()
+ expect(instance).to.have.property('fooBar', 1)
+ })
+
+ it('infers boolean types from property and uses has/toggleAttribute', async () => {
+ @attrable
+ class BooleanAttrTest extends HTMLElement {
+ @attr fooBar = false
+ }
+ window.customElements.define('boolean-attr-test', BooleanAttrTest)
+
+ const instance = await fixture(html` `)
+
+ expect(instance).to.have.property('fooBar', false)
+ expect(instance).to.not.have.attribute('foo-bar')
+ instance.setAttribute('foo-bar', '7')
+ await Promise.resolve()
+ expect(instance).to.have.property('fooBar', true)
+ instance.setAttribute('foo-bar', 'hello')
+ await Promise.resolve()
+ expect(instance).to.have.property('fooBar', true)
+ instance.setAttribute('foo-bar', 'false')
+ await Promise.resolve()
+ expect(instance).to.have.property('fooBar', true)
+ instance.removeAttribute('foo-bar')
+ await Promise.resolve()
+ expect(instance).to.have.property('fooBar', false)
+ instance.fooBar = true
+ await Promise.resolve()
+ expect(instance).to.have.attribute('foo-bar', '')
+ instance.fooBar = false
+ await Promise.resolve()
+ expect(instance).to.have.property('fooBar', false)
+ expect(instance).to.not.have.attribute('foo-bar')
+ instance.removeAttribute('foo-bar')
+ await Promise.resolve()
+ expect(instance).to.have.property('fooBar', false)
+ expect(instance).to.not.have.attribute('foo-bar')
+ })
+
+ it('defaults to inferring string type for non-boolean non-number types', async () => {
+ const regexp = /^a regexp$/
+ @attrable
+ class RegExpAttrTest extends HTMLElement {
+ @attr fooBar = regexp
+ }
+ window.customElements.define('reg-exp-attr-test', RegExpAttrTest)
+ const instance = await fixture(html` `)
+
+ expect(instance).to.have.property('fooBar', regexp)
+ expect(instance).to.not.have.attribute('foo-bar')
+ instance.setAttribute('foo-bar', '/^another$/')
+ await Promise.resolve()
+ expect(instance).to.have.property('fooBar', '/^another$/')
+ instance.removeAttribute('foo-bar')
+ await Promise.resolve()
+ expect(instance).to.have.property('fooBar', regexp)
+ expect(instance).to.not.have.attribute('foo-bar')
+ })
+
+ it('uses get logic to retrieve value without attribute set', async () => {
+ let n = 0.5
+ @attrable
+ class SeedValueAttrTest extends HTMLElement {
+ @attr
+ get seedValue() {
+ return n
+ }
+ set seedValue(newValue: number) {}
+ }
+ window.customElements.define('seed-value-attr-test', SeedValueAttrTest)
+ const instance = await fixture(html` `)
+
+ expect(instance).to.have.property('seedValue', 0.5)
+ n = 1
+ expect(instance).to.have.property('seedValue', 1)
+ expect(instance).to.not.have.attribute('seed-value')
+ instance.setAttribute('seed-value', '3')
+ expect(instance).to.have.property('seedValue', 3)
+ instance.seedValue = 8
+ await Promise.resolve()
+ expect(instance).to.have.attribute('seed-value', '8')
+ expect(instance).to.have.property('seedValue', 8)
+ n = 17
+ instance.removeAttribute('seed-value')
+ expect(instance).to.have.property('seedValue', 17)
+ })
+
+ it('can derive from internal state', async () => {
+ @attrable
+ class InternalStateAttrTest extends HTMLElement {
+ state = 'b'
+ @attr
+ get isA(): boolean {
+ return this.state === 'a'
+ }
+ set isA(value: boolean) {
+ this.state = value ? 'a' : 'b'
+ }
+ }
+ window.customElements.define('internal-state-attr-test', InternalStateAttrTest)
+ const instance = await fixture(html` `)
+
+ expect(instance).to.have.property('state', 'b')
+ expect(instance).to.have.property('isA', false)
+ expect(instance).to.not.have.attribute('is-a', '')
+ instance.isA = true
+ expect(instance).to.have.property('state', 'a')
+ await Promise.resolve()
+ expect(instance).to.have.property('state', 'a')
+ expect(instance).to.have.property('isA', true)
+ expect(instance).to.have.attribute('is-a')
+ })
+
+ it('avoids infinite loops', async () => {
+ @attrable
+ class LoopAttrTest extends HTMLElement {
+ count = 0
+ @attr
+ get fooBar() {
+ return ++this.count
+ }
+ set fooBar(value) {
+ this.count += 1
+ }
+ }
+ window.customElements.define('loop-attr-test', LoopAttrTest)
+ const instance = await fixture(html` `)
+
+ expect(instance).to.have.property('fooBar')
+ instance.fooBar = 1
+ instance.setAttribute('foo-bar', '2')
+ instance.fooBar = 3
+ instance.setAttribute('foo-bar', '4')
+ })
+ })
+
+ describe('naming', () => {
+ @attrable
+ class NamingAttrTest extends HTMLElement {
+ @attr fooBarBazBing = 'a'
+ @attr URLBar = 'b'
+ @attr ClipX = 'c'
+ }
+ window.customElements.define('naming-attr-test', NamingAttrTest)
+
+ let instance: NamingAttrTest
+ beforeEach(async () => {
+ instance = await fixture(html` `)
+ })
+
+ it('converts camel cased property names to their HTML dasherized equivalents', async () => {
+ expect(instance.fooBarBazBing).to.equal('a')
+ instance.fooBarBazBing = 'bar'
+ await Promise.resolve()
+ expect(instance.getAttributeNames()).to.include('foo-bar-baz-bing')
+ })
+
+ it('will intuitively dasherize acryonyms', async () => {
+ expect(instance.URLBar).to.equal('b')
+ instance.URLBar = 'bar'
+ await Promise.resolve()
+ expect(instance.getAttributeNames()).to.include('url-bar')
+ })
+
+ it('dasherizes cap suffixed names correctly', async () => {
+ expect(instance.ClipX).to.equal('c')
+ instance.ClipX = 'bar'
+ await Promise.resolve()
+ expect(instance.getAttributeNames()).to.include('clip-x')
+ })
+ })
+})
diff --git a/test/auto-shadow-root.ts b/test/auto-shadow-root.ts
deleted file mode 100644
index 776f11c7..00000000
--- a/test/auto-shadow-root.ts
+++ /dev/null
@@ -1,77 +0,0 @@
-import {expect, fixture, html} from '@open-wc/testing'
-import {replace, fake} from 'sinon'
-import {autoShadowRoot} from '../src/auto-shadow-root.js'
-
-describe('autoShadowRoot', () => {
- window.customElements.define('shadowroot-test-element', class extends HTMLElement {})
-
- let instance
- beforeEach(async () => {
- instance = await fixture(html` `)
- })
-
- it('automatically declares shadowroot for elements with `template[data-shadowroot]` children', async () => {
- instance = await fixture(html`
- Hello World
- `)
- autoShadowRoot(instance)
-
- expect(instance).to.have.property('shadowRoot').not.equal(null)
- expect(instance.shadowRoot.textContent).to.equal('Hello World')
- })
-
- it('does not attach shadowroot without a template`data-shadowroot` child', async () => {
- instance = await fixture(html`
- Hello
- World
- `)
-
- autoShadowRoot(instance)
-
- expect(instance).to.have.property('shadowRoot').equal(null)
- })
-
- it('does not attach shadowroots which are not direct children of the element', async () => {
- instance = await fixture(html`
-
- Hello World
-
- `)
-
- autoShadowRoot(instance)
-
- expect(instance).to.have.property('shadowRoot').equal(null)
- })
-
- it('attaches shadowRoot nodes open by default', async () => {
- instance = await fixture(html`
- Hello World
- `)
-
- autoShadowRoot(instance)
-
- expect(instance).to.have.property('shadowRoot').not.equal(null)
- expect(instance.shadowRoot.textContent).to.equal('Hello World')
- })
-
- it('attaches shadowRoot nodes closed if `data-shadowroot` is `closed`', async () => {
- instance = await fixture(html`
- Hello World
- `)
- let shadowRoot = null
- replace(
- instance,
- 'attachShadow',
- fake((...args) => {
- shadowRoot = Element.prototype.attachShadow.apply(instance, args)
- return shadowRoot
- })
- )
-
- autoShadowRoot(instance)
-
- expect(instance).to.have.property('shadowRoot').equal(null)
- expect(instance.attachShadow).to.have.been.calledOnceWith({mode: 'closed'})
- expect(shadowRoot!.textContent).to.equal('Hello World')
- })
-})
diff --git a/test/bind.ts b/test/bind.ts
deleted file mode 100644
index 217515bd..00000000
--- a/test/bind.ts
+++ /dev/null
@@ -1,303 +0,0 @@
-import {expect, fixture, html} from '@open-wc/testing'
-import {replace, fake} from 'sinon'
-import {bind, listenForBind} from '../src/bind.js'
-
-describe('bind', () => {
- window.customElements.define(
- 'bind-test-element',
- class extends HTMLElement {
- foo = fake()
- bar = fake()
- handleEvent = fake()
- }
- )
-
- let instance
- beforeEach(async () => {
- instance = await fixture(html` `)
- })
-
- it('binds events on elements based on their data-action attribute', () => {
- const el = document.createElement('div')
- el.setAttribute('data-action', 'click:bind-test-element#foo')
- instance.appendChild(el)
- bind(instance)
- expect(instance.foo).to.have.callCount(0)
- el.click()
- expect(instance.foo).to.have.callCount(1)
- })
-
- it('allows for the presence of `:` in an event name', () => {
- const el = document.createElement('div')
- el.setAttribute('data-action', 'custom:event:bind-test-element#foo')
- instance.appendChild(el)
- bind(instance)
- expect(instance.foo).to.have.callCount(0)
- el.dispatchEvent(new CustomEvent('custom:event'))
- expect(instance.foo).to.have.callCount(1)
- })
-
- it('binds events on the controller to itself', () => {
- instance.setAttribute('data-action', 'click:bind-test-element#foo')
- bind(instance)
- expect(instance.foo).to.have.callCount(0)
- instance.click()
- expect(instance.foo).to.have.callCount(1)
- })
-
- it('does not bind elements whose closest selector is not this controller', () => {
- const el = document.createElement('div')
- el.getAttribute('data-action', 'click:bind-test-element#foo')
- const container = document.createElement('div')
- container.append(instance, el)
- bind(instance)
- el.click()
- expect(instance.foo).to.have.callCount(0)
- })
-
- it('does not bind elements whose data-action does not match controller tagname', () => {
- const el = document.createElement('div')
- el.setAttribute('data-action', 'click:other-controller#foo')
- instance.appendChild(el)
- bind(instance)
- expect(instance.foo).to.have.callCount(0)
- el.click()
- expect(instance.foo).to.have.callCount(0)
- })
-
- it('does not bind methods that dont exist', () => {
- const el = document.createElement('div')
- el.setAttribute('data-action', 'click:bind-test-element#frob')
- instance.appendChild(el)
- bind(instance)
- el.click()
- expect(instance.foo).to.have.callCount(0)
- })
-
- it('can bind multiple event types', () => {
- const el = document.createElement('div')
- el.setAttribute('data-action', 'click:bind-test-element#foo submit:bind-test-element#foo')
- instance.appendChild(el)
- bind(instance)
- expect(instance.foo).to.have.callCount(0)
- el.dispatchEvent(new CustomEvent('click'))
- expect(instance.foo).to.have.callCount(1)
- el.dispatchEvent(new CustomEvent('submit'))
- expect(instance.foo).to.have.callCount(2)
- expect(instance.foo.getCall(0).args[0].type).to.equal('click')
- expect(instance.foo.getCall(1).args[0].type).to.equal('submit')
- })
-
- it('binds to `handleEvent` is function name is omitted', () => {
- const el = document.createElement('div')
- el.setAttribute('data-action', 'click:bind-test-element submit:bind-test-element')
- instance.appendChild(el)
- bind(instance)
- expect(instance.handleEvent).to.have.callCount(0)
- el.dispatchEvent(new CustomEvent('click'))
- expect(instance.handleEvent).to.have.callCount(1)
- el.dispatchEvent(new CustomEvent('submit'))
- expect(instance.handleEvent).to.have.callCount(2)
- expect(instance.handleEvent.getCall(0).args[0].type).to.equal('click')
- expect(instance.handleEvent.getCall(1).args[0].type).to.equal('submit')
- })
-
- it('can bind multiple actions separated by line feed', () => {
- const el = document.createElement('div')
- el.setAttribute('data-action', `click:bind-test-element#foo\nclick:bind-test-element#bar`)
- instance.appendChild(el)
- bind(instance)
- expect(instance.foo).to.have.callCount(0)
- el.dispatchEvent(new CustomEvent('click'))
- expect(instance.foo).to.have.callCount(1)
- expect(instance.bar).to.have.callCount(1)
- expect(instance.foo.getCall(0).args[0].type).to.equal('click')
- expect(instance.bar.getCall(0).args[0].type).to.equal('click')
- })
-
- it('can bind multiple elements to the same event', () => {
- const el1 = document.createElement('div')
- const el2 = document.createElement('div')
- el1.setAttribute('data-action', 'click:bind-test-element#foo')
- el2.setAttribute('data-action', 'submit:bind-test-element#foo')
- instance.append(el1, el2)
- bind(instance)
- expect(instance.foo).to.have.callCount(0)
- el1.click()
- expect(instance.foo).to.have.callCount(1)
- el2.dispatchEvent(new CustomEvent('submit'))
- expect(instance.foo).to.have.callCount(2)
- })
-
- it('binds elements added to elements subtree', async () => {
- const el1 = document.createElement('div')
- const el2 = document.createElement('div')
- el1.setAttribute('data-action', 'click:bind-test-element#foo')
- el2.setAttribute('data-action', 'submit:bind-test-element#foo')
- document.body.appendChild(instance)
-
- bind(instance)
-
- instance.append(el1, el2)
- // We need to wait for one microtask after injecting the HTML into to
- // controller so that the actions have been bound to the controller.
- await Promise.resolve()
- document.body.removeChild(instance)
-
- expect(instance.foo).to.have.callCount(0)
- el1.click()
- expect(instance.foo).to.have.callCount(1)
- el2.dispatchEvent(new CustomEvent('submit'))
- expect(instance.foo).to.have.callCount(2)
- })
-
- it('can bind elements within the shadowDOM', () => {
- instance.attachShadow({mode: 'open'})
- const el1 = document.createElement('div')
- const el2 = document.createElement('div')
- el1.setAttribute('data-action', 'click:bind-test-element#foo')
- el2.setAttribute('data-action', 'submit:bind-test-element#foo')
- instance.shadowRoot.append(el1, el2)
- bind(instance)
- expect(instance.foo).to.have.callCount(0)
- el1.click()
- expect(instance.foo).to.have.callCount(1)
- el2.dispatchEvent(new CustomEvent('submit'))
- expect(instance.foo).to.have.callCount(2)
- })
-
- it('binds elements added to shadowDOM', async () => {
- instance.attachShadow({mode: 'open'})
- const el1 = document.createElement('div')
- const el2 = document.createElement('div')
- el1.setAttribute('data-action', 'click:bind-test-element#foo')
- el2.setAttribute('data-action', 'submit:bind-test-element#foo')
- bind(instance)
- instance.shadowRoot.append(el1)
- instance.shadowRoot.append(el2)
- // We need to wait for one microtask after injecting the HTML into to
- // controller so that the actions have been bound to the controller.
- await Promise.resolve()
- expect(instance.foo).to.have.callCount(0)
- el1.click()
- expect(instance.foo).to.have.callCount(1)
- el2.dispatchEvent(new CustomEvent('submit'))
- expect(instance.foo).to.have.callCount(2)
- })
-
- describe('listenForBind', () => {
- it('re-binds actions that are denoted by HTML that is dynamically injected into the controller', async () => {
- bind(instance)
- listenForBind(instance.ownerDocument)
- const button = document.createElement('button')
- button.setAttribute('data-action', 'click:bind-test-element#foo')
- instance.appendChild(button)
- // We need to wait for one microtask after injecting the HTML into to
- // controller so that the actions have been bound to the controller.
- await Promise.resolve()
- button.click()
- expect(instance.foo).to.have.callCount(1)
- })
-
- it('will not re-bind actions after unsubscribe() is called', async () => {
- listenForBind(instance.ownerDocument).unsubscribe()
- const button = document.createElement('button')
- button.setAttribute('data-action', 'click:bind-test-element#foo')
- instance.appendChild(button)
- // We need to wait for one microtask after injecting the HTML into to
- // controller so that the actions have been bound to the controller.
- await Promise.resolve()
- button.click()
- expect(instance.foo).to.have.callCount(0)
- })
-
- it('will not bind elements that havent already had `bind()` called', async () => {
- customElements.define(
- 'bind-test-not-element',
- class BindTestNotController extends HTMLElement {
- foo = fake()
- }
- )
- instance = await fixture(html` `)
- listenForBind(instance.ownerDocument)
- const button = document.createElement('button')
- button.setAttribute('data-action', 'click:bind-test-not-element#foo')
- instance.appendChild(button)
- // We need to wait for one microtask after injecting the HTML into to
- // controller so that the actions have been bound to the controller.
- await Promise.resolve()
- button.click()
- expect(instance.foo).to.have.callCount(0)
- })
-
- it('will not re-bind elements that just had `bind()` called', async () => {
- customElements.define(
- 'bind-test-not-rebind-element',
- class BindTestNotController extends HTMLElement {
- foo = fake()
- connectedCallback() {
- bind(this)
- }
- }
- )
- instance = await fixture(html` `)
- listenForBind(instance.ownerDocument)
- const button = document.createElement('button')
- button.setAttribute('data-action', 'click:bind-test-not-rebind-element#foo')
- instance.appendChild(button)
- replace(instance, 'foo', fake(instance.foo))
- // wait for processQueue
- await Promise.resolve()
- button.click()
- expect(instance.foo).to.have.callCount(1)
- })
- })
-
- it('re-binds actions deeply in the HTML', async () => {
- instance = await fixture(html` `)
- bind(instance)
- listenForBind(instance.ownerDocument)
- instance.innerHTML = `
-
- `
- // We need to wait for one microtask after injecting the HTML into to
- // controller so that the actions have been bound to the controller.
- await Promise.resolve()
- instance.querySelector('button').click()
- expect(instance.foo).to.have.callCount(1)
- })
-
- it('will not fire if the binding attribute is removed', async () => {
- instance = await fixture(html`
-
- `)
- bind(instance)
- expect(instance.foo).to.have.callCount(0)
- const el = instance.querySelector('div')
- el.click()
- expect(instance.foo).to.have.callCount(1)
- el.setAttribute('data-action', 'click:other-element#foo')
- el.click()
- expect(instance.foo).to.have.callCount(1)
- })
-
- it('will rebind elements if the attribute changes', async () => {
- instance = await fixture(html`
-
- `)
- bind(instance)
- listenForBind(instance.ownerDocument)
- await Promise.resolve()
- const button = instance.querySelector('button')
- button.click()
- expect(instance.foo).to.have.callCount(0)
- button.setAttribute('data-action', 'click:bind-test-element#foo')
- await Promise.resolve()
- button.click()
- expect(instance.foo).to.have.callCount(1)
- })
-})
diff --git a/test/controllable.ts b/test/controllable.ts
new file mode 100644
index 00000000..812819d9
--- /dev/null
+++ b/test/controllable.ts
@@ -0,0 +1,183 @@
+import type {CustomElementClass, CustomElement} from '../src/custom-element.js'
+import {expect, fixture, html} from '@open-wc/testing'
+import {fake} from 'sinon'
+import {controllable, attachShadowCallback, attachInternalsCallback} from '../src/controllable.js'
+
+describe('controllable', () => {
+ describe('attachShadowCallback', () => {
+ let attachShadowFake: (shadow: ShadowRoot) => void
+ let shadow: ShadowRoot | null
+ beforeEach(() => {
+ shadow = null
+ attachShadowFake = fake()
+ })
+
+ const attachShadow = (Class: T): T =>
+ class extends controllable(Class) {
+ [attachShadowCallback](...args: [ShadowRoot]) {
+ super[attachShadowCallback]?.(...args)
+ return attachShadowFake.apply(this, args)
+ }
+ }
+
+ @attachShadow
+ @controllable
+ class DeclarativeShadowAbility extends HTMLElement {
+ constructor() {
+ super()
+ // Declarative shadows run before constructor() is available, but
+ // abilities run after element constructor
+ shadow = HTMLElement.prototype.attachShadow.call(this, {mode: 'closed'})
+ }
+ [attachShadowCallback]() {
+ throw new Error('Custom Element concrete class [attachShadowCallback] should not have been called')
+ }
+ }
+ customElements.define('declarative-shadow-ability', DeclarativeShadowAbility)
+
+ @attachShadow
+ @controllable
+ class ClosedShadowAbility extends HTMLElement {
+ constructor() {
+ super()
+ shadow = this.attachShadow({mode: 'closed'})
+ }
+ [attachShadowCallback]() {
+ throw new Error('Custom Element concrete class [attachShadowCallback] should not have been called')
+ }
+ }
+ customElements.define('closed-shadow-ability', ClosedShadowAbility)
+
+ @attachShadow
+ @controllable
+ class ConnectedShadowAbility extends HTMLElement {
+ connectedCallback() {
+ shadow = this.attachShadow({mode: 'closed'})
+ }
+ [attachShadowCallback]() {
+ throw new Error('Custom Element concrete class [attachShadowCallback] should not have been called')
+ }
+ }
+ customElements.define('connected-shadow-ability', ConnectedShadowAbility)
+
+ @attachShadow
+ @controllable
+ class ManualShadowAbility extends HTMLElement {
+ [attachShadowCallback]() {
+ throw new Error('Custom Element concrete class [attachShadowCallback] should not have been called')
+ }
+ }
+ customElements.define('manual-shadow-ability', ManualShadowAbility)
+
+ @attachShadow
+ @controllable
+ class DisallowedShadowAbility extends HTMLElement {
+ static disabledFeatures = ['shadow']
+ }
+ customElements.define('disallowed-shadow-ability', DisallowedShadowAbility)
+
+ it('is called with shadowRoot of declarative ShadowDOM', async () => {
+ const instance = await fixture(html` `)
+ expect(shadow).to.exist.and.be.instanceof(ShadowRoot)
+ expect(attachShadowFake).to.be.calledOnce.calledOn(instance).and.calledWithExactly(shadow)
+ })
+
+ it('is called with shadowRoot from attachShadow call', async () => {
+ const instance = await fixture(html` `)
+ shadow = instance.attachShadow({mode: 'closed'})
+ expect(shadow).to.exist.and.be.instanceof(ShadowRoot)
+ expect(attachShadowFake).to.be.calledOnce.calledOn(instance).and.calledWithExactly(shadow)
+ })
+
+ it('is called with shadowRoot from attachInternals call', async () => {
+ const instance = await fixture(html` `)
+ expect(shadow).to.exist.and.be.instanceof(ShadowRoot)
+ expect(attachShadowFake).to.be.calledOnce.calledOn(instance).and.calledWithExactly(shadow)
+ })
+
+ it('is called with shadowRoot from connectedCallback', async () => {
+ const instance = await fixture(html` `)
+ expect(shadow).to.exist.and.be.instanceof(ShadowRoot)
+ expect(attachShadowFake).to.be.calledOnce.calledOn(instance).and.calledWithExactly(shadow)
+ })
+
+ it('does not error if shadowdom is disabled', async () => {
+ await fixture(html` `)
+ expect(attachShadowFake).to.be.have.callCount(0)
+ })
+ })
+
+ describe('attachInternalsCallback', () => {
+ let attachInternalsFake: (internals: ElementInternals) => void
+ let internals: ElementInternals | null
+ beforeEach(() => {
+ internals = null
+ attachInternalsFake = fake()
+ })
+
+ const attachInternals = (Class: T): T =>
+ class extends controllable(Class) {
+ [attachInternalsCallback](...args: [ElementInternals]) {
+ super[attachInternalsCallback]?.(...args)
+ return attachInternalsFake.apply(this, args)
+ }
+ }
+
+ @attachInternals
+ @controllable
+ class InternalsAbility extends HTMLElement {
+ constructor() {
+ super()
+ internals = this.attachInternals()
+ }
+ [attachInternalsCallback]() {
+ throw new Error('Custom Element concrete class [attachInternalsCallback] should not have been called')
+ }
+ }
+ customElements.define('internals-ability', InternalsAbility)
+
+ @attachInternals
+ @controllable
+ class ManualInternalsAbility extends HTMLElement {
+ [attachInternalsCallback]() {
+ throw new Error('Custom Element concrete class [attachInternalsCallback] should not have been called')
+ }
+ }
+ customElements.define('manual-internals-ability', ManualInternalsAbility)
+
+ @attachInternals
+ @controllable
+ class DisallowedInternalsAbility extends HTMLElement {
+ static disabledFeatures = ['internals'];
+ [attachInternalsCallback]() {
+ throw new Error('Custom Element concrete class [attachInternalsCallback] should not have been called')
+ }
+ }
+ customElements.define('disallowed-internals-ability', DisallowedInternalsAbility)
+
+ it('is called on constructor', async () => {
+ const instance = await fixture(html` `)
+ expect(attachInternalsFake).to.be.calledOnce.calledOn(instance)
+ })
+
+ it('does not prevent attachInternals being called by userland class', async () => {
+ const instance = await fixture(html` `)
+ expect(internals).to.exist.and.be.instanceof(ElementInternals)
+ expect(attachInternalsFake).to.be.calledOnce.calledOn(instance).and.calledWithExactly(internals)
+ })
+
+ it('errors if userland calls attachInternals more than once', async () => {
+ const instance = await fixture(html` `)
+ internals = instance.attachInternals()
+ expect(internals).to.exist.and.be.instanceof(ElementInternals)
+ expect(attachInternalsFake).to.be.calledOnce.calledOn(instance).and.calledWithExactly(internals)
+
+ expect(() => instance.attachInternals()).to.throw(DOMException)
+ })
+
+ it('does not error if element internals are disabled', async () => {
+ await fixture(html` `)
+ expect(attachInternalsFake).to.have.callCount(0)
+ })
+ })
+})
diff --git a/test/controller.ts b/test/controller.ts
index 232fede0..9416f66a 100644
--- a/test/controller.ts
+++ b/test/controller.ts
@@ -1,7 +1,6 @@
import {expect, fixture, html} from '@open-wc/testing'
import {replace, fake} from 'sinon'
import {controller} from '../src/controller.js'
-import {attr} from '../src/attr.js'
describe('controller', () => {
let instance
@@ -25,7 +24,6 @@ describe('controller', () => {
it('binds controllers before custom connectedCallback behaviour', async () => {
@controller
- // eslint-disable-next-line @typescript-eslint/no-unused-vars
class ControllerBindOrderElement extends HTMLElement {
foo = fake()
}
@@ -36,7 +34,7 @@ describe('controller', () => {
this.dispatchEvent(new CustomEvent('loaded'))
}
}
- instance = await fixture(html`
+ instance = await fixture(html`
@@ -46,48 +44,22 @@ describe('controller', () => {
it('binds shadowRoots after connectedCallback behaviour', async () => {
@controller
- // eslint-disable-next-line @typescript-eslint/no-unused-vars
class ControllerBindShadowElement extends HTMLElement {
connectedCallback() {
this.attachShadow({mode: 'open'})
const button = document.createElement('button')
button.setAttribute('data-action', 'click:controller-bind-shadow#foo')
- this.shadowRoot.appendChild(button)
- }
-
- foo() {
- return 'foo'
+ this.shadowRoot!.appendChild(button)
}
- }
- instance = await fixture(html` `)
- replace(instance, 'foo', fake(instance.foo))
-
- instance.shadowRoot.querySelector('button').click()
-
- expect(instance.foo).to.have.callCount(1)
- })
- it('binds auto shadowRoots', async () => {
- @controller
- // eslint-disable-next-line @typescript-eslint/no-unused-vars
- class ControllerBindAutoShadowElement extends HTMLElement {
foo() {
return 'foo'
}
}
- instance = await fixture(html`
-
-
-
-
-
- `)
+ instance = await fixture(html` `)
replace(instance, 'foo', fake(instance.foo))
- expect(instance.shadowRoot).to.exist
- expect(instance).to.have.property('shadowRoot').not.equal(null)
- expect(instance.shadowRoot.children).to.have.lengthOf(1)
- instance.shadowRoot.querySelector('button').click()
+ instance.shadowRoot!.querySelector('button')!.click()
expect(instance.foo).to.have.callCount(1)
})
@@ -97,49 +69,17 @@ describe('controller', () => {
// eslint-disable-next-line @typescript-eslint/no-unused-vars
class ChildElementElement extends HTMLElement {}
@controller
- // eslint-disable-next-line @typescript-eslint/no-unused-vars
class ParentElementElement extends HTMLElement {
connectedCallback() {
- const child = this.querySelector('child-element')
+ const child = this.querySelector('child-element')!
expect(child.matches(':defined')).to.equal(true)
}
}
- instance = await fixture(html`
+ instance = await fixture(html`
`)
})
-
- describe('attrs', () => {
- let attrValues = []
- @controller
- class AttributeTestElement extends HTMLElement {
- foo = 'baz'
- attributeChangedCallback() {
- attrValues.push(this.getAttribute('data-foo'))
- attrValues.push(this.foo)
- }
- }
- attr(AttributeTestElement.prototype, 'foo')
-
- beforeEach(() => {
- attrValues = []
- })
-
- it('initializes attrs as attributes in attributeChangedCallback', async () => {
- instance = await fixture(html` `)
- instance.foo = 'bar'
- instance.attributeChangedCallback()
- expect(attrValues).to.eql(['bar', 'bar'])
- })
-
- it('initializes attributes as attrs in attributeChangedCallback', async () => {
- instance = await fixture(html` `)
- instance.setAttribute('data-foo', 'bar')
- instance.attributeChangedCallback()
- expect(attrValues).to.eql(['bar', 'bar'])
- })
- })
})
diff --git a/test/dasherize.ts b/test/dasherize.ts
index f15a3855..0fbf0fb1 100644
--- a/test/dasherize.ts
+++ b/test/dasherize.ts
@@ -2,16 +2,17 @@ import {expect} from '@open-wc/testing'
import {dasherize} from '../src/dasherize.js'
describe('dasherize', () => {
- const tests = [
+ const tests: Array<[PropertyKey, string]> = [
['json', 'json'],
['fooBar', 'foo-bar'],
['FooBar', 'foo-bar'],
['autofocusWhenReady', 'autofocus-when-ready'],
['URLBar', 'url-bar'],
- ['ClipX', 'clip-x']
+ ['ClipX', 'clip-x'],
+ [Symbol('helloWorld'), 'hello-world']
]
tests.map(([input, output]) =>
- it(`transforms ${input} to ${output}`, () => expect(dasherize(input)).to.equal(output))
+ it(`transforms ${String(input)} to ${output}`, () => expect(dasherize(input)).to.equal(output))
)
})
diff --git a/test/findtarget.ts b/test/findtarget.ts
deleted file mode 100644
index eb2d09d0..00000000
--- a/test/findtarget.ts
+++ /dev/null
@@ -1,124 +0,0 @@
-import {expect, fixture, html} from '@open-wc/testing'
-import {fake, replace} from 'sinon'
-import {findTarget, findTargets} from '../src/findtarget.js'
-
-describe('findTarget', () => {
- window.customElements.define('find-target-test-element', class extends HTMLElement {})
-
- let instance
-
- it('calls querySelectorAll with the controller name and target name', async () => {
- instance = await fixture(html` `)
- replace(instance, 'querySelectorAll', fake.returns([]))
- findTarget(instance, 'foo')
- expect(instance.querySelectorAll).to.have.been.calledOnceWith('[data-target~="find-target-test-element.foo"]')
- })
-
- it('returns the first element where closest tag is the controller', async () => {
- instance = await fixture(html`
-
-
-
-
-
-
- `)
- expect(findTarget(instance, 'foo')).to.have.attribute('id', '2')
- })
-
- it('returns the first element that has the exact target name', async () => {
- instance = await fixture(html`
-
-
-
-
- `)
- expect(findTarget(instance, 'foo')).to.have.attribute('id', '2')
- })
-
- it('returns targets when there are mutliple target values', async () => {
- instance = await fixture(html`
-
-
-
-
- `)
- expect(findTarget(instance, 'foo')).to.have.attribute('id', '2')
- expect(findTarget(instance, 'barfoo')).to.have.attribute('id', '1')
- expect(findTarget(instance, 'barfoo')).to.equal(findTarget(instance, 'foobar'))
- })
-
- it('returns targets when there are mutliple target values with different controllers', async () => {
- instance = await fixture(html`
-
-
-
- `)
- expect(findTarget(instance, 'foobar')).to.have.attribute('id', '1')
- expect(findTarget(instance, 'barfoo')).to.equal(undefined)
- })
-
- it('returns targets from the shadowRoot, if available', async () => {
- instance = await fixture(html` `)
- instance.attachShadow({mode: 'open'})
- const el = document.createElement('div')
- el.setAttribute('data-target', 'find-target-test-element.foobar')
-
- instance.shadowRoot.appendChild(el)
-
- expect(findTarget(instance, 'foobar')).to.equal(el)
- })
-
- it('prioritises shadowRoot targets over others', async () => {
- instance = await fixture(html`
-
- `)
- instance.attachShadow({mode: 'open'})
- const shadowEl = document.createElement('div')
- shadowEl.setAttribute('data-target', 'find-target-test-element.foobar')
- instance.shadowRoot.appendChild(shadowEl)
- expect(findTarget(instance, 'foobar')).to.equal(shadowEl)
- })
-})
-
-describe('findTargets', () => {
- let instance
-
- it('calls querySelectorAll with the controller name and target name', async () => {
- instance = await fixture(html`
-
-
-
- `)
- const els = findTargets(instance, 'foo')
- expect(els).to.have.lengthOf(2)
- expect(els[0]).to.have.attribute('id', '1')
- expect(els[1]).to.have.attribute('id', '2')
- })
-
- it('returns all elements where closest tag is the controller', async () => {
- instance = await fixture(html`
-
-
-
-
-
- `)
- const els = findTargets(instance, 'foo')
- expect(els).to.have.lengthOf(2)
- expect(els[0]).to.have.attribute('id', '1')
- expect(els[1]).to.have.attribute('id', '2')
- })
-
- it('returns all elements inside a shadow root', async () => {
- instance = await fixture(html` `)
- instance.attachShadow({mode: 'open'})
- const els = [document.createElement('div'), document.createElement('div'), document.createElement('div')]
- for (const el of els) el.setAttribute('data-targets', 'find-target-test-element.foo')
-
- instance.shadowRoot.append(els[1])
- instance.append(els[0], els[2])
-
- expect(findTargets(instance, 'foo')).to.eql([els[1], els[0], els[2]])
- })
-})
diff --git a/test/mark.ts b/test/mark.ts
new file mode 100644
index 00000000..8ad92380
--- /dev/null
+++ b/test/mark.ts
@@ -0,0 +1,256 @@
+import {expect} from '@open-wc/testing'
+import {fake} from 'sinon'
+import {createMark} from '../src/mark.js'
+
+describe('createMark', () => {
+ it('returns a tuple of functions: mark, getMarks, initializeMarks', () => {
+ const mark = createMark(
+ () => {},
+ () => ({})
+ )
+ expect(mark).to.be.an('array').with.lengthOf(3)
+ expect(mark).to.have.property('0').a('function')
+ expect(mark).to.have.property('1').a('function')
+ expect(mark).to.have.property('2').a('function')
+ })
+
+ it('attaches a `static` unique symbol to the first function', () => {
+ const mark = createMark(
+ () => {},
+ () => ({})
+ )
+ expect(mark).to.have.nested.property('0.static').a('symbol')
+ const otherMark = createMark(
+ () => {},
+ () => ({})
+ )
+ expect(otherMark).to.have.nested.property('0.static').a('symbol').not.equal(mark[0].static)
+ })
+
+ it('can be added to class fields without errors', () => {
+ const [mark] = createMark(
+ () => {},
+ () => ({})
+ )
+ class FooBar {
+ @mark foo: unknown
+ @mark bar = 1
+ @mark baz = 'hi'
+ }
+ new FooBar()
+ })
+
+ it('can be added to getters or setters without errors', () => {
+ const [mark] = createMark(
+ () => {},
+ () => ({})
+ )
+ class FooBar {
+ @mark get foo() {
+ return 1
+ }
+ set foo(v: number) {}
+
+ @mark get bar() {
+ return 1
+ }
+ @mark set baz(v: number) {}
+ }
+ new FooBar()
+ })
+
+ it('can be added to methods without errors', () => {
+ const [mark] = createMark(
+ () => {},
+ () => ({})
+ )
+ class Foo {
+ @mark foo() {}
+ }
+ new Foo()
+ })
+
+ it('retrieves all marked fields with the get mark function', () => {
+ const [mark, getMark] = createMark(
+ () => {},
+ () => ({})
+ )
+ class FooBar {
+ @mark foo: unknown
+ @mark bar = 1
+ @mark baz = 'hi'
+ @mark get bing() {
+ return 1
+ }
+ @mark get qux() {
+ return 1
+ }
+ @mark set quuz(v: number) {}
+ @mark set corge(v: number) {}
+ @mark grault() {}
+ }
+ expect(getMark(new FooBar())).to.eql(new Set(['foo', 'bar', 'baz', 'bing', 'qux', 'quuz', 'corge', 'grault']))
+ })
+
+ it('retrieves marked symbol methods correctly', () => {
+ const [mark, getMark] = createMark(
+ () => {},
+ () => ({})
+ )
+ const sym = Symbol('foo')
+ class FooBar {
+ @mark [sym]() {}
+ }
+ expect(getMark(new FooBar()).has(sym)).to.equal(true)
+ })
+
+ it('retrieves fields declared using the `mark.static` symbol as a static class field', () => {
+ const [mark, getMark] = createMark(
+ () => {},
+ () => ({})
+ )
+ class FooBar {
+ static [mark.static] = ['bar', 'bing', 'quuz', 'grault']
+ @mark foo: unknown
+ bar = 1
+ @mark baz = 'hi'
+ get bing() {
+ return 1
+ }
+ @mark get qux() {
+ return 1
+ }
+ set quuz(v: number) {}
+ @mark set corge(v: number) {}
+ grault() {}
+ }
+ const instance = new FooBar()
+ expect(getMark(instance)).to.eql(new Set(['foo', 'baz', 'qux', 'corge', 'bar', 'bing', 'quuz', 'grault']))
+ })
+
+ it('will not contain duplicates', () => {
+ const [mark, getMark] = createMark(
+ () => {},
+ () => ({})
+ )
+ class FooBar {
+ static [mark.static] = ['bar', 'bing', 'quuz', 'grault']
+ @mark foo: unknown
+ @mark bar = 1
+ @mark baz = 'hi'
+ @mark get bing() {
+ return 1
+ }
+ @mark get qux() {
+ return 1
+ }
+ @mark set quuz(v: number) {}
+ @mark set corge(v: number) {}
+ @mark grault() {}
+ }
+ expect(getMark(new FooBar())).to.eql(new Set(['foo', 'bar', 'baz', 'bing', 'qux', 'quuz', 'corge', 'grault']))
+ })
+
+ it('calls the given validate function for each field, with name and kind', () => {
+ const validate = fake()
+ const [mark, getMarks] = createMark(validate, () => {})
+ const sym = Symbol('garply')
+ class FooBar {
+ static [mark.static] = ['bar', 'bing', 'quuz', 'grault']
+ @mark foo: unknown
+ bar = 1
+ @mark baz = 'hi'
+ get bing() {
+ return 1
+ }
+ @mark get qux() {
+ return 1
+ }
+ set quuz(v: number) {}
+ @mark set corge(v: number) {}
+ grault() {}
+ @mark [sym]() {}
+ }
+ getMarks(new FooBar())
+ expect(validate).to.be.calledWithExactly({name: 'foo', kind: 'field'})
+ expect(validate).to.be.calledWithExactly({name: 'bar', kind: 'field'})
+ expect(validate).to.be.calledWithExactly({name: 'baz', kind: 'field'})
+ expect(validate).to.be.calledWithExactly({name: 'bing', kind: 'getter'})
+ expect(validate).to.be.calledWithExactly({name: 'qux', kind: 'getter'})
+ expect(validate).to.be.calledWithExactly({name: 'quuz', kind: 'setter'})
+ expect(validate).to.be.calledWithExactly({name: 'corge', kind: 'setter'})
+ expect(validate).to.be.calledWithExactly({name: 'grault', kind: 'method'})
+ expect(validate).to.be.calledWithExactly({name: sym, kind: 'method'})
+ })
+
+ it('calls the given initialize function for each static defined field once initialized, with name, kind and access', () => {
+ const validate = fake()
+ const initialize = fake(({access}) => access)
+ const [mark, getMarks, initializeMarks] = createMark(validate, initialize)
+ const sym = Symbol('garply')
+ class FooBar {
+ static [mark.static] = ['bar', 'bing', 'quuz', 'grault']
+ @mark foo: unknown
+ bar = 1
+ @mark baz = 'hi'
+ get bing() {
+ return 1
+ }
+ @mark get qux() {
+ return 1
+ }
+ set quuz(v: number) {}
+ @mark set corge(v: number) {}
+ grault() {}
+ @mark [sym]() {}
+ }
+ const fooBar = new FooBar()
+ getMarks(fooBar)
+ expect(initialize).to.have.callCount(0)
+ initializeMarks(fooBar)
+ const accessFor = (field: PropertyKey) => Object.getOwnPropertyDescriptor(FooBar.prototype, field)
+ expect(initialize).to.be.calledWithExactly(fooBar, {
+ name: 'foo',
+ kind: 'field',
+ access: {value: void 0, configurable: true, writable: true, enumerable: true}
+ })
+ expect(initialize).to.be.calledWithExactly(fooBar, {
+ name: 'bar',
+ kind: 'field',
+ access: {value: 1, configurable: true, writable: true, enumerable: true}
+ })
+ expect(initialize).to.be.calledWithExactly(fooBar, {
+ name: 'baz',
+ kind: 'field',
+ access: {value: 'hi', configurable: true, writable: true, enumerable: true}
+ })
+ expect(initialize).to.be.calledWithExactly(fooBar, {name: 'bing', kind: 'getter', access: accessFor('bing')})
+ expect(initialize).to.be.calledWithExactly(fooBar, {name: 'qux', kind: 'getter', access: accessFor('qux')})
+ expect(initialize).to.be.calledWithExactly(fooBar, {name: 'quuz', kind: 'setter', access: accessFor('quuz')})
+ expect(initialize).to.be.calledWithExactly(fooBar, {name: 'corge', kind: 'setter', access: accessFor('corge')})
+ expect(initialize).to.be.calledWithExactly(fooBar, {name: 'grault', kind: 'method', access: accessFor('grault')})
+ expect(initialize).to.be.calledWithExactly(fooBar, {name: sym, kind: 'method', access: accessFor(sym)})
+ })
+
+ it('can apply multiple different marks to the same property', () => {
+ const [mark1, getMarks1, initializeMarks1] = createMark(
+ fake(),
+ fake(() => ({get: fake(), set: fake()}))
+ )
+ const [mark2, getMarks2, initializeMarks2] = createMark(
+ fake(),
+ fake(() => ({get: fake(), set: fake()}))
+ )
+ class FooBar {
+ @mark1 @mark2 foo: unknown
+ @mark2 @mark1 bar = 'hi'
+ constructor() {
+ initializeMarks1(this)
+ initializeMarks2(this)
+ }
+ }
+ const fooBar = new FooBar()
+ expect(Array.from(getMarks1(fooBar))).to.eql(['foo', 'bar'])
+ expect(Array.from(getMarks2(fooBar))).to.eql(['foo', 'bar'])
+ })
+})
diff --git a/test/providable.ts b/test/providable.ts
new file mode 100644
index 00000000..86b6be38
--- /dev/null
+++ b/test/providable.ts
@@ -0,0 +1,348 @@
+import {expect, fixture, html} from '@open-wc/testing'
+import {fake} from 'sinon'
+import {provide, consume, providable, ContextEvent} from '../src/providable.js'
+import {target, targetable} from '../src/targetable.js'
+import {attr, attrable} from '../src/attrable.js'
+
+describe('Providable', () => {
+ const sym = Symbol('bing')
+ @attrable
+ @targetable
+ @providable
+ class ProvidableProviderTest extends HTMLElement {
+ @provide foo = 'hello'
+ @provide bar = 'world'
+ @provide get baz() {
+ return 3
+ }
+ @provide [sym] = {provided: true}
+ @provide qux = 8
+ @provide @attr testAttribute = ''
+ @provide @target target!: HTMLElement
+ }
+ window.customElements.define('providable-provider-test', ProvidableProviderTest)
+
+ @providable
+ class ProvidableSomeProviderTest extends HTMLElement {
+ @provide foo = 'greetings'
+ bar = 'universe'
+ baz = 18
+ @provide qux = 42
+ }
+ window.customElements.define('providable-some-provider-test', ProvidableSomeProviderTest)
+
+ @providable
+ class ProvidableConsumerTest extends HTMLElement {
+ @consume foo = 'goodbye'
+ @consume bar = 'universe'
+ @consume get baz() {
+ return 1
+ }
+ @consume [sym] = {}
+ count = 0
+ get qux() {
+ return this.count
+ }
+ @consume set qux(value: number) {
+ this.count += 1
+ }
+ @consume target!: HTMLElement
+ @consume testAttribute = ''
+ connectedCallback() {
+ this.textContent = `${this.foo} ${this.bar}`
+ }
+ }
+ window.customElements.define('providable-consumer-test', ProvidableConsumerTest)
+
+ describe('consumer without provider', () => {
+ let instance: ProvidableConsumerTest
+ let events = fake()
+ beforeEach(async () => {
+ events = fake()
+ document.body.addEventListener('context-request', events)
+ instance = await fixture(html` `)
+ })
+ afterEach(() => {
+ document.body.removeEventListener('context-request', events)
+ })
+
+ it('uses the given values', () => {
+ expect(instance).to.have.property('foo', 'goodbye')
+ expect(instance).to.have.property('bar', 'universe')
+ expect(instance).to.have.property('baz', 1)
+ expect(instance).to.have.property(sym).eql({})
+ expect(instance).to.have.property('textContent', 'goodbye universe')
+ })
+
+ it('overrides the property definitions to not be setters', () => {
+ expect(() => (instance.foo = 'hello')).to.throw()
+ expect(() => (instance.bar = 'world')).to.throw()
+ // @ts-expect-error this was only a getter to begin with
+ expect(() => (instance.baz = 3)).to.throw()
+ })
+
+ it('emits the `context-request` event when connected, for each field', async () => {
+ expect(events).to.have.callCount(7)
+ const fooEvent = events.getCall(0).args[0]
+ expect(fooEvent).to.be.instanceof(ContextEvent)
+ expect(fooEvent).to.have.nested.property('context.name', 'foo')
+ expect(fooEvent).to.have.nested.property('context.initialValue', 'goodbye')
+ expect(fooEvent).to.have.property('multiple', true)
+ expect(fooEvent).to.have.property('bubbles', true)
+
+ const barEvent = events.getCall(1).args[0]
+ expect(barEvent).to.be.instanceof(ContextEvent)
+ expect(barEvent).to.have.nested.property('context.name', 'bar')
+ expect(barEvent).to.have.nested.property('context.initialValue', 'universe')
+ expect(barEvent).to.have.property('multiple', true)
+ expect(barEvent).to.have.property('bubbles', true)
+
+ const bazEvent = events.getCall(2).args[0]
+ expect(bazEvent).to.be.instanceof(ContextEvent)
+ expect(bazEvent).to.have.nested.property('context.name', 'baz')
+ expect(bazEvent).to.have.nested.property('context.initialValue', 1)
+ expect(bazEvent).to.have.property('multiple', true)
+ expect(bazEvent).to.have.property('bubbles', true)
+
+ const bingEvent = events.getCall(3).args[0]
+ expect(bingEvent).to.be.instanceof(ContextEvent)
+ expect(bingEvent).to.have.nested.property('context.name', sym)
+ expect(bingEvent).to.have.nested.property('context.initialValue').eql({})
+ expect(bingEvent).to.have.property('multiple', true)
+ expect(bingEvent).to.have.property('bubbles', true)
+
+ const quxEvent = events.getCall(4).args[0]
+ expect(quxEvent).to.be.instanceof(ContextEvent)
+ expect(quxEvent).to.have.nested.property('context.name', 'qux')
+ expect(quxEvent).to.have.nested.property('context.initialValue', 0)
+ expect(quxEvent).to.have.property('multiple', true)
+ expect(quxEvent).to.have.property('bubbles', true)
+
+ const targetEvent = events.getCall(5).args[0]
+ expect(targetEvent).to.be.instanceof(ContextEvent)
+ expect(targetEvent).to.have.nested.property('context.name', 'target')
+ expect(targetEvent).to.have.nested.property('context.initialValue', undefined)
+ expect(targetEvent).to.have.property('multiple', true)
+ expect(targetEvent).to.have.property('bubbles', true)
+
+ const attrEvent = events.getCall(6).args[0]
+ expect(attrEvent).to.be.instanceof(ContextEvent)
+ expect(attrEvent).to.have.nested.property('context.name', 'testAttribute')
+ expect(attrEvent).to.have.nested.property('context.initialValue', '')
+ expect(attrEvent).to.have.property('multiple', true)
+ expect(attrEvent).to.have.property('bubbles', true)
+ })
+
+ it('changes value based on callback new value', async () => {
+ expect(events).to.have.callCount(7)
+ const fooCallback = events.getCall(0).args[0].callback
+ fooCallback('hello')
+ expect(instance).to.have.property('foo', 'hello')
+ fooCallback('goodbye')
+ expect(instance).to.have.property('foo', 'goodbye')
+ })
+
+ it('disposes of past callbacks when given new ones', async () => {
+ const dispose1 = fake()
+ const dispose2 = fake()
+ expect(events).to.have.callCount(7)
+ const fooCallback = events.getCall(0).args[0].callback
+ fooCallback('hello', dispose1)
+ expect(dispose1).to.have.callCount(0)
+ expect(dispose2).to.have.callCount(0)
+ fooCallback('goodbye', dispose1)
+ expect(dispose1).to.have.callCount(0)
+ expect(dispose2).to.have.callCount(0)
+ fooCallback('greetings', dispose2)
+ expect(dispose1).to.have.callCount(1)
+ expect(dispose2).to.have.callCount(0)
+ fooCallback('hola', dispose1)
+ expect(dispose1).to.have.callCount(1)
+ expect(dispose2).to.have.callCount(1)
+ })
+ })
+
+ describe('provider', () => {
+ let provider: ProvidableProviderTest
+ beforeEach(async () => {
+ provider = await fixture(
+ html`
+
+
+
+ `
+ )
+ })
+
+ it('listens for `context-request` events, calling back with values', () => {
+ const fooCallback = fake()
+ provider.dispatchEvent(new ContextEvent({name: 'foo', initialValue: 'a'}, fooCallback, true))
+ expect(fooCallback).to.have.callCount(1).and.be.calledWith('hello')
+ const barCallback = fake()
+ provider.querySelector('strong')!.dispatchEvent(new ContextEvent({name: 'bar', initialValue: 'a'}, barCallback))
+ expect(barCallback).to.have.callCount(1).and.be.calledWith('world')
+ })
+
+ it('re-calls callback each time value changes', () => {
+ const fooCallback = fake()
+ provider.dispatchEvent(new ContextEvent({name: 'foo', initialValue: 'a'}, fooCallback, true))
+ expect(fooCallback).to.have.callCount(1).and.be.calledWith('hello')
+ provider.foo = 'goodbye'
+ expect(fooCallback).to.have.callCount(2).and.be.calledWith('goodbye')
+ provider.foo = 'greetings'
+ expect(fooCallback).to.have.callCount(3).and.be.calledWith('greetings')
+ })
+
+ it('does not re-call callback if `multiple` is `false`', () => {
+ const fooCallback = fake()
+ provider.dispatchEvent(new ContextEvent({name: 'foo', initialValue: 'a'}, fooCallback, false))
+ expect(fooCallback).to.have.callCount(1).and.be.calledWith('hello')
+ provider.foo = 'goodbye'
+ expect(fooCallback).to.have.callCount(1)
+ })
+
+ it('does not re-call callback once `dispose` has been called', () => {
+ const fooCallback = fake()
+ provider.dispatchEvent(new ContextEvent({name: 'foo', initialValue: 'a'}, fooCallback, true))
+ expect(fooCallback).to.have.callCount(1).and.be.calledWith('hello')
+ const dispose = fooCallback.getCall(0).args[1]
+ dispose()
+ provider.foo = 'goodbye'
+ expect(fooCallback).to.have.callCount(1)
+ })
+ })
+
+ describe('consumer with provider parent', () => {
+ let provider: ProvidableProviderTest
+ let consumer: ProvidableConsumerTest
+ beforeEach(async () => {
+ provider = await fixture(html`
+
+
+
+
+
+
+ `)
+ consumer = provider.querySelector('providable-consumer-test')!
+ })
+
+ it('uses values provided by provider', () => {
+ expect(consumer).to.have.property('foo', 'hello')
+ expect(consumer).to.have.property('bar', 'world')
+ expect(consumer).to.have.property('baz', 3)
+ expect(consumer).to.have.property(sym).eql({provided: true})
+ expect(consumer).to.have.property('qux', 8)
+ expect(consumer).to.have.property('target', provider.querySelector('small')!)
+ expect(consumer).to.have.property('testAttribute', 'x')
+ })
+
+ it('updates values provided if they change', () => {
+ expect(provider).to.have.property('foo', 'hello')
+ expect(consumer).to.have.property('foo', 'hello')
+ provider.foo = 'greetings'
+ expect(consumer).to.have.property('foo', 'greetings')
+ })
+
+ it('updates @provide @attr values if they change', async () => {
+ provider.setAttribute('test-attribute', 'y')
+ await Promise.resolve()
+ expect(consumer).to.have.property('testAttribute', 'y')
+ })
+
+ it('updates @provide @target values if they change', async () => {
+ const big = document.createElement('big')
+ big.setAttribute('data-target', 'providable-provider-test.target')
+ provider.prepend(big)
+ await Promise.resolve()
+ expect(consumer).to.have.property('target', big)
+ })
+
+ it('calls consumer set callbacks when the value is updated', () => {
+ expect(consumer).to.have.property('qux', 8)
+ expect(consumer).to.have.property('count', 1)
+ provider.qux = 17
+ expect(consumer).to.have.property('qux', 17)
+ expect(consumer).to.have.property('count', 2)
+ provider.qux = 18
+ expect(consumer).to.have.property('qux', 18)
+ expect(consumer).to.have.property('count', 3)
+ })
+ })
+
+ describe('consumer with nested provider parents', () => {
+ let provider: ProvidableProviderTest
+ let someProvider: ProvidableSomeProviderTest
+ let consumer: ProvidableConsumerTest
+ beforeEach(async () => {
+ provider = await fixture(html`
+
+
+
+
+
+
+
+ `)
+ someProvider = provider.querySelector('providable-some-provider-test')!
+ consumer = provider.querySelector('providable-consumer-test')!
+ })
+
+ it('only recieves provider responses from first matching provider', () => {
+ expect(consumer).to.have.property('foo', 'greetings')
+ expect(consumer).to.have.property('bar', 'world')
+ expect(consumer).to.have.property('baz', 3)
+ expect(consumer).to.have.property(sym).eql({provided: true})
+ expect(consumer).to.have.property('qux').eql(42)
+ expect(consumer).to.have.property('count').eql(1)
+ })
+
+ it('only updates on appropriate provider changing values', () => {
+ expect(consumer).to.have.property('qux').eql(42)
+ expect(consumer).to.have.property('count').eql(1)
+ provider.qux = 12
+ expect(consumer).to.have.property('qux').eql(42)
+ expect(consumer).to.have.property('count').eql(1)
+ someProvider.qux = 88
+ expect(consumer).to.have.property('qux').eql(88)
+ expect(consumer).to.have.property('count').eql(2)
+ })
+ })
+
+ describe('error scenarios', () => {
+ it('cannot decorate methods as providers', () => {
+ expect(() => {
+ class Foo {
+ @provide foo() {}
+ }
+ new Foo()
+ }).to.throw(/provide cannot decorate method/)
+ })
+
+ it('cannot decorate setters as providers', () => {
+ expect(() => {
+ class Foo {
+ @provide set foo(v: string) {}
+ }
+ new Foo()
+ }).to.throw(/provide cannot decorate setter/)
+ })
+
+ it('cannot decorate methods as consumers', () => {
+ expect(() => {
+ class Foo {
+ @consume foo() {}
+ }
+ new Foo()
+ }).to.throw(/consume cannot decorate method/)
+ })
+ })
+})
diff --git a/test/register.ts b/test/register.ts
index 5ba50bb0..68de49a1 100644
--- a/test/register.ts
+++ b/test/register.ts
@@ -1,49 +1,85 @@
import {expect} from '@open-wc/testing'
+import {restore, replace, fake} from 'sinon'
import {register} from '../src/register.js'
describe('register', () => {
+ afterEach(() => {
+ restore()
+ })
+
it('registers the class as a custom element, normalising the class name', () => {
- class MyFirstController {}
- register(MyFirstController)
- expect(window.customElements.get('my-first-controller')).to.equal(MyFirstController)
+ @register
+ class MyFirstClass extends HTMLElement {}
+ expect(window.customElements.get('my-first-class')).to.equal(MyFirstClass)
})
it('does not register controllers that already exist', () => {
{
- class MySecondController {}
- register(MySecondController)
- expect(window.customElements.get('my-second-controller')).to.equal(MySecondController)
+ @register
+ class MySecondClass extends HTMLElement {}
+ expect(window.customElements.get('my-second-class')).to.equal(MySecondClass)
}
{
- class MySecondController {}
- register(MySecondController)
- expect(window.customElements.get('my-second-controller')).to.not.equal(MySecondController)
+ @register
+ class MySecondClass extends HTMLElement {}
+ expect(window.customElements.get('my-second-class')).to.not.equal(MySecondClass)
}
})
+ it('will redefine controllers, catching on errors', () => {
+ replace(customElements, 'define', fake())
+ replace(
+ customElements,
+ 'get',
+ fake(() => class extends HTMLElement {})
+ )
+ {
+ @register
+ class MyThirdClass extends HTMLElement {}
+ expect(customElements.define).to.be.calledOnceWithExactly('my-third-class', MyThirdClass)
+ }
+ expect(() => {
+ @register
+ class MyThirdClass extends HTMLElement {}
+ expect(customElements.define).to.be.calledOnceWithExactly('my-third-class', MyThirdClass)
+ }).to.throw(Error)
+ })
+
it('dasherises class names', () => {
- class ThisIsAnExampleOfDasherisedClassNames {}
- register(ThisIsAnExampleOfDasherisedClassNames)
+ @register
+ class ThisIsAnExampleOfDasherisedClassNames extends HTMLElement {}
expect(window.customElements.get('this-is-an-example-of-dasherised-class-names')).to.equal(
ThisIsAnExampleOfDasherisedClassNames
)
})
it('will intuitively dasherize acryonyms', () => {
- class URLBar {}
- register(URLBar)
+ @register
+ class URLBar extends HTMLElement {}
expect(window.customElements.get('url-bar')).to.equal(URLBar)
})
it('dasherizes cap suffixed names correctly', () => {
- class ClipX {}
- register(ClipX)
+ @register
+ class ClipX extends HTMLElement {}
expect(window.customElements.get('clip-x')).to.equal(ClipX)
})
it('automatically drops the `Element` suffix', () => {
- class AutoCompleteElement {}
- register(AutoCompleteElement)
- expect(window.customElements.get('auto-complete')).to.equal(AutoCompleteElement)
+ @register
+ class FirstSuffixElement extends HTMLElement {}
+ expect(window.customElements.get('first-suffix')).to.equal(FirstSuffixElement)
+ })
+
+ it('automatically drops the `Controller` suffix', () => {
+ @register
+ class SecondSuffixController extends HTMLElement {}
+ expect(window.customElements.get('second-suffix')).to.equal(SecondSuffixController)
+ })
+
+ it('automatically drops the `Component` suffix', () => {
+ @register
+ class ThirdSuffixComponent extends HTMLElement {}
+ expect(window.customElements.get('third-suffix')).to.equal(ThirdSuffixComponent)
})
})
diff --git a/test/tag-observer.ts b/test/tag-observer.ts
new file mode 100644
index 00000000..a04b6860
--- /dev/null
+++ b/test/tag-observer.ts
@@ -0,0 +1,84 @@
+import {expect, fixture, html} from '@open-wc/testing'
+import {fake, match} from 'sinon'
+import {registerTag, observeElementForTags} from '../src/tag-observer.js'
+
+describe('tag observer', () => {
+ let instance: HTMLElement
+ beforeEach(async () => {
+ instance = await fixture(html``)
+ })
+
+ it('can register new tag observers', () => {
+ registerTag('foo', fake(), fake())
+ })
+
+ it('throws an error when registering a duplicate', () => {
+ registerTag('duplicate', fake(), fake())
+ expect(() => registerTag('duplicate', fake(), fake())).to.throw()
+ })
+
+ describe('registered behaviour', () => {
+ const testParse = fake(v => v.split('.'))
+ const testFound = fake()
+ registerTag('data-tagtest', testParse, testFound)
+ beforeEach(() => {
+ observeElementForTags(instance)
+ })
+
+ it('uses parse to extract tagged element values', () => {
+ expect(testParse).to.be.calledWithExactly('section.a.b.c')
+ expect(testParse).to.be.calledWithExactly('section.d.e.f')
+ expect(testParse).to.be.calledWithExactly('doesntexist.g.h.i')
+ })
+
+ it('calls found with el and args based from testParse', () => {
+ const div = instance.querySelector('div')!
+ expect(testFound).to.be.calledWithExactly(div, instance, 'data-tagtest', 'a', 'b', 'c')
+ expect(testFound).to.be.calledWithExactly(div, instance, 'data-tagtest', 'd', 'e', 'f')
+ expect(testFound).to.not.be.calledWithMatch(match.any, match.any, 'data-tagtest', 'g', 'h', 'i')
+ })
+
+ it('calls found if added to a node that has tags on itself', () => {
+ const div = document.createElement('div')
+ div.setAttribute('data-tagtest', 'div.j.k.l')
+ observeElementForTags(div)
+ expect(testParse).to.be.calledWithExactly('div.j.k.l')
+ expect(testFound).to.be.calledWithExactly(div, div, 'data-tagtest', 'j', 'k', 'l')
+ })
+
+ it('pierces shadowdom boundaries to find nearest controller', () => {
+ const div = document.createElement('div')
+ const shadow = div.attachShadow({mode: 'open'})
+ const span = document.createElement('span')
+ span.setAttribute('data-tagtest', 'div.m.n.o')
+ shadow.append(span)
+ observeElementForTags(span)
+ expect(testParse).to.be.calledWithExactly('div.m.n.o')
+ expect(testFound).to.be.calledWithExactly(span, div, 'data-tagtest', 'm', 'n', 'o')
+ })
+
+ it('queries inside shadowdom, and pierces to find nearest controller', () => {
+ const div = document.createElement('div')
+ const shadow = div.attachShadow({mode: 'open'})
+ const span = document.createElement('span')
+ span.setAttribute('data-tagtest', 'div.p.q.r')
+ shadow.append(span)
+ observeElementForTags(shadow)
+ expect(testParse).to.be.calledWithExactly('div.p.q.r')
+ expect(testFound).to.be.calledWithExactly(span, div, 'data-tagtest', 'p', 'q', 'r')
+ })
+
+ describe('mutations', () => {
+ it('calls parse+found on attributes that change', async () => {
+ instance.setAttribute('data-tagtest', 'section.s.t.u not.v.w.x')
+ await Promise.resolve()
+ expect(testParse).to.be.calledWithExactly('section.s.t.u')
+ expect(testParse).to.be.calledWithExactly('not.v.w.x')
+ expect(testFound).to.be.calledWithExactly(instance, instance, 'data-tagtest', 's', 't', 'u')
+ expect(testFound).to.not.be.calledWithMatch(match.any, match.any, 'data-tagtest', 'v', 'w', 'x')
+ })
+ })
+ })
+})
diff --git a/test/targetable.ts b/test/targetable.ts
new file mode 100644
index 00000000..d43d4fca
--- /dev/null
+++ b/test/targetable.ts
@@ -0,0 +1,131 @@
+import {expect, fixture, html} from '@open-wc/testing'
+import {target, targets, targetable} from '../src/targetable.js'
+
+describe('Targetable', () => {
+ @targetable
+ class TargetTest extends HTMLElement {
+ @target foo!: Element
+ bar = 'hello'
+ count = 0
+ _baz!: Element
+ @target set baz(value: Element) {
+ this.count += 1
+ this._baz = value
+ }
+ @target qux!: Element
+ @target shadow!: Element
+
+ @target bing!: Element
+ @target multiWord!: Element
+ @targets foos!: Element[]
+ bars = 'hello'
+ @target quxs!: Element[]
+ @target shadows!: Element[]
+ @targets camelCase!: Element[]
+ }
+ window.customElements.define('target-test', TargetTest)
+
+ let instance: TargetTest
+ beforeEach(async () => {
+ instance = await fixture(html`
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ `)
+ })
+
+ describe('target', () => {
+ it('returns the first element where closest tag is the controller', async () => {
+ expect(instance).to.have.property('foo').exist.with.attribute('id', 'el4')
+ expect(instance.querySelector('target-test')).to.have.property('foo').exist.with.attribute('id', 'el2')
+ })
+
+ it('does not assign to non-target decorated properties', async () => {
+ expect(instance).to.have.property('bar', 'hello')
+ })
+
+ it('returns the first element that has the exact target name', async () => {
+ expect(instance).to.have.property('baz').exist.with.attribute('id', 'el5')
+ })
+
+ it('returns target when there are mutliple target values', async () => {
+ expect(instance).to.have.property('bing').exist.with.attribute('id', 'el6')
+ })
+
+ it('returns targets when there are mutliple target values with different controllers', async () => {
+ expect(instance).to.have.property('qux').exist.with.attribute('id', 'el8')
+ })
+
+ it('returns targets from the shadowRoot, if available', async () => {
+ instance.attachShadow({mode: 'open'})
+ const el = document.createElement('div')
+ el.setAttribute('data-target', 'target-test.shadow')
+ instance.shadowRoot!.appendChild(el)
+ expect(instance).to.have.property('shadow', el)
+ })
+
+ it('prioritises shadowRoot targets over others', async () => {
+ instance.attachShadow({mode: 'open'})
+ const shadowEl = document.createElement('div')
+ shadowEl.setAttribute('data-target', 'target-test.foo')
+ instance.shadowRoot!.appendChild(shadowEl)
+ expect(instance).to.have.property('foo', shadowEl)
+ })
+
+ it('dasherises target name but falls back to authored case', async () => {
+ expect(instance).to.have.property('multiWord').exist.with.attribute('id', 'el9')
+ instance.querySelector('#el9')!.remove()
+ expect(instance).to.have.property('multiWord').exist.with.attribute('id', 'el10')
+ })
+
+ it('calls setter when new target has been found', async () => {
+ expect(instance).to.have.property('baz').exist.with.attribute('id', 'el5')
+ expect(instance).to.have.property('_baz').exist.with.attribute('id', 'el5')
+ instance.count = 0
+ instance.querySelector('#el4')!.setAttribute('data-target', 'target-test.baz')
+ await Promise.resolve()
+ expect(instance).to.have.property('baz').exist.with.attribute('id', 'el4')
+ expect(instance).to.have.property('_baz').exist.with.attribute('id', 'el4')
+ expect(instance).to.have.property('count', 1)
+ })
+ })
+
+ describe('targets', () => {
+ it('returns all elements where closest tag is the controller', async () => {
+ expect(instance).to.have.property('foos').with.lengthOf(2)
+ expect(instance).to.have.nested.property('foos[0]').with.attribute('id', 'el4')
+ expect(instance).to.have.nested.property('foos[1]').with.attribute('id', 'el5')
+ })
+
+ it('returns all elements inside a shadow root', async () => {
+ instance.attachShadow({mode: 'open'})
+ const els = [document.createElement('div'), document.createElement('div'), document.createElement('div')]
+ for (const el of els) el.setAttribute('data-targets', 'target-test.foos')
+ instance.shadowRoot!.append(...els)
+
+ expect(instance).to.have.property('foos').with.lengthOf(5)
+ expect(instance).to.have.nested.property('foos[0]', els[0])
+ expect(instance).to.have.nested.property('foos[1]', els[1])
+ expect(instance).to.have.nested.property('foos[2]', els[2])
+ expect(instance).to.have.nested.property('foos[3]').with.attribute('id', 'el4')
+ expect(instance).to.have.nested.property('foos[4]').with.attribute('id', 'el5')
+ })
+
+ it('returns camel case and dasherised element names', async () => {
+ expect(instance).to.have.property('camelCase').with.lengthOf(2)
+ expect(instance).to.have.nested.property('camelCase[0]').with.attribute('id', 'el11')
+ expect(instance).to.have.nested.property('camelCase[1]').with.attribute('id', 'el12')
+ })
+ })
+})
diff --git a/tsconfig.build.json b/tsconfig.build.json
new file mode 100644
index 00000000..2ab0489c
--- /dev/null
+++ b/tsconfig.build.json
@@ -0,0 +1,10 @@
+{
+ "exclude": ["test"],
+ "extends": "./tsconfig.json",
+ "compilerOptions": {
+ "declaration": true,
+ "declarationMap": true,
+ "outDir": "./lib",
+ "noEmit": false
+ }
+}
diff --git a/tsconfig.json b/tsconfig.json
index e9a43b5d..67676465 100644
--- a/tsconfig.json
+++ b/tsconfig.json
@@ -1,16 +1,13 @@
{
- "include": ["src"],
+ "include": ["src", "test"],
"compilerOptions": {
"baseUrl": ".",
- "declaration": true,
- "declarationMap": true,
"esModuleInterop": true,
"experimentalDecorators": true,
"lib": ["es6", "dom", "dom.iterable"],
"module": "ESNext",
"moduleResolution": "node",
- "noEmit": false,
- "outDir": "./lib",
+ "noEmit": true,
"sourceMap": true,
"strict": true,
"target": "ES2020"
diff --git a/web-test-runner.config.js b/web-test-runner.config.js
index 39d7ac20..b1deeaf6 100644
--- a/web-test-runner.config.js
+++ b/web-test-runner.config.js
@@ -2,5 +2,5 @@ import {esbuildPlugin} from '@web/dev-server-esbuild'
export default {
files: ['test/*'],
- plugins: [esbuildPlugin({ts: true})]
+ plugins: [esbuildPlugin({ts: true, target: 'es2020'})]
}