├── .gitignore
├── .prettierignore
├── CHANGELOG.md
├── LICENSE.md
├── README.md
├── package-lock.json
├── package.json
├── prettier.config.cjs
├── rollup.config.js
├── src
├── shoemaker.ts
└── utilities
│ ├── attributes.ts
│ ├── directives.ts
│ └── properties.ts
└── tsconfig.json
/.gitignore:
--------------------------------------------------------------------------------
1 | .DS_Store
2 | dist
3 | examples
4 | node_modules
--------------------------------------------------------------------------------
/.prettierignore:
--------------------------------------------------------------------------------
1 | *.md
2 | .github
3 | lib
4 | node_modules
5 | package-lock.json
6 |
--------------------------------------------------------------------------------
/CHANGELOG.md:
--------------------------------------------------------------------------------
1 | # Changelog
2 |
3 | # 1.0.0-beta.6
4 |
5 | - Use `_` prefix for private properties to improve end user experience
6 |
7 | # 1.0.0-beta.5
8 |
9 | - 🚨 BREAKING: renamed lifecyle methods so they're more intuitive
10 | - `onBeforeMount` => `onConnect`
11 | - `onMount` => `onReady`
12 | - `onDestroy` => `onDisconnect`
13 |
--------------------------------------------------------------------------------
/LICENSE.md:
--------------------------------------------------------------------------------
1 | Copyright (c) 2020 A Beautiful Site, LLC
2 |
3 | Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
4 |
5 | The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
6 |
7 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
8 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # Shoemaker
2 |
3 | An elegant way to create web components.
4 |
5 | Created by [Cory LaViska](https://twitter.com/claviska).
6 |
7 | ⚠️ This project was a fun experiment, but it is no longer being developed or maintained.
8 |
9 | ## Overview
10 |
11 | Shoemaker provides an abstract class that you can extend to make your own [custom elements](https://developer.mozilla.org/en-US/docs/Web/Web_Components/Using_custom_elements) with an elegant API and reactive data binding. It gives you a closer-to-the-metal experience than many other custom element authoring tools.
12 |
13 | - Declarative templates
14 | - Reactive data binding via props
15 | - Fast, efficient rendering
16 | - Lifecycle hooks
17 | - Watchers
18 |
19 | Shoemaker is written in TypeScript. For an optimal developer experience you should use TypeScript as well, but it is by no means a requirement.
20 |
21 | ## Installation
22 |
23 | To get started, install Shoemaker:
24 |
25 | ```bash
26 | npm install @shoelace-style/shoemaker
27 | ```
28 |
29 | ## Your First Component
30 |
31 | Let's create a simple counter component using TypeScript.
32 |
33 | ```ts
34 | import { Shoemaker, html } from '@shoelace-style/shoemaker';
35 |
36 | export class MyCounter extends Shoemaker {
37 | static tag = 'my-counter';
38 | static props = ['count'];
39 |
40 | count = 0;
41 |
42 | render() {
43 | return html`
44 |
45 | Count: ${this.count}
46 |
47 | `;
48 | }
49 | }
50 |
51 | MyCounter.register(); // now you can use in your HTML
52 | ```
53 |
54 |
55 | JavaScript version
56 |
57 | The same component in browser-friendly JavaScript looks like this.
58 |
59 | ```js
60 | import { Shoemaker, html } from '@shoelace-style/shoemaker';
61 |
62 | export class MyCounter extends Shoemaker {
63 | constructor() {
64 | super();
65 | this.count = 0;
66 | }
67 |
68 | render() {
69 | return html`
70 |
71 | Count: ${this.count}
72 |
73 | `;
74 | }
75 | }
76 |
77 | MyCounter.tag = 'my-counter';
78 | MyCounter.props = ['count'];
79 | MyCounter.register();
80 | ```
81 |
82 |
83 | ## API
84 |
85 | ### Metadata
86 |
87 | Metadata is defined using the following static properties.
88 |
89 | - `tag` - The custom element's tag. Per the spec, this must start with a letter and contain at least one dash.
90 | - `props` - An array of prop names to be made reactive. That is, changing any of these props will trigger a rerender. Always use camelCase notation for props.
91 | - `reflect` - An array of prop names that will reflect their values to the corresponding DOM attribute (e.g. `myProp` ==> `my-prop`).
92 | - `styles` - A string containing the component's stylesheet. If you're using a bundler, it's convenient to import your CSS or SCSS as a string from separate files.
93 |
94 | In TypeScript, metadata is defined like this:
95 |
96 | ```ts
97 | class MyComponent extends Shoemaker {
98 | static tag = 'my-component';
99 | static props = ['value', 'disabled'];
100 | static reflect = ['disabled'];
101 | static styles = `...`;
102 |
103 | // ...
104 | }
105 | ```
106 |
107 |
108 | JavaScript version
109 | If you're not using TypeScript or Babel to transpile bleeding-edge JavaScript into something browsers can understand, you should define metadata like this instead:
110 |
111 | ```js
112 | class MyComponent extends Shoemaker {
113 | // ...
114 | }
115 |
116 | MyComponent.tag = 'my-component';
117 | MyComponent.props = ['value', 'disabled'];
118 | MyComponent.reflect = ['disabled'];
119 | MyComponent.styles = `...`;
120 | ```
121 |
122 |
123 | ### Props
124 |
125 | In Shoemaker, the term "prop" refers to a form of state that the user controls by setting HTML attributes or JavaScript properties on the element. The concept of attributes and properties can be confusing, so Shoemaker abstracts them into "props." Internally, Shoemaker only looks at properties, but it will automatically sync attribute changes to their corresponding properties for better DX. This means that the color attribute in `` will translate to `this.color = 'blue'` on the element instance and, if the attribute changes, `this.color` will update to match.
126 |
127 | By default, property changes will not reflect back to attributes. Thus, setting `this.color = 'tomato'` will update the property but not the attribute nor the DOM. You can modify this behavior by adding props to the `reflect` array. This can be useful if you intend to style your element with attribute selectors.
128 |
129 | Attributes are always lower-kebab-case and properties are always camelCase. For example, an attribute named primary-color will have a corresponding property of primaryColor. Shoemaker handles this conversion for you automatically.
130 |
131 | In TypeScript, props can be defined like this:
132 |
133 | ```ts
134 | class MyComponent extends Shoemaker {
135 | static tag = 'my-component';
136 | static props = ['value', 'disabled']; // make them reactive
137 |
138 | value: number = 0;
139 | disabled: boolean = false;
140 |
141 | // ...
142 | }
143 | ```
144 |
145 |
146 | JavaScript version
147 | The same props can be defined in JavaScript like this:
148 |
149 | ```js
150 | class MyComponent extends Shoemaker {
151 | constructor() {
152 | super();
153 | this.value = 0;
154 | this.disabled = false;
155 | }
156 |
157 | // ...
158 | }
159 |
160 | MyComponent.tag = 'my-component';
161 | MyComponent.props = ['value', 'disabled']; // make them reactive
162 |
163 | ```
164 |
165 |
166 | ### Templates & rendering
167 |
168 | Each component is rendered by its `render()` method, which must return a template. Templates are powered by [uhtml](https://github.com/WebReflection/uhtml), a performant, lightweight rendering library. No virtual DOM is used.
169 |
170 | To create a template, import the `html` function from the Shoemaker package and use it like so:
171 |
172 | ```ts
173 | class MyComponent extends Shoemaker {
174 | static tag = 'my-component';
175 |
176 | render() {
177 | return html`
178 |
179 |
180 |
181 | `
182 | }
183 | }
184 | ```
185 |
186 | If this syntax looks new to you, take a moment to read about [tagged templates](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Template_literals#tagged_templates) to better understand how they work.
187 |
188 | Note: If your editor doesn't highlight the HTML in your templates, try using an extension such as [this one for VS Code](https://marketplace.visualstudio.com/items?itemName=bierner.lit-html).
189 |
190 | Note: By design, Shoemaker components _always_ contain a [shadow root](https://developer.mozilla.org/en-US/docs/Web/API/ShadowRoot) for encapsulation purposes, so to allow children you should include a [``](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/slot) element. If you're not familiar with how custom element slots work, now is a good time to [study up on them](https://developer.mozilla.org/en-US/docs/Web/Web_Components/Using_templates_and_slots).
191 |
192 | #### Interpolation
193 |
194 | You can use interpolation to make templates dynamic. Let's take another look at our counter example. Notice how the count is displayed using `${this.count}`? That simply outputs the currently value of the `count` prop, and since `count` is also listed as one our our static props, every time it changes the component will automatically rerender.
195 |
196 | Also note how we're using `onclick` to watch for clicks. Although it looks the same, this isn't the standard `onclick` attribute. uthml interprets any `on` attribute as a listener and executes the associated expression when the event is emitted. Thus, clicking the button will increment `this.count` by one.
197 |
198 | ```ts
199 | class MyCounter extends Shoemaker {
200 | static tag = 'my-counter';
201 | static props = ['count'];
202 |
203 | count = 0;
204 |
205 | render() {
206 | return html`
207 |
208 | Count: ${this.count}
209 |
210 | `;
211 | }
212 | }
213 | ```
214 |
215 | Another way to write this is to split the expression into a separate function. This time, we remove the arrow function and append `.bind(this)` so it's called with the correct context. We're also adding the `event` argument so we can log the event as an example.
216 |
217 | ```ts
218 | class MyCounter extends Shoemaker {
219 | static tag = 'my-counter';
220 | static props = ['count'];
221 |
222 | count = 0;
223 |
224 | handleClick(event: MouseEvent) {
225 | this.count++;
226 | console.log(event);
227 | }
228 |
229 | render() {
230 | return html`
231 |
232 | Count: ${this.count}
233 |
234 | `;
235 | }
236 | }
237 | ```
238 |
239 | #### Passing properties
240 |
241 | Attributes can only store string values, so to pass arrays, objects, and non-scalar values you should pass them as a property using the `.` prefix. Imagine we have a `` element that accepts an array of colors for its `swatches` prop. Using the dot prefix will ensure it receives the array correctly.
242 |
243 | ```ts
244 | class MyComponent extends Shoemaker {
245 |
246 | // ...
247 |
248 | render() {
249 | const swatches = ['red', 'orange', 'yellow', 'green', 'blue', 'purple'];
250 |
251 | return html`
252 |
253 | `;
254 | }
255 | }
256 | ```
257 |
258 | #### Boolean attributes
259 |
260 | There's no such thing as boolean attributes in HTML, although we use them as such. Still, sometimes they're useful. Think of a `disabled` attribute with no value:
261 |
262 | ```html
263 |
264 | ```
265 |
266 | To render this, your template should look like this:
267 |
268 | ```ts
269 | class MyInput extends Shoemaker {
270 |
271 | // ...
272 |
273 | render() {
274 | return html`
275 |
276 | `;
277 | }
278 | }
279 | ```
280 |
281 | Note the use of `true` and `null` instead of `true` and `false`. Any prop that evaluates to `null` or `undefined` will be removed as an attribute.
282 |
283 | #### Directives
284 |
285 | Shoemaker exposes two helpful directives that make it easier to apply classes and styles to elements.
286 |
287 | ```ts
288 | import { Shoemaker, html, classMap, styleMap } from '@shoelace-style/shoemaker';
289 |
290 | class MyComponent extends Shoemaker {
291 | static tag = 'my-component';
292 |
293 | render() {
294 | return html`
295 |
305 | ...
306 |
307 | `;
308 | }
309 | }
310 | ```
311 |
312 | Any truthy value will add the class or style and any falsey value will remove it. This will render as:
313 |
314 | ```html
315 |
316 | ...
317 |
318 | ```
319 |
320 | #### More about templates
321 |
322 | There are some things you can't do in templates, such as using sparse attributes like `style="top:${x}; left${y}"` (instead, use ``style=${`top:${x}; left${y}`}``).
323 |
324 | I'll expand this section of the docs more later, but for now, refer to [uhtml's API docs](https://github.com/WebReflection/uhtml#api-documentation) for details.
325 |
326 | ### Lifecyle methods
327 |
328 | Shoemaker exposes intuitive lifecycle methods.
329 |
330 | - `onConnect()` - Called when the component is connected to the DOM and all properties are set, but before the first render. This is a good place to fetch data and do other pre-render init. At this point, the component's internals are not yet available in the DOM.
331 | - `onReady()` - Called after the first render.
332 | - `onDisconnect()` - Called when the component is disconnected from the DOM. This is a good place to cleanup listeners, observers, etc.
333 |
334 | ### Emitting events
335 |
336 | Use the `emit()` method to emit custom events. By convention, and for maximum compatibility with frameworks, custom event names should be lower-kebab-case. For example, use `my-click` instead of `myClick`.
337 |
338 | ```ts
339 | class MyEmit extends Shoemaker {
340 | static tag = 'my-emit';
341 |
342 | render() {
343 | return html`
344 |
345 | Click to emit an event
346 |
347 | `;
348 | }
349 | }
350 | ```
351 |
352 | The `emit()` method accepts an optional second argument of `CustomEventInit` options (default values shown):
353 |
354 | ```ts
355 | this.emit('my-click', {
356 | bubbles: true,
357 | cancelable: true,
358 | composed: true,
359 | detail: {
360 | /* this is where you can pass custom data to your event */
361 | }
362 | });
363 | ```
364 |
365 | ### Methods
366 |
367 | Define methods as you normally would on a class:
368 |
369 | ```ts
370 | class MyMethod extends Shoemaker {
371 | static tag = 'my-method';
372 |
373 | public announce() {
374 | alert('Hey!');
375 | }
376 |
377 | // ...
378 | }
379 | ```
380 |
381 | To access a method on the element:
382 |
383 | ```html
384 |
385 |
386 |
390 | ```
391 |
--------------------------------------------------------------------------------
/package-lock.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "@shoelace-style/shoemaker",
3 | "version": "1.0.0-beta.6",
4 | "lockfileVersion": 1,
5 | "requires": true,
6 | "dependencies": {
7 | "@babel/code-frame": {
8 | "version": "7.12.13",
9 | "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.13.tgz",
10 | "integrity": "sha512-HV1Cm0Q3ZrpCR93tkWOYiuYIgLxZXZFVG2VgK+MBWjUqZTundupbfx2aXarXuw5Ko5aMcjtJgbSs4vUGBS5v6g==",
11 | "dev": true,
12 | "requires": {
13 | "@babel/highlight": "^7.12.13"
14 | }
15 | },
16 | "@babel/compat-data": {
17 | "version": "7.12.13",
18 | "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.12.13.tgz",
19 | "integrity": "sha512-U/hshG5R+SIoW7HVWIdmy1cB7s3ki+r3FpyEZiCgpi4tFgPnX/vynY80ZGSASOIrUM6O7VxOgCZgdt7h97bUGg==",
20 | "dev": true
21 | },
22 | "@babel/core": {
23 | "version": "7.12.13",
24 | "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.12.13.tgz",
25 | "integrity": "sha512-BQKE9kXkPlXHPeqissfxo0lySWJcYdEP0hdtJOH/iJfDdhOCcgtNCjftCJg3qqauB4h+lz2N6ixM++b9DN1Tcw==",
26 | "dev": true,
27 | "requires": {
28 | "@babel/code-frame": "^7.12.13",
29 | "@babel/generator": "^7.12.13",
30 | "@babel/helper-module-transforms": "^7.12.13",
31 | "@babel/helpers": "^7.12.13",
32 | "@babel/parser": "^7.12.13",
33 | "@babel/template": "^7.12.13",
34 | "@babel/traverse": "^7.12.13",
35 | "@babel/types": "^7.12.13",
36 | "convert-source-map": "^1.7.0",
37 | "debug": "^4.1.0",
38 | "gensync": "^1.0.0-beta.1",
39 | "json5": "^2.1.2",
40 | "lodash": "^4.17.19",
41 | "semver": "^5.4.1",
42 | "source-map": "^0.5.0"
43 | }
44 | },
45 | "@babel/generator": {
46 | "version": "7.12.15",
47 | "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.12.15.tgz",
48 | "integrity": "sha512-6F2xHxBiFXWNSGb7vyCUTBF8RCLY66rS0zEPcP8t/nQyXjha5EuK4z7H5o7fWG8B4M7y6mqVWq1J+1PuwRhecQ==",
49 | "dev": true,
50 | "requires": {
51 | "@babel/types": "^7.12.13",
52 | "jsesc": "^2.5.1",
53 | "source-map": "^0.5.0"
54 | }
55 | },
56 | "@babel/helper-annotate-as-pure": {
57 | "version": "7.12.13",
58 | "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.12.13.tgz",
59 | "integrity": "sha512-7YXfX5wQ5aYM/BOlbSccHDbuXXFPxeoUmfWtz8le2yTkTZc+BxsiEnENFoi2SlmA8ewDkG2LgIMIVzzn2h8kfw==",
60 | "dev": true,
61 | "requires": {
62 | "@babel/types": "^7.12.13"
63 | }
64 | },
65 | "@babel/helper-builder-binary-assignment-operator-visitor": {
66 | "version": "7.12.13",
67 | "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.12.13.tgz",
68 | "integrity": "sha512-CZOv9tGphhDRlVjVkAgm8Nhklm9RzSmWpX2my+t7Ua/KT616pEzXsQCjinzvkRvHWJ9itO4f296efroX23XCMA==",
69 | "dev": true,
70 | "requires": {
71 | "@babel/helper-explode-assignable-expression": "^7.12.13",
72 | "@babel/types": "^7.12.13"
73 | }
74 | },
75 | "@babel/helper-compilation-targets": {
76 | "version": "7.12.13",
77 | "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.12.13.tgz",
78 | "integrity": "sha512-dXof20y/6wB5HnLOGyLh/gobsMvDNoekcC+8MCV2iaTd5JemhFkPD73QB+tK3iFC9P0xJC73B6MvKkyUfS9cCw==",
79 | "dev": true,
80 | "requires": {
81 | "@babel/compat-data": "^7.12.13",
82 | "@babel/helper-validator-option": "^7.12.11",
83 | "browserslist": "^4.14.5",
84 | "semver": "^5.5.0"
85 | }
86 | },
87 | "@babel/helper-create-class-features-plugin": {
88 | "version": "7.12.13",
89 | "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.12.13.tgz",
90 | "integrity": "sha512-Vs/e9wv7rakKYeywsmEBSRC9KtmE7Px+YBlESekLeJOF0zbGUicGfXSNi3o+tfXSNS48U/7K9mIOOCR79Cl3+Q==",
91 | "dev": true,
92 | "requires": {
93 | "@babel/helper-function-name": "^7.12.13",
94 | "@babel/helper-member-expression-to-functions": "^7.12.13",
95 | "@babel/helper-optimise-call-expression": "^7.12.13",
96 | "@babel/helper-replace-supers": "^7.12.13",
97 | "@babel/helper-split-export-declaration": "^7.12.13"
98 | }
99 | },
100 | "@babel/helper-create-regexp-features-plugin": {
101 | "version": "7.12.13",
102 | "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.12.13.tgz",
103 | "integrity": "sha512-XC+kiA0J3at6E85dL5UnCYfVOcIZ834QcAY0TIpgUVnz0zDzg+0TtvZTnJ4g9L1dPRGe30Qi03XCIS4tYCLtqw==",
104 | "dev": true,
105 | "requires": {
106 | "@babel/helper-annotate-as-pure": "^7.12.13",
107 | "regexpu-core": "^4.7.1"
108 | }
109 | },
110 | "@babel/helper-explode-assignable-expression": {
111 | "version": "7.12.13",
112 | "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.12.13.tgz",
113 | "integrity": "sha512-5loeRNvMo9mx1dA/d6yNi+YiKziJZFylZnCo1nmFF4qPU4yJ14abhWESuSMQSlQxWdxdOFzxXjk/PpfudTtYyw==",
114 | "dev": true,
115 | "requires": {
116 | "@babel/types": "^7.12.13"
117 | }
118 | },
119 | "@babel/helper-function-name": {
120 | "version": "7.12.13",
121 | "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.12.13.tgz",
122 | "integrity": "sha512-TZvmPn0UOqmvi5G4vvw0qZTpVptGkB1GL61R6lKvrSdIxGm5Pky7Q3fpKiIkQCAtRCBUwB0PaThlx9vebCDSwA==",
123 | "dev": true,
124 | "requires": {
125 | "@babel/helper-get-function-arity": "^7.12.13",
126 | "@babel/template": "^7.12.13",
127 | "@babel/types": "^7.12.13"
128 | }
129 | },
130 | "@babel/helper-get-function-arity": {
131 | "version": "7.12.13",
132 | "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.12.13.tgz",
133 | "integrity": "sha512-DjEVzQNz5LICkzN0REdpD5prGoidvbdYk1BVgRUOINaWJP2t6avB27X1guXK1kXNrX0WMfsrm1A/ZBthYuIMQg==",
134 | "dev": true,
135 | "requires": {
136 | "@babel/types": "^7.12.13"
137 | }
138 | },
139 | "@babel/helper-hoist-variables": {
140 | "version": "7.12.13",
141 | "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.12.13.tgz",
142 | "integrity": "sha512-KSC5XSj5HreRhYQtZ3cnSnQwDzgnbdUDEFsxkN0m6Q3WrCRt72xrnZ8+h+pX7YxM7hr87zIO3a/v5p/H3TrnVw==",
143 | "dev": true,
144 | "requires": {
145 | "@babel/types": "^7.12.13"
146 | }
147 | },
148 | "@babel/helper-member-expression-to-functions": {
149 | "version": "7.12.13",
150 | "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.12.13.tgz",
151 | "integrity": "sha512-B+7nN0gIL8FZ8SvMcF+EPyB21KnCcZHQZFczCxbiNGV/O0rsrSBlWGLzmtBJ3GMjSVMIm4lpFhR+VdVBuIsUcQ==",
152 | "dev": true,
153 | "requires": {
154 | "@babel/types": "^7.12.13"
155 | }
156 | },
157 | "@babel/helper-module-imports": {
158 | "version": "7.12.13",
159 | "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.12.13.tgz",
160 | "integrity": "sha512-NGmfvRp9Rqxy0uHSSVP+SRIW1q31a7Ji10cLBcqSDUngGentY4FRiHOFZFE1CLU5eiL0oE8reH7Tg1y99TDM/g==",
161 | "dev": true,
162 | "requires": {
163 | "@babel/types": "^7.12.13"
164 | }
165 | },
166 | "@babel/helper-module-transforms": {
167 | "version": "7.12.13",
168 | "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.12.13.tgz",
169 | "integrity": "sha512-acKF7EjqOR67ASIlDTupwkKM1eUisNAjaSduo5Cz+793ikfnpe7p4Q7B7EWU2PCoSTPWsQkR7hRUWEIZPiVLGA==",
170 | "dev": true,
171 | "requires": {
172 | "@babel/helper-module-imports": "^7.12.13",
173 | "@babel/helper-replace-supers": "^7.12.13",
174 | "@babel/helper-simple-access": "^7.12.13",
175 | "@babel/helper-split-export-declaration": "^7.12.13",
176 | "@babel/helper-validator-identifier": "^7.12.11",
177 | "@babel/template": "^7.12.13",
178 | "@babel/traverse": "^7.12.13",
179 | "@babel/types": "^7.12.13",
180 | "lodash": "^4.17.19"
181 | }
182 | },
183 | "@babel/helper-optimise-call-expression": {
184 | "version": "7.12.13",
185 | "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.12.13.tgz",
186 | "integrity": "sha512-BdWQhoVJkp6nVjB7nkFWcn43dkprYauqtk++Py2eaf/GRDFm5BxRqEIZCiHlZUGAVmtwKcsVL1dC68WmzeFmiA==",
187 | "dev": true,
188 | "requires": {
189 | "@babel/types": "^7.12.13"
190 | }
191 | },
192 | "@babel/helper-plugin-utils": {
193 | "version": "7.12.13",
194 | "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.12.13.tgz",
195 | "integrity": "sha512-C+10MXCXJLiR6IeG9+Wiejt9jmtFpxUc3MQqCmPY8hfCjyUGl9kT+B2okzEZrtykiwrc4dbCPdDoz0A/HQbDaA==",
196 | "dev": true
197 | },
198 | "@babel/helper-remap-async-to-generator": {
199 | "version": "7.12.13",
200 | "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.12.13.tgz",
201 | "integrity": "sha512-Qa6PU9vNcj1NZacZZI1Mvwt+gXDH6CTfgAkSjeRMLE8HxtDK76+YDId6NQR+z7Rgd5arhD2cIbS74r0SxD6PDA==",
202 | "dev": true,
203 | "requires": {
204 | "@babel/helper-annotate-as-pure": "^7.12.13",
205 | "@babel/helper-wrap-function": "^7.12.13",
206 | "@babel/types": "^7.12.13"
207 | }
208 | },
209 | "@babel/helper-replace-supers": {
210 | "version": "7.12.13",
211 | "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.12.13.tgz",
212 | "integrity": "sha512-pctAOIAMVStI2TMLhozPKbf5yTEXc0OJa0eENheb4w09SrgOWEs+P4nTOZYJQCqs8JlErGLDPDJTiGIp3ygbLg==",
213 | "dev": true,
214 | "requires": {
215 | "@babel/helper-member-expression-to-functions": "^7.12.13",
216 | "@babel/helper-optimise-call-expression": "^7.12.13",
217 | "@babel/traverse": "^7.12.13",
218 | "@babel/types": "^7.12.13"
219 | }
220 | },
221 | "@babel/helper-simple-access": {
222 | "version": "7.12.13",
223 | "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.12.13.tgz",
224 | "integrity": "sha512-0ski5dyYIHEfwpWGx5GPWhH35j342JaflmCeQmsPWcrOQDtCN6C1zKAVRFVbK53lPW2c9TsuLLSUDf0tIGJ5hA==",
225 | "dev": true,
226 | "requires": {
227 | "@babel/types": "^7.12.13"
228 | }
229 | },
230 | "@babel/helper-skip-transparent-expression-wrappers": {
231 | "version": "7.12.1",
232 | "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.12.1.tgz",
233 | "integrity": "sha512-Mf5AUuhG1/OCChOJ/HcADmvcHM42WJockombn8ATJG3OnyiSxBK/Mm5x78BQWvmtXZKHgbjdGL2kin/HOLlZGA==",
234 | "dev": true,
235 | "requires": {
236 | "@babel/types": "^7.12.1"
237 | }
238 | },
239 | "@babel/helper-split-export-declaration": {
240 | "version": "7.12.13",
241 | "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.12.13.tgz",
242 | "integrity": "sha512-tCJDltF83htUtXx5NLcaDqRmknv652ZWCHyoTETf1CXYJdPC7nohZohjUgieXhv0hTJdRf2FjDueFehdNucpzg==",
243 | "dev": true,
244 | "requires": {
245 | "@babel/types": "^7.12.13"
246 | }
247 | },
248 | "@babel/helper-validator-identifier": {
249 | "version": "7.12.11",
250 | "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.12.11.tgz",
251 | "integrity": "sha512-np/lG3uARFybkoHokJUmf1QfEvRVCPbmQeUQpKow5cQ3xWrV9i3rUHodKDJPQfTVX61qKi+UdYk8kik84n7XOw==",
252 | "dev": true
253 | },
254 | "@babel/helper-validator-option": {
255 | "version": "7.12.11",
256 | "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.12.11.tgz",
257 | "integrity": "sha512-TBFCyj939mFSdeX7U7DDj32WtzYY7fDcalgq8v3fBZMNOJQNn7nOYzMaUCiPxPYfCup69mtIpqlKgMZLvQ8Xhw==",
258 | "dev": true
259 | },
260 | "@babel/helper-wrap-function": {
261 | "version": "7.12.13",
262 | "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.12.13.tgz",
263 | "integrity": "sha512-t0aZFEmBJ1LojdtJnhOaQEVejnzYhyjWHSsNSNo8vOYRbAJNh6r6GQF7pd36SqG7OKGbn+AewVQ/0IfYfIuGdw==",
264 | "dev": true,
265 | "requires": {
266 | "@babel/helper-function-name": "^7.12.13",
267 | "@babel/template": "^7.12.13",
268 | "@babel/traverse": "^7.12.13",
269 | "@babel/types": "^7.12.13"
270 | }
271 | },
272 | "@babel/helpers": {
273 | "version": "7.12.13",
274 | "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.12.13.tgz",
275 | "integrity": "sha512-oohVzLRZ3GQEk4Cjhfs9YkJA4TdIDTObdBEZGrd6F/T0GPSnuV6l22eMcxlvcvzVIPH3VTtxbseudM1zIE+rPQ==",
276 | "dev": true,
277 | "requires": {
278 | "@babel/template": "^7.12.13",
279 | "@babel/traverse": "^7.12.13",
280 | "@babel/types": "^7.12.13"
281 | }
282 | },
283 | "@babel/highlight": {
284 | "version": "7.12.13",
285 | "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.12.13.tgz",
286 | "integrity": "sha512-kocDQvIbgMKlWxXe9fof3TQ+gkIPOUSEYhJjqUjvKMez3krV7vbzYCDq39Oj11UAVK7JqPVGQPlgE85dPNlQww==",
287 | "dev": true,
288 | "requires": {
289 | "@babel/helper-validator-identifier": "^7.12.11",
290 | "chalk": "^2.0.0",
291 | "js-tokens": "^4.0.0"
292 | },
293 | "dependencies": {
294 | "chalk": {
295 | "version": "2.4.2",
296 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
297 | "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
298 | "dev": true,
299 | "requires": {
300 | "ansi-styles": "^3.2.1",
301 | "escape-string-regexp": "^1.0.5",
302 | "supports-color": "^5.3.0"
303 | }
304 | }
305 | }
306 | },
307 | "@babel/parser": {
308 | "version": "7.12.15",
309 | "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.12.15.tgz",
310 | "integrity": "sha512-AQBOU2Z9kWwSZMd6lNjCX0GUgFonL1wAM1db8L8PMk9UDaGsRCArBkU4Sc+UCM3AE4hjbXx+h58Lb3QT4oRmrA==",
311 | "dev": true
312 | },
313 | "@babel/plugin-proposal-async-generator-functions": {
314 | "version": "7.12.13",
315 | "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.12.13.tgz",
316 | "integrity": "sha512-1KH46Hx4WqP77f978+5Ye/VUbuwQld2hph70yaw2hXS2v7ER2f3nlpNMu909HO2rbvP0NKLlMVDPh9KXklVMhA==",
317 | "dev": true,
318 | "requires": {
319 | "@babel/helper-plugin-utils": "^7.12.13",
320 | "@babel/helper-remap-async-to-generator": "^7.12.13",
321 | "@babel/plugin-syntax-async-generators": "^7.8.0"
322 | }
323 | },
324 | "@babel/plugin-proposal-class-properties": {
325 | "version": "7.12.13",
326 | "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.12.13.tgz",
327 | "integrity": "sha512-8SCJ0Ddrpwv4T7Gwb33EmW1V9PY5lggTO+A8WjyIwxrSHDUyBw4MtF96ifn1n8H806YlxbVCoKXbbmzD6RD+cA==",
328 | "dev": true,
329 | "requires": {
330 | "@babel/helper-create-class-features-plugin": "^7.12.13",
331 | "@babel/helper-plugin-utils": "^7.12.13"
332 | }
333 | },
334 | "@babel/plugin-proposal-dynamic-import": {
335 | "version": "7.12.1",
336 | "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.12.1.tgz",
337 | "integrity": "sha512-a4rhUSZFuq5W8/OO8H7BL5zspjnc1FLd9hlOxIK/f7qG4a0qsqk8uvF/ywgBA8/OmjsapjpvaEOYItfGG1qIvQ==",
338 | "dev": true,
339 | "requires": {
340 | "@babel/helper-plugin-utils": "^7.10.4",
341 | "@babel/plugin-syntax-dynamic-import": "^7.8.0"
342 | }
343 | },
344 | "@babel/plugin-proposal-export-namespace-from": {
345 | "version": "7.12.13",
346 | "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.12.13.tgz",
347 | "integrity": "sha512-INAgtFo4OnLN3Y/j0VwAgw3HDXcDtX+C/erMvWzuV9v71r7urb6iyMXu7eM9IgLr1ElLlOkaHjJ0SbCmdOQ3Iw==",
348 | "dev": true,
349 | "requires": {
350 | "@babel/helper-plugin-utils": "^7.12.13",
351 | "@babel/plugin-syntax-export-namespace-from": "^7.8.3"
352 | }
353 | },
354 | "@babel/plugin-proposal-json-strings": {
355 | "version": "7.12.13",
356 | "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.12.13.tgz",
357 | "integrity": "sha512-v9eEi4GiORDg8x+Dmi5r8ibOe0VXoKDeNPYcTTxdGN4eOWikrJfDJCJrr1l5gKGvsNyGJbrfMftC2dTL6oz7pg==",
358 | "dev": true,
359 | "requires": {
360 | "@babel/helper-plugin-utils": "^7.12.13",
361 | "@babel/plugin-syntax-json-strings": "^7.8.0"
362 | }
363 | },
364 | "@babel/plugin-proposal-logical-assignment-operators": {
365 | "version": "7.12.13",
366 | "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.12.13.tgz",
367 | "integrity": "sha512-fqmiD3Lz7jVdK6kabeSr1PZlWSUVqSitmHEe3Z00dtGTKieWnX9beafvavc32kjORa5Bai4QNHgFDwWJP+WtSQ==",
368 | "dev": true,
369 | "requires": {
370 | "@babel/helper-plugin-utils": "^7.12.13",
371 | "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4"
372 | }
373 | },
374 | "@babel/plugin-proposal-nullish-coalescing-operator": {
375 | "version": "7.12.13",
376 | "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.12.13.tgz",
377 | "integrity": "sha512-Qoxpy+OxhDBI5kRqliJFAl4uWXk3Bn24WeFstPH0iLymFehSAUR8MHpqU7njyXv/qbo7oN6yTy5bfCmXdKpo1Q==",
378 | "dev": true,
379 | "requires": {
380 | "@babel/helper-plugin-utils": "^7.12.13",
381 | "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.0"
382 | }
383 | },
384 | "@babel/plugin-proposal-numeric-separator": {
385 | "version": "7.12.13",
386 | "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.12.13.tgz",
387 | "integrity": "sha512-O1jFia9R8BUCl3ZGB7eitaAPu62TXJRHn7rh+ojNERCFyqRwJMTmhz+tJ+k0CwI6CLjX/ee4qW74FSqlq9I35w==",
388 | "dev": true,
389 | "requires": {
390 | "@babel/helper-plugin-utils": "^7.12.13",
391 | "@babel/plugin-syntax-numeric-separator": "^7.10.4"
392 | }
393 | },
394 | "@babel/plugin-proposal-object-rest-spread": {
395 | "version": "7.12.13",
396 | "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.12.13.tgz",
397 | "integrity": "sha512-WvA1okB/0OS/N3Ldb3sziSrXg6sRphsBgqiccfcQq7woEn5wQLNX82Oc4PlaFcdwcWHuQXAtb8ftbS8Fbsg/sg==",
398 | "dev": true,
399 | "requires": {
400 | "@babel/helper-plugin-utils": "^7.12.13",
401 | "@babel/plugin-syntax-object-rest-spread": "^7.8.0",
402 | "@babel/plugin-transform-parameters": "^7.12.13"
403 | }
404 | },
405 | "@babel/plugin-proposal-optional-catch-binding": {
406 | "version": "7.12.13",
407 | "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.12.13.tgz",
408 | "integrity": "sha512-9+MIm6msl9sHWg58NvqpNpLtuFbmpFYk37x8kgnGzAHvX35E1FyAwSUt5hIkSoWJFSAH+iwU8bJ4fcD1zKXOzg==",
409 | "dev": true,
410 | "requires": {
411 | "@babel/helper-plugin-utils": "^7.12.13",
412 | "@babel/plugin-syntax-optional-catch-binding": "^7.8.0"
413 | }
414 | },
415 | "@babel/plugin-proposal-optional-chaining": {
416 | "version": "7.12.13",
417 | "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.12.13.tgz",
418 | "integrity": "sha512-0ZwjGfTcnZqyV3y9DSD1Yk3ebp+sIUpT2YDqP8hovzaNZnQq2Kd7PEqa6iOIUDBXBt7Jl3P7YAcEIL5Pz8u09Q==",
419 | "dev": true,
420 | "requires": {
421 | "@babel/helper-plugin-utils": "^7.12.13",
422 | "@babel/helper-skip-transparent-expression-wrappers": "^7.12.1",
423 | "@babel/plugin-syntax-optional-chaining": "^7.8.0"
424 | }
425 | },
426 | "@babel/plugin-proposal-private-methods": {
427 | "version": "7.12.13",
428 | "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.12.13.tgz",
429 | "integrity": "sha512-sV0V57uUwpauixvR7s2o75LmwJI6JECwm5oPUY5beZB1nBl2i37hc7CJGqB5G+58fur5Y6ugvl3LRONk5x34rg==",
430 | "dev": true,
431 | "requires": {
432 | "@babel/helper-create-class-features-plugin": "^7.12.13",
433 | "@babel/helper-plugin-utils": "^7.12.13"
434 | }
435 | },
436 | "@babel/plugin-proposal-unicode-property-regex": {
437 | "version": "7.12.13",
438 | "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.12.13.tgz",
439 | "integrity": "sha512-XyJmZidNfofEkqFV5VC/bLabGmO5QzenPO/YOfGuEbgU+2sSwMmio3YLb4WtBgcmmdwZHyVyv8on77IUjQ5Gvg==",
440 | "dev": true,
441 | "requires": {
442 | "@babel/helper-create-regexp-features-plugin": "^7.12.13",
443 | "@babel/helper-plugin-utils": "^7.12.13"
444 | }
445 | },
446 | "@babel/plugin-syntax-async-generators": {
447 | "version": "7.8.4",
448 | "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz",
449 | "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==",
450 | "dev": true,
451 | "requires": {
452 | "@babel/helper-plugin-utils": "^7.8.0"
453 | }
454 | },
455 | "@babel/plugin-syntax-class-properties": {
456 | "version": "7.12.13",
457 | "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz",
458 | "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==",
459 | "dev": true,
460 | "requires": {
461 | "@babel/helper-plugin-utils": "^7.12.13"
462 | }
463 | },
464 | "@babel/plugin-syntax-dynamic-import": {
465 | "version": "7.8.3",
466 | "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz",
467 | "integrity": "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==",
468 | "dev": true,
469 | "requires": {
470 | "@babel/helper-plugin-utils": "^7.8.0"
471 | }
472 | },
473 | "@babel/plugin-syntax-export-namespace-from": {
474 | "version": "7.8.3",
475 | "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz",
476 | "integrity": "sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==",
477 | "dev": true,
478 | "requires": {
479 | "@babel/helper-plugin-utils": "^7.8.3"
480 | }
481 | },
482 | "@babel/plugin-syntax-json-strings": {
483 | "version": "7.8.3",
484 | "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz",
485 | "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==",
486 | "dev": true,
487 | "requires": {
488 | "@babel/helper-plugin-utils": "^7.8.0"
489 | }
490 | },
491 | "@babel/plugin-syntax-logical-assignment-operators": {
492 | "version": "7.10.4",
493 | "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz",
494 | "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==",
495 | "dev": true,
496 | "requires": {
497 | "@babel/helper-plugin-utils": "^7.10.4"
498 | }
499 | },
500 | "@babel/plugin-syntax-nullish-coalescing-operator": {
501 | "version": "7.8.3",
502 | "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz",
503 | "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==",
504 | "dev": true,
505 | "requires": {
506 | "@babel/helper-plugin-utils": "^7.8.0"
507 | }
508 | },
509 | "@babel/plugin-syntax-numeric-separator": {
510 | "version": "7.10.4",
511 | "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz",
512 | "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==",
513 | "dev": true,
514 | "requires": {
515 | "@babel/helper-plugin-utils": "^7.10.4"
516 | }
517 | },
518 | "@babel/plugin-syntax-object-rest-spread": {
519 | "version": "7.8.3",
520 | "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz",
521 | "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==",
522 | "dev": true,
523 | "requires": {
524 | "@babel/helper-plugin-utils": "^7.8.0"
525 | }
526 | },
527 | "@babel/plugin-syntax-optional-catch-binding": {
528 | "version": "7.8.3",
529 | "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz",
530 | "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==",
531 | "dev": true,
532 | "requires": {
533 | "@babel/helper-plugin-utils": "^7.8.0"
534 | }
535 | },
536 | "@babel/plugin-syntax-optional-chaining": {
537 | "version": "7.8.3",
538 | "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz",
539 | "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==",
540 | "dev": true,
541 | "requires": {
542 | "@babel/helper-plugin-utils": "^7.8.0"
543 | }
544 | },
545 | "@babel/plugin-syntax-top-level-await": {
546 | "version": "7.12.13",
547 | "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.12.13.tgz",
548 | "integrity": "sha512-A81F9pDwyS7yM//KwbCSDqy3Uj4NMIurtplxphWxoYtNPov7cJsDkAFNNyVlIZ3jwGycVsurZ+LtOA8gZ376iQ==",
549 | "dev": true,
550 | "requires": {
551 | "@babel/helper-plugin-utils": "^7.12.13"
552 | }
553 | },
554 | "@babel/plugin-transform-arrow-functions": {
555 | "version": "7.12.13",
556 | "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.12.13.tgz",
557 | "integrity": "sha512-tBtuN6qtCTd+iHzVZVOMNp+L04iIJBpqkdY42tWbmjIT5wvR2kx7gxMBsyhQtFzHwBbyGi9h8J8r9HgnOpQHxg==",
558 | "dev": true,
559 | "requires": {
560 | "@babel/helper-plugin-utils": "^7.12.13"
561 | }
562 | },
563 | "@babel/plugin-transform-async-to-generator": {
564 | "version": "7.12.13",
565 | "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.12.13.tgz",
566 | "integrity": "sha512-psM9QHcHaDr+HZpRuJcE1PXESuGWSCcbiGFFhhwfzdbTxaGDVzuVtdNYliAwcRo3GFg0Bc8MmI+AvIGYIJG04A==",
567 | "dev": true,
568 | "requires": {
569 | "@babel/helper-module-imports": "^7.12.13",
570 | "@babel/helper-plugin-utils": "^7.12.13",
571 | "@babel/helper-remap-async-to-generator": "^7.12.13"
572 | }
573 | },
574 | "@babel/plugin-transform-block-scoped-functions": {
575 | "version": "7.12.13",
576 | "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.12.13.tgz",
577 | "integrity": "sha512-zNyFqbc3kI/fVpqwfqkg6RvBgFpC4J18aKKMmv7KdQ/1GgREapSJAykLMVNwfRGO3BtHj3YQZl8kxCXPcVMVeg==",
578 | "dev": true,
579 | "requires": {
580 | "@babel/helper-plugin-utils": "^7.12.13"
581 | }
582 | },
583 | "@babel/plugin-transform-block-scoping": {
584 | "version": "7.12.13",
585 | "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.12.13.tgz",
586 | "integrity": "sha512-Pxwe0iqWJX4fOOM2kEZeUuAxHMWb9nK+9oh5d11bsLoB0xMg+mkDpt0eYuDZB7ETrY9bbcVlKUGTOGWy7BHsMQ==",
587 | "dev": true,
588 | "requires": {
589 | "@babel/helper-plugin-utils": "^7.12.13"
590 | }
591 | },
592 | "@babel/plugin-transform-classes": {
593 | "version": "7.12.13",
594 | "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.12.13.tgz",
595 | "integrity": "sha512-cqZlMlhCC1rVnxE5ZGMtIb896ijL90xppMiuWXcwcOAuFczynpd3KYemb91XFFPi3wJSe/OcrX9lXoowatkkxA==",
596 | "dev": true,
597 | "requires": {
598 | "@babel/helper-annotate-as-pure": "^7.12.13",
599 | "@babel/helper-function-name": "^7.12.13",
600 | "@babel/helper-optimise-call-expression": "^7.12.13",
601 | "@babel/helper-plugin-utils": "^7.12.13",
602 | "@babel/helper-replace-supers": "^7.12.13",
603 | "@babel/helper-split-export-declaration": "^7.12.13",
604 | "globals": "^11.1.0"
605 | }
606 | },
607 | "@babel/plugin-transform-computed-properties": {
608 | "version": "7.12.13",
609 | "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.12.13.tgz",
610 | "integrity": "sha512-dDfuROUPGK1mTtLKyDPUavmj2b6kFu82SmgpztBFEO974KMjJT+Ytj3/oWsTUMBmgPcp9J5Pc1SlcAYRpJ2hRA==",
611 | "dev": true,
612 | "requires": {
613 | "@babel/helper-plugin-utils": "^7.12.13"
614 | }
615 | },
616 | "@babel/plugin-transform-destructuring": {
617 | "version": "7.12.13",
618 | "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.12.13.tgz",
619 | "integrity": "sha512-Dn83KykIFzjhA3FDPA1z4N+yfF3btDGhjnJwxIj0T43tP0flCujnU8fKgEkf0C1biIpSv9NZegPBQ1J6jYkwvQ==",
620 | "dev": true,
621 | "requires": {
622 | "@babel/helper-plugin-utils": "^7.12.13"
623 | }
624 | },
625 | "@babel/plugin-transform-dotall-regex": {
626 | "version": "7.12.13",
627 | "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.12.13.tgz",
628 | "integrity": "sha512-foDrozE65ZFdUC2OfgeOCrEPTxdB3yjqxpXh8CH+ipd9CHd4s/iq81kcUpyH8ACGNEPdFqbtzfgzbT/ZGlbDeQ==",
629 | "dev": true,
630 | "requires": {
631 | "@babel/helper-create-regexp-features-plugin": "^7.12.13",
632 | "@babel/helper-plugin-utils": "^7.12.13"
633 | }
634 | },
635 | "@babel/plugin-transform-duplicate-keys": {
636 | "version": "7.12.13",
637 | "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.12.13.tgz",
638 | "integrity": "sha512-NfADJiiHdhLBW3pulJlJI2NB0t4cci4WTZ8FtdIuNc2+8pslXdPtRRAEWqUY+m9kNOk2eRYbTAOipAxlrOcwwQ==",
639 | "dev": true,
640 | "requires": {
641 | "@babel/helper-plugin-utils": "^7.12.13"
642 | }
643 | },
644 | "@babel/plugin-transform-exponentiation-operator": {
645 | "version": "7.12.13",
646 | "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.12.13.tgz",
647 | "integrity": "sha512-fbUelkM1apvqez/yYx1/oICVnGo2KM5s63mhGylrmXUxK/IAXSIf87QIxVfZldWf4QsOafY6vV3bX8aMHSvNrA==",
648 | "dev": true,
649 | "requires": {
650 | "@babel/helper-builder-binary-assignment-operator-visitor": "^7.12.13",
651 | "@babel/helper-plugin-utils": "^7.12.13"
652 | }
653 | },
654 | "@babel/plugin-transform-for-of": {
655 | "version": "7.12.13",
656 | "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.12.13.tgz",
657 | "integrity": "sha512-xCbdgSzXYmHGyVX3+BsQjcd4hv4vA/FDy7Kc8eOpzKmBBPEOTurt0w5fCRQaGl+GSBORKgJdstQ1rHl4jbNseQ==",
658 | "dev": true,
659 | "requires": {
660 | "@babel/helper-plugin-utils": "^7.12.13"
661 | }
662 | },
663 | "@babel/plugin-transform-function-name": {
664 | "version": "7.12.13",
665 | "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.12.13.tgz",
666 | "integrity": "sha512-6K7gZycG0cmIwwF7uMK/ZqeCikCGVBdyP2J5SKNCXO5EOHcqi+z7Jwf8AmyDNcBgxET8DrEtCt/mPKPyAzXyqQ==",
667 | "dev": true,
668 | "requires": {
669 | "@babel/helper-function-name": "^7.12.13",
670 | "@babel/helper-plugin-utils": "^7.12.13"
671 | }
672 | },
673 | "@babel/plugin-transform-literals": {
674 | "version": "7.12.13",
675 | "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.12.13.tgz",
676 | "integrity": "sha512-FW+WPjSR7hiUxMcKqyNjP05tQ2kmBCdpEpZHY1ARm96tGQCCBvXKnpjILtDplUnJ/eHZ0lALLM+d2lMFSpYJrQ==",
677 | "dev": true,
678 | "requires": {
679 | "@babel/helper-plugin-utils": "^7.12.13"
680 | }
681 | },
682 | "@babel/plugin-transform-member-expression-literals": {
683 | "version": "7.12.13",
684 | "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.12.13.tgz",
685 | "integrity": "sha512-kxLkOsg8yir4YeEPHLuO2tXP9R/gTjpuTOjshqSpELUN3ZAg2jfDnKUvzzJxObun38sw3wm4Uu69sX/zA7iRvg==",
686 | "dev": true,
687 | "requires": {
688 | "@babel/helper-plugin-utils": "^7.12.13"
689 | }
690 | },
691 | "@babel/plugin-transform-modules-amd": {
692 | "version": "7.12.13",
693 | "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.12.13.tgz",
694 | "integrity": "sha512-JHLOU0o81m5UqG0Ulz/fPC68/v+UTuGTWaZBUwpEk1fYQ1D9LfKV6MPn4ttJKqRo5Lm460fkzjLTL4EHvCprvA==",
695 | "dev": true,
696 | "requires": {
697 | "@babel/helper-module-transforms": "^7.12.13",
698 | "@babel/helper-plugin-utils": "^7.12.13",
699 | "babel-plugin-dynamic-import-node": "^2.3.3"
700 | }
701 | },
702 | "@babel/plugin-transform-modules-commonjs": {
703 | "version": "7.12.13",
704 | "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.12.13.tgz",
705 | "integrity": "sha512-OGQoeVXVi1259HjuoDnsQMlMkT9UkZT9TpXAsqWplS/M0N1g3TJAn/ByOCeQu7mfjc5WpSsRU+jV1Hd89ts0kQ==",
706 | "dev": true,
707 | "requires": {
708 | "@babel/helper-module-transforms": "^7.12.13",
709 | "@babel/helper-plugin-utils": "^7.12.13",
710 | "@babel/helper-simple-access": "^7.12.13",
711 | "babel-plugin-dynamic-import-node": "^2.3.3"
712 | }
713 | },
714 | "@babel/plugin-transform-modules-systemjs": {
715 | "version": "7.12.13",
716 | "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.12.13.tgz",
717 | "integrity": "sha512-aHfVjhZ8QekaNF/5aNdStCGzwTbU7SI5hUybBKlMzqIMC7w7Ho8hx5a4R/DkTHfRfLwHGGxSpFt9BfxKCoXKoA==",
718 | "dev": true,
719 | "requires": {
720 | "@babel/helper-hoist-variables": "^7.12.13",
721 | "@babel/helper-module-transforms": "^7.12.13",
722 | "@babel/helper-plugin-utils": "^7.12.13",
723 | "@babel/helper-validator-identifier": "^7.12.11",
724 | "babel-plugin-dynamic-import-node": "^2.3.3"
725 | }
726 | },
727 | "@babel/plugin-transform-modules-umd": {
728 | "version": "7.12.13",
729 | "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.12.13.tgz",
730 | "integrity": "sha512-BgZndyABRML4z6ibpi7Z98m4EVLFI9tVsZDADC14AElFaNHHBcJIovflJ6wtCqFxwy2YJ1tJhGRsr0yLPKoN+w==",
731 | "dev": true,
732 | "requires": {
733 | "@babel/helper-module-transforms": "^7.12.13",
734 | "@babel/helper-plugin-utils": "^7.12.13"
735 | }
736 | },
737 | "@babel/plugin-transform-named-capturing-groups-regex": {
738 | "version": "7.12.13",
739 | "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.12.13.tgz",
740 | "integrity": "sha512-Xsm8P2hr5hAxyYblrfACXpQKdQbx4m2df9/ZZSQ8MAhsadw06+jW7s9zsSw6he+mJZXRlVMyEnVktJo4zjk1WA==",
741 | "dev": true,
742 | "requires": {
743 | "@babel/helper-create-regexp-features-plugin": "^7.12.13"
744 | }
745 | },
746 | "@babel/plugin-transform-new-target": {
747 | "version": "7.12.13",
748 | "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.12.13.tgz",
749 | "integrity": "sha512-/KY2hbLxrG5GTQ9zzZSc3xWiOy379pIETEhbtzwZcw9rvuaVV4Fqy7BYGYOWZnaoXIQYbbJ0ziXLa/sKcGCYEQ==",
750 | "dev": true,
751 | "requires": {
752 | "@babel/helper-plugin-utils": "^7.12.13"
753 | }
754 | },
755 | "@babel/plugin-transform-object-super": {
756 | "version": "7.12.13",
757 | "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.12.13.tgz",
758 | "integrity": "sha512-JzYIcj3XtYspZDV8j9ulnoMPZZnF/Cj0LUxPOjR89BdBVx+zYJI9MdMIlUZjbXDX+6YVeS6I3e8op+qQ3BYBoQ==",
759 | "dev": true,
760 | "requires": {
761 | "@babel/helper-plugin-utils": "^7.12.13",
762 | "@babel/helper-replace-supers": "^7.12.13"
763 | }
764 | },
765 | "@babel/plugin-transform-parameters": {
766 | "version": "7.12.13",
767 | "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.12.13.tgz",
768 | "integrity": "sha512-e7QqwZalNiBRHCpJg/P8s/VJeSRYgmtWySs1JwvfwPqhBbiWfOcHDKdeAi6oAyIimoKWBlwc8oTgbZHdhCoVZA==",
769 | "dev": true,
770 | "requires": {
771 | "@babel/helper-plugin-utils": "^7.12.13"
772 | }
773 | },
774 | "@babel/plugin-transform-property-literals": {
775 | "version": "7.12.13",
776 | "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.12.13.tgz",
777 | "integrity": "sha512-nqVigwVan+lR+g8Fj8Exl0UQX2kymtjcWfMOYM1vTYEKujeyv2SkMgazf2qNcK7l4SDiKyTA/nHCPqL4e2zo1A==",
778 | "dev": true,
779 | "requires": {
780 | "@babel/helper-plugin-utils": "^7.12.13"
781 | }
782 | },
783 | "@babel/plugin-transform-regenerator": {
784 | "version": "7.12.13",
785 | "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.12.13.tgz",
786 | "integrity": "sha512-lxb2ZAvSLyJ2PEe47hoGWPmW22v7CtSl9jW8mingV4H2sEX/JOcrAj2nPuGWi56ERUm2bUpjKzONAuT6HCn2EA==",
787 | "dev": true,
788 | "requires": {
789 | "regenerator-transform": "^0.14.2"
790 | }
791 | },
792 | "@babel/plugin-transform-reserved-words": {
793 | "version": "7.12.13",
794 | "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.12.13.tgz",
795 | "integrity": "sha512-xhUPzDXxZN1QfiOy/I5tyye+TRz6lA7z6xaT4CLOjPRMVg1ldRf0LHw0TDBpYL4vG78556WuHdyO9oi5UmzZBg==",
796 | "dev": true,
797 | "requires": {
798 | "@babel/helper-plugin-utils": "^7.12.13"
799 | }
800 | },
801 | "@babel/plugin-transform-runtime": {
802 | "version": "7.12.15",
803 | "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.12.15.tgz",
804 | "integrity": "sha512-OwptMSRnRWJo+tJ9v9wgAf72ydXWfYSXWhnQjZing8nGZSDFqU1MBleKM3+DriKkcbv7RagA8gVeB0A1PNlNow==",
805 | "dev": true,
806 | "requires": {
807 | "@babel/helper-module-imports": "^7.12.13",
808 | "@babel/helper-plugin-utils": "^7.12.13",
809 | "semver": "^5.5.1"
810 | }
811 | },
812 | "@babel/plugin-transform-shorthand-properties": {
813 | "version": "7.12.13",
814 | "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.12.13.tgz",
815 | "integrity": "sha512-xpL49pqPnLtf0tVluuqvzWIgLEhuPpZzvs2yabUHSKRNlN7ScYU7aMlmavOeyXJZKgZKQRBlh8rHbKiJDraTSw==",
816 | "dev": true,
817 | "requires": {
818 | "@babel/helper-plugin-utils": "^7.12.13"
819 | }
820 | },
821 | "@babel/plugin-transform-spread": {
822 | "version": "7.12.13",
823 | "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.12.13.tgz",
824 | "integrity": "sha512-dUCrqPIowjqk5pXsx1zPftSq4sT0aCeZVAxhdgs3AMgyaDmoUT0G+5h3Dzja27t76aUEIJWlFgPJqJ/d4dbTtg==",
825 | "dev": true,
826 | "requires": {
827 | "@babel/helper-plugin-utils": "^7.12.13",
828 | "@babel/helper-skip-transparent-expression-wrappers": "^7.12.1"
829 | }
830 | },
831 | "@babel/plugin-transform-sticky-regex": {
832 | "version": "7.12.13",
833 | "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.12.13.tgz",
834 | "integrity": "sha512-Jc3JSaaWT8+fr7GRvQP02fKDsYk4K/lYwWq38r/UGfaxo89ajud321NH28KRQ7xy1Ybc0VUE5Pz8psjNNDUglg==",
835 | "dev": true,
836 | "requires": {
837 | "@babel/helper-plugin-utils": "^7.12.13"
838 | }
839 | },
840 | "@babel/plugin-transform-template-literals": {
841 | "version": "7.12.13",
842 | "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.12.13.tgz",
843 | "integrity": "sha512-arIKlWYUgmNsF28EyfmiQHJLJFlAJNYkuQO10jL46ggjBpeb2re1P9K9YGxNJB45BqTbaslVysXDYm/g3sN/Qg==",
844 | "dev": true,
845 | "requires": {
846 | "@babel/helper-plugin-utils": "^7.12.13"
847 | }
848 | },
849 | "@babel/plugin-transform-typeof-symbol": {
850 | "version": "7.12.13",
851 | "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.12.13.tgz",
852 | "integrity": "sha512-eKv/LmUJpMnu4npgfvs3LiHhJua5fo/CysENxa45YCQXZwKnGCQKAg87bvoqSW1fFT+HA32l03Qxsm8ouTY3ZQ==",
853 | "dev": true,
854 | "requires": {
855 | "@babel/helper-plugin-utils": "^7.12.13"
856 | }
857 | },
858 | "@babel/plugin-transform-unicode-escapes": {
859 | "version": "7.12.13",
860 | "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.12.13.tgz",
861 | "integrity": "sha512-0bHEkdwJ/sN/ikBHfSmOXPypN/beiGqjo+o4/5K+vxEFNPRPdImhviPakMKG4x96l85emoa0Z6cDflsdBusZbw==",
862 | "dev": true,
863 | "requires": {
864 | "@babel/helper-plugin-utils": "^7.12.13"
865 | }
866 | },
867 | "@babel/plugin-transform-unicode-regex": {
868 | "version": "7.12.13",
869 | "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.12.13.tgz",
870 | "integrity": "sha512-mDRzSNY7/zopwisPZ5kM9XKCfhchqIYwAKRERtEnhYscZB79VRekuRSoYbN0+KVe3y8+q1h6A4svXtP7N+UoCA==",
871 | "dev": true,
872 | "requires": {
873 | "@babel/helper-create-regexp-features-plugin": "^7.12.13",
874 | "@babel/helper-plugin-utils": "^7.12.13"
875 | }
876 | },
877 | "@babel/preset-env": {
878 | "version": "7.12.13",
879 | "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.12.13.tgz",
880 | "integrity": "sha512-JUVlizG8SoFTz4LmVUL8++aVwzwxcvey3N0j1tRbMAXVEy95uQ/cnEkmEKHN00Bwq4voAV3imQGnQvpkLAxsrw==",
881 | "dev": true,
882 | "requires": {
883 | "@babel/compat-data": "^7.12.13",
884 | "@babel/helper-compilation-targets": "^7.12.13",
885 | "@babel/helper-module-imports": "^7.12.13",
886 | "@babel/helper-plugin-utils": "^7.12.13",
887 | "@babel/helper-validator-option": "^7.12.11",
888 | "@babel/plugin-proposal-async-generator-functions": "^7.12.13",
889 | "@babel/plugin-proposal-class-properties": "^7.12.13",
890 | "@babel/plugin-proposal-dynamic-import": "^7.12.1",
891 | "@babel/plugin-proposal-export-namespace-from": "^7.12.13",
892 | "@babel/plugin-proposal-json-strings": "^7.12.13",
893 | "@babel/plugin-proposal-logical-assignment-operators": "^7.12.13",
894 | "@babel/plugin-proposal-nullish-coalescing-operator": "^7.12.13",
895 | "@babel/plugin-proposal-numeric-separator": "^7.12.13",
896 | "@babel/plugin-proposal-object-rest-spread": "^7.12.13",
897 | "@babel/plugin-proposal-optional-catch-binding": "^7.12.13",
898 | "@babel/plugin-proposal-optional-chaining": "^7.12.13",
899 | "@babel/plugin-proposal-private-methods": "^7.12.13",
900 | "@babel/plugin-proposal-unicode-property-regex": "^7.12.13",
901 | "@babel/plugin-syntax-async-generators": "^7.8.0",
902 | "@babel/plugin-syntax-class-properties": "^7.12.13",
903 | "@babel/plugin-syntax-dynamic-import": "^7.8.0",
904 | "@babel/plugin-syntax-export-namespace-from": "^7.8.3",
905 | "@babel/plugin-syntax-json-strings": "^7.8.0",
906 | "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4",
907 | "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.0",
908 | "@babel/plugin-syntax-numeric-separator": "^7.10.4",
909 | "@babel/plugin-syntax-object-rest-spread": "^7.8.0",
910 | "@babel/plugin-syntax-optional-catch-binding": "^7.8.0",
911 | "@babel/plugin-syntax-optional-chaining": "^7.8.0",
912 | "@babel/plugin-syntax-top-level-await": "^7.12.13",
913 | "@babel/plugin-transform-arrow-functions": "^7.12.13",
914 | "@babel/plugin-transform-async-to-generator": "^7.12.13",
915 | "@babel/plugin-transform-block-scoped-functions": "^7.12.13",
916 | "@babel/plugin-transform-block-scoping": "^7.12.13",
917 | "@babel/plugin-transform-classes": "^7.12.13",
918 | "@babel/plugin-transform-computed-properties": "^7.12.13",
919 | "@babel/plugin-transform-destructuring": "^7.12.13",
920 | "@babel/plugin-transform-dotall-regex": "^7.12.13",
921 | "@babel/plugin-transform-duplicate-keys": "^7.12.13",
922 | "@babel/plugin-transform-exponentiation-operator": "^7.12.13",
923 | "@babel/plugin-transform-for-of": "^7.12.13",
924 | "@babel/plugin-transform-function-name": "^7.12.13",
925 | "@babel/plugin-transform-literals": "^7.12.13",
926 | "@babel/plugin-transform-member-expression-literals": "^7.12.13",
927 | "@babel/plugin-transform-modules-amd": "^7.12.13",
928 | "@babel/plugin-transform-modules-commonjs": "^7.12.13",
929 | "@babel/plugin-transform-modules-systemjs": "^7.12.13",
930 | "@babel/plugin-transform-modules-umd": "^7.12.13",
931 | "@babel/plugin-transform-named-capturing-groups-regex": "^7.12.13",
932 | "@babel/plugin-transform-new-target": "^7.12.13",
933 | "@babel/plugin-transform-object-super": "^7.12.13",
934 | "@babel/plugin-transform-parameters": "^7.12.13",
935 | "@babel/plugin-transform-property-literals": "^7.12.13",
936 | "@babel/plugin-transform-regenerator": "^7.12.13",
937 | "@babel/plugin-transform-reserved-words": "^7.12.13",
938 | "@babel/plugin-transform-shorthand-properties": "^7.12.13",
939 | "@babel/plugin-transform-spread": "^7.12.13",
940 | "@babel/plugin-transform-sticky-regex": "^7.12.13",
941 | "@babel/plugin-transform-template-literals": "^7.12.13",
942 | "@babel/plugin-transform-typeof-symbol": "^7.12.13",
943 | "@babel/plugin-transform-unicode-escapes": "^7.12.13",
944 | "@babel/plugin-transform-unicode-regex": "^7.12.13",
945 | "@babel/preset-modules": "^0.1.3",
946 | "@babel/types": "^7.12.13",
947 | "core-js-compat": "^3.8.0",
948 | "semver": "^5.5.0"
949 | }
950 | },
951 | "@babel/preset-modules": {
952 | "version": "0.1.4",
953 | "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.4.tgz",
954 | "integrity": "sha512-J36NhwnfdzpmH41M1DrnkkgAqhZaqr/NBdPfQ677mLzlaXo+oDiv1deyCDtgAhz8p328otdob0Du7+xgHGZbKg==",
955 | "dev": true,
956 | "requires": {
957 | "@babel/helper-plugin-utils": "^7.0.0",
958 | "@babel/plugin-proposal-unicode-property-regex": "^7.4.4",
959 | "@babel/plugin-transform-dotall-regex": "^7.4.4",
960 | "@babel/types": "^7.4.4",
961 | "esutils": "^2.0.2"
962 | }
963 | },
964 | "@babel/runtime": {
965 | "version": "7.12.13",
966 | "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.12.13.tgz",
967 | "integrity": "sha512-8+3UMPBrjFa/6TtKi/7sehPKqfAm4g6K+YQjyyFOLUTxzOngcRZTlAVY8sc2CORJYqdHQY8gRPHmn+qo15rCBw==",
968 | "dev": true,
969 | "requires": {
970 | "regenerator-runtime": "^0.13.4"
971 | }
972 | },
973 | "@babel/template": {
974 | "version": "7.12.13",
975 | "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.12.13.tgz",
976 | "integrity": "sha512-/7xxiGA57xMo/P2GVvdEumr8ONhFOhfgq2ihK3h1e6THqzTAkHbkXgB0xI9yeTfIUoH3+oAeHhqm/I43OTbbjA==",
977 | "dev": true,
978 | "requires": {
979 | "@babel/code-frame": "^7.12.13",
980 | "@babel/parser": "^7.12.13",
981 | "@babel/types": "^7.12.13"
982 | }
983 | },
984 | "@babel/traverse": {
985 | "version": "7.12.13",
986 | "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.12.13.tgz",
987 | "integrity": "sha512-3Zb4w7eE/OslI0fTp8c7b286/cQps3+vdLW3UcwC8VSJC6GbKn55aeVVu2QJNuCDoeKyptLOFrPq8WqZZBodyA==",
988 | "dev": true,
989 | "requires": {
990 | "@babel/code-frame": "^7.12.13",
991 | "@babel/generator": "^7.12.13",
992 | "@babel/helper-function-name": "^7.12.13",
993 | "@babel/helper-split-export-declaration": "^7.12.13",
994 | "@babel/parser": "^7.12.13",
995 | "@babel/types": "^7.12.13",
996 | "debug": "^4.1.0",
997 | "globals": "^11.1.0",
998 | "lodash": "^4.17.19"
999 | }
1000 | },
1001 | "@babel/types": {
1002 | "version": "7.12.13",
1003 | "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.12.13.tgz",
1004 | "integrity": "sha512-oKrdZTld2im1z8bDwTOQvUbxKwE+854zc16qWZQlcTqMN00pWxHQ4ZeOq0yDMnisOpRykH2/5Qqcrk/OlbAjiQ==",
1005 | "dev": true,
1006 | "requires": {
1007 | "@babel/helper-validator-identifier": "^7.12.11",
1008 | "lodash": "^4.17.19",
1009 | "to-fast-properties": "^2.0.0"
1010 | }
1011 | },
1012 | "@mdn/browser-compat-data": {
1013 | "version": "2.0.7",
1014 | "resolved": "https://registry.npmjs.org/@mdn/browser-compat-data/-/browser-compat-data-2.0.7.tgz",
1015 | "integrity": "sha512-GeeM827DlzFFidn1eKkMBiqXFD2oLsnZbaiGhByPl0vcapsRzUL+t9hDoov1swc9rB2jw64R+ihtzC8qOE9wXw==",
1016 | "dev": true,
1017 | "requires": {
1018 | "extend": "3.0.2"
1019 | }
1020 | },
1021 | "@rollup/plugin-node-resolve": {
1022 | "version": "11.1.1",
1023 | "resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-11.1.1.tgz",
1024 | "integrity": "sha512-zlBXR4eRS+2m79TsUZWhsd0slrHUYdRx4JF+aVQm+MI0wsKdlpC2vlDVjmlGvtZY1vsefOT9w3JxvmWSBei+Lg==",
1025 | "dev": true,
1026 | "requires": {
1027 | "@rollup/pluginutils": "^3.1.0",
1028 | "@types/resolve": "1.17.1",
1029 | "builtin-modules": "^3.1.0",
1030 | "deepmerge": "^4.2.2",
1031 | "is-module": "^1.0.0",
1032 | "resolve": "^1.19.0"
1033 | }
1034 | },
1035 | "@rollup/pluginutils": {
1036 | "version": "3.1.0",
1037 | "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-3.1.0.tgz",
1038 | "integrity": "sha512-GksZ6pr6TpIjHm8h9lSQ8pi8BE9VeubNT0OMJ3B5uZJ8pz73NPiqOtCog/x2/QzM1ENChPKxMDhiQuRHsqc+lg==",
1039 | "dev": true,
1040 | "requires": {
1041 | "@types/estree": "0.0.39",
1042 | "estree-walker": "^1.0.1",
1043 | "picomatch": "^2.2.2"
1044 | }
1045 | },
1046 | "@types/babel__core": {
1047 | "version": "7.1.12",
1048 | "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.1.12.tgz",
1049 | "integrity": "sha512-wMTHiiTiBAAPebqaPiPDLFA4LYPKr6Ph0Xq/6rq1Ur3v66HXyG+clfR9CNETkD7MQS8ZHvpQOtA53DLws5WAEQ==",
1050 | "dev": true,
1051 | "requires": {
1052 | "@babel/parser": "^7.1.0",
1053 | "@babel/types": "^7.0.0",
1054 | "@types/babel__generator": "*",
1055 | "@types/babel__template": "*",
1056 | "@types/babel__traverse": "*"
1057 | }
1058 | },
1059 | "@types/babel__generator": {
1060 | "version": "7.6.2",
1061 | "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.2.tgz",
1062 | "integrity": "sha512-MdSJnBjl+bdwkLskZ3NGFp9YcXGx5ggLpQQPqtgakVhsWK0hTtNYhjpZLlWQTviGTvF8at+Bvli3jV7faPdgeQ==",
1063 | "dev": true,
1064 | "requires": {
1065 | "@babel/types": "^7.0.0"
1066 | }
1067 | },
1068 | "@types/babel__template": {
1069 | "version": "7.4.0",
1070 | "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.0.tgz",
1071 | "integrity": "sha512-NTPErx4/FiPCGScH7foPyr+/1Dkzkni+rHiYHHoTjvwou7AQzJkNeD60A9CXRy+ZEN2B1bggmkTMCDb+Mv5k+A==",
1072 | "dev": true,
1073 | "requires": {
1074 | "@babel/parser": "^7.1.0",
1075 | "@babel/types": "^7.0.0"
1076 | }
1077 | },
1078 | "@types/babel__traverse": {
1079 | "version": "7.11.0",
1080 | "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.11.0.tgz",
1081 | "integrity": "sha512-kSjgDMZONiIfSH1Nxcr5JIRMwUetDki63FSQfpTCz8ogF3Ulqm8+mr5f78dUYs6vMiB6gBusQqfQmBvHZj/lwg==",
1082 | "dev": true,
1083 | "requires": {
1084 | "@babel/types": "^7.3.0"
1085 | }
1086 | },
1087 | "@types/estree": {
1088 | "version": "0.0.39",
1089 | "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.39.tgz",
1090 | "integrity": "sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw==",
1091 | "dev": true
1092 | },
1093 | "@types/node": {
1094 | "version": "14.14.25",
1095 | "resolved": "https://registry.npmjs.org/@types/node/-/node-14.14.25.tgz",
1096 | "integrity": "sha512-EPpXLOVqDvisVxtlbvzfyqSsFeQxltFbluZNRndIb8tr9KiBnYNLzrc1N3pyKUCww2RNrfHDViqDWWE1LCJQtQ==",
1097 | "dev": true
1098 | },
1099 | "@types/object-path": {
1100 | "version": "0.11.0",
1101 | "resolved": "https://registry.npmjs.org/@types/object-path/-/object-path-0.11.0.tgz",
1102 | "integrity": "sha512-/tuN8jDbOXcPk+VzEVZzzAgw1Byz7s/itb2YI10qkSyy6nykJH02DuhfrflxVdAdE7AZ91h5X6Cn0dmVdFw2TQ==",
1103 | "dev": true
1104 | },
1105 | "@types/resolve": {
1106 | "version": "1.17.1",
1107 | "resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-1.17.1.tgz",
1108 | "integrity": "sha512-yy7HuzQhj0dhGpD8RLXSZWEkLsV9ibvxvi6EiJ3bkqLAO1RGo0WbkWQiwpRlSFymTJRz0d3k5LM3kkx8ArDbLw==",
1109 | "dev": true,
1110 | "requires": {
1111 | "@types/node": "*"
1112 | }
1113 | },
1114 | "@types/semver": {
1115 | "version": "7.3.4",
1116 | "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.3.4.tgz",
1117 | "integrity": "sha512-+nVsLKlcUCeMzD2ufHEYuJ9a2ovstb6Dp52A5VsoKxDXgvE051XgHI/33I1EymwkRGQkwnA0LkhnUzituGs4EQ==",
1118 | "dev": true
1119 | },
1120 | "@types/ua-parser-js": {
1121 | "version": "0.7.35",
1122 | "resolved": "https://registry.npmjs.org/@types/ua-parser-js/-/ua-parser-js-0.7.35.tgz",
1123 | "integrity": "sha512-PsPx0RLbo2Un8+ff2buzYJnZjzwhD3jQHPOG2PtVIeOhkRDddMcKU8vJtHpzzfLB95dkUi0qAkfLg2l2Fd0yrQ==",
1124 | "dev": true
1125 | },
1126 | "@ungap/create-content": {
1127 | "version": "0.3.1",
1128 | "resolved": "https://registry.npmjs.org/@ungap/create-content/-/create-content-0.3.1.tgz",
1129 | "integrity": "sha512-SHzmtS3KHG+gzNhO/E0tFqs12vNC5H3YxpF8a8AeodB/iX3ZYcxzS8vgWXbDGmHy6bgl7m+f9+wDKBdqOVT5FA==",
1130 | "dev": true
1131 | },
1132 | "@wessberg/browserslist-generator": {
1133 | "version": "1.0.42",
1134 | "resolved": "https://registry.npmjs.org/@wessberg/browserslist-generator/-/browserslist-generator-1.0.42.tgz",
1135 | "integrity": "sha512-d7fHVGNbpMFhrwyiQrXlbmjtpmgKI3y0ns+THQNjA1exk6TY8tb6ZmUYn8KVXdCRjZUsvjedNpev/FO8OTTSyQ==",
1136 | "dev": true,
1137 | "requires": {
1138 | "@mdn/browser-compat-data": "^2.0.5",
1139 | "@types/object-path": "^0.11.0",
1140 | "@types/semver": "^7.3.4",
1141 | "@types/ua-parser-js": "^0.7.33",
1142 | "browserslist": "4.14.6",
1143 | "caniuse-lite": "^1.0.30001156",
1144 | "object-path": "^0.11.5",
1145 | "semver": "^7.3.2",
1146 | "ua-parser-js": "^0.7.22"
1147 | },
1148 | "dependencies": {
1149 | "browserslist": {
1150 | "version": "4.14.6",
1151 | "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.14.6.tgz",
1152 | "integrity": "sha512-zeFYcUo85ENhc/zxHbiIp0LGzzTrE2Pv2JhxvS7kpUb9Q9D38kUX6Bie7pGutJ/5iF5rOxE7CepAuWD56xJ33A==",
1153 | "dev": true,
1154 | "requires": {
1155 | "caniuse-lite": "^1.0.30001154",
1156 | "electron-to-chromium": "^1.3.585",
1157 | "escalade": "^3.1.1",
1158 | "node-releases": "^1.1.65"
1159 | }
1160 | },
1161 | "semver": {
1162 | "version": "7.3.4",
1163 | "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.4.tgz",
1164 | "integrity": "sha512-tCfb2WLjqFAtXn4KEdxIhalnRtoKFN7nAwj0B3ZXCbQloV2tq5eDbcTmT68JJD3nRJq24/XgxtQKFIpQdtvmVw==",
1165 | "dev": true,
1166 | "requires": {
1167 | "lru-cache": "^6.0.0"
1168 | }
1169 | }
1170 | }
1171 | },
1172 | "@wessberg/rollup-plugin-ts": {
1173 | "version": "1.3.8",
1174 | "resolved": "https://registry.npmjs.org/@wessberg/rollup-plugin-ts/-/rollup-plugin-ts-1.3.8.tgz",
1175 | "integrity": "sha512-mqAk8CS5VbeE1eMRwbBkrVWqrqDxRJEWfxPHFyncsoamoazZ7iJ4Fke7tYBki+x25dw0rkN6l3VgtICM7o//cw==",
1176 | "dev": true,
1177 | "requires": {
1178 | "@babel/core": "^7.12.3",
1179 | "@babel/plugin-proposal-async-generator-functions": "^7.12.1",
1180 | "@babel/plugin-proposal-json-strings": "^7.12.1",
1181 | "@babel/plugin-proposal-object-rest-spread": "^7.12.1",
1182 | "@babel/plugin-proposal-optional-catch-binding": "^7.12.1",
1183 | "@babel/plugin-proposal-unicode-property-regex": "^7.12.1",
1184 | "@babel/plugin-syntax-dynamic-import": "^7.8.3",
1185 | "@babel/plugin-transform-runtime": "^7.12.1",
1186 | "@babel/preset-env": "^7.12.1",
1187 | "@babel/runtime": "^7.12.5",
1188 | "@rollup/pluginutils": "^4.1.0",
1189 | "@types/babel__core": "^7.1.12",
1190 | "@wessberg/browserslist-generator": "^1.0.42",
1191 | "@wessberg/stringutil": "^1.0.19",
1192 | "@wessberg/ts-clone-node": "^0.3.18",
1193 | "browserslist": "^4.14.6",
1194 | "chalk": "^4.1.0",
1195 | "magic-string": "^0.25.7",
1196 | "slash": "^3.0.0",
1197 | "tslib": "^2.0.3"
1198 | },
1199 | "dependencies": {
1200 | "@rollup/pluginutils": {
1201 | "version": "4.1.0",
1202 | "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-4.1.0.tgz",
1203 | "integrity": "sha512-TrBhfJkFxA+ER+ew2U2/fHbebhLT/l/2pRk0hfj9KusXUuRXd2v0R58AfaZK9VXDQ4TogOSEmICVrQAA3zFnHQ==",
1204 | "dev": true,
1205 | "requires": {
1206 | "estree-walker": "^2.0.1",
1207 | "picomatch": "^2.2.2"
1208 | }
1209 | },
1210 | "estree-walker": {
1211 | "version": "2.0.2",
1212 | "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz",
1213 | "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==",
1214 | "dev": true
1215 | }
1216 | }
1217 | },
1218 | "@wessberg/stringutil": {
1219 | "version": "1.0.19",
1220 | "resolved": "https://registry.npmjs.org/@wessberg/stringutil/-/stringutil-1.0.19.tgz",
1221 | "integrity": "sha512-9AZHVXWlpN8Cn9k5BC/O0Dzb9E9xfEMXzYrNunwvkUTvuK7xgQPVRZpLo+jWCOZ5r8oBa8NIrHuPEu1hzbb6bg==",
1222 | "dev": true
1223 | },
1224 | "@wessberg/ts-clone-node": {
1225 | "version": "0.3.18",
1226 | "resolved": "https://registry.npmjs.org/@wessberg/ts-clone-node/-/ts-clone-node-0.3.18.tgz",
1227 | "integrity": "sha512-m/QAPt9K7w5+zmiDJbKxFeIzr6hMuo8euLwYxhj7ipRsyLB2AeAu2/6AF21s45hDXdWsaFwSed3F9R6STMrECg==",
1228 | "dev": true
1229 | },
1230 | "ansi-styles": {
1231 | "version": "3.2.1",
1232 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
1233 | "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
1234 | "dev": true,
1235 | "requires": {
1236 | "color-convert": "^1.9.0"
1237 | }
1238 | },
1239 | "async-tag": {
1240 | "version": "0.2.0",
1241 | "resolved": "https://registry.npmjs.org/async-tag/-/async-tag-0.2.0.tgz",
1242 | "integrity": "sha512-hNstPiQvxVVJdkBjfBsNb3zDEM2IUY3Xp7qaadEnhaGXq1/OFdS+TuwjEJxnIvZRm7e13KrPW74fIeDra7P5vw==",
1243 | "dev": true
1244 | },
1245 | "babel-plugin-dynamic-import-node": {
1246 | "version": "2.3.3",
1247 | "resolved": "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz",
1248 | "integrity": "sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ==",
1249 | "dev": true,
1250 | "requires": {
1251 | "object.assign": "^4.1.0"
1252 | }
1253 | },
1254 | "browserslist": {
1255 | "version": "4.16.3",
1256 | "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.16.3.tgz",
1257 | "integrity": "sha512-vIyhWmIkULaq04Gt93txdh+j02yX/JzlyhLYbV3YQCn/zvES3JnY7TifHHvvr1w5hTDluNKMkV05cs4vy8Q7sw==",
1258 | "dev": true,
1259 | "requires": {
1260 | "caniuse-lite": "^1.0.30001181",
1261 | "colorette": "^1.2.1",
1262 | "electron-to-chromium": "^1.3.649",
1263 | "escalade": "^3.1.1",
1264 | "node-releases": "^1.1.70"
1265 | }
1266 | },
1267 | "builtin-modules": {
1268 | "version": "3.2.0",
1269 | "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.2.0.tgz",
1270 | "integrity": "sha512-lGzLKcioL90C7wMczpkY0n/oART3MbBa8R9OFGE1rJxoVI86u4WAGfEk8Wjv10eKSyTHVGkSo3bvBylCEtk7LA==",
1271 | "dev": true
1272 | },
1273 | "call-bind": {
1274 | "version": "1.0.2",
1275 | "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz",
1276 | "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==",
1277 | "dev": true,
1278 | "requires": {
1279 | "function-bind": "^1.1.1",
1280 | "get-intrinsic": "^1.0.2"
1281 | }
1282 | },
1283 | "caniuse-lite": {
1284 | "version": "1.0.30001185",
1285 | "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001185.tgz",
1286 | "integrity": "sha512-Fpi4kVNtNvJ15H0F6vwmXtb3tukv3Zg3qhKkOGUq7KJ1J6b9kf4dnNgtEAFXhRsJo0gNj9W60+wBvn0JcTvdTg==",
1287 | "dev": true
1288 | },
1289 | "chalk": {
1290 | "version": "4.1.0",
1291 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz",
1292 | "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==",
1293 | "dev": true,
1294 | "requires": {
1295 | "ansi-styles": "^4.1.0",
1296 | "supports-color": "^7.1.0"
1297 | },
1298 | "dependencies": {
1299 | "ansi-styles": {
1300 | "version": "4.3.0",
1301 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
1302 | "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
1303 | "dev": true,
1304 | "requires": {
1305 | "color-convert": "^2.0.1"
1306 | }
1307 | },
1308 | "color-convert": {
1309 | "version": "2.0.1",
1310 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
1311 | "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
1312 | "dev": true,
1313 | "requires": {
1314 | "color-name": "~1.1.4"
1315 | }
1316 | },
1317 | "color-name": {
1318 | "version": "1.1.4",
1319 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
1320 | "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
1321 | "dev": true
1322 | },
1323 | "has-flag": {
1324 | "version": "4.0.0",
1325 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
1326 | "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
1327 | "dev": true
1328 | },
1329 | "supports-color": {
1330 | "version": "7.2.0",
1331 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
1332 | "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
1333 | "dev": true,
1334 | "requires": {
1335 | "has-flag": "^4.0.0"
1336 | }
1337 | }
1338 | }
1339 | },
1340 | "color-convert": {
1341 | "version": "1.9.3",
1342 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
1343 | "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
1344 | "dev": true,
1345 | "requires": {
1346 | "color-name": "1.1.3"
1347 | }
1348 | },
1349 | "color-name": {
1350 | "version": "1.1.3",
1351 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
1352 | "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=",
1353 | "dev": true
1354 | },
1355 | "colorette": {
1356 | "version": "1.2.1",
1357 | "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.2.1.tgz",
1358 | "integrity": "sha512-puCDz0CzydiSYOrnXpz/PKd69zRrribezjtE9yd4zvytoRc8+RY/KJPvtPFKZS3E3wP6neGyMe0vOTlHO5L3Pw==",
1359 | "dev": true
1360 | },
1361 | "convert-source-map": {
1362 | "version": "1.7.0",
1363 | "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.7.0.tgz",
1364 | "integrity": "sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA==",
1365 | "dev": true,
1366 | "requires": {
1367 | "safe-buffer": "~5.1.1"
1368 | }
1369 | },
1370 | "core-js-compat": {
1371 | "version": "3.8.3",
1372 | "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.8.3.tgz",
1373 | "integrity": "sha512-1sCb0wBXnBIL16pfFG1Gkvei6UzvKyTNYpiC41yrdjEv0UoJoq9E/abTMzyYJ6JpTkAj15dLjbqifIzEBDVvog==",
1374 | "dev": true,
1375 | "requires": {
1376 | "browserslist": "^4.16.1",
1377 | "semver": "7.0.0"
1378 | },
1379 | "dependencies": {
1380 | "semver": {
1381 | "version": "7.0.0",
1382 | "resolved": "https://registry.npmjs.org/semver/-/semver-7.0.0.tgz",
1383 | "integrity": "sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A==",
1384 | "dev": true
1385 | }
1386 | }
1387 | },
1388 | "debug": {
1389 | "version": "4.3.1",
1390 | "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz",
1391 | "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==",
1392 | "dev": true,
1393 | "requires": {
1394 | "ms": "2.1.2"
1395 | }
1396 | },
1397 | "deepmerge": {
1398 | "version": "4.2.2",
1399 | "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz",
1400 | "integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==",
1401 | "dev": true
1402 | },
1403 | "define-properties": {
1404 | "version": "1.1.3",
1405 | "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz",
1406 | "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==",
1407 | "dev": true,
1408 | "requires": {
1409 | "object-keys": "^1.0.12"
1410 | }
1411 | },
1412 | "diff": {
1413 | "version": "4.0.2",
1414 | "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz",
1415 | "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==",
1416 | "dev": true
1417 | },
1418 | "electron-to-chromium": {
1419 | "version": "1.3.663",
1420 | "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.663.tgz",
1421 | "integrity": "sha512-xkVkzHj6k3oRRGlmdgUCCLSLhtFYHDCTH7SeK+LJdJjnsLcrdbpr8EYmfMQhez3V/KPO5UScSpzQ0feYX6Qoyw==",
1422 | "dev": true
1423 | },
1424 | "escalade": {
1425 | "version": "3.1.1",
1426 | "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz",
1427 | "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==",
1428 | "dev": true
1429 | },
1430 | "escape-string-regexp": {
1431 | "version": "1.0.5",
1432 | "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
1433 | "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=",
1434 | "dev": true
1435 | },
1436 | "estree-walker": {
1437 | "version": "1.0.1",
1438 | "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-1.0.1.tgz",
1439 | "integrity": "sha512-1fMXF3YP4pZZVozF8j/ZLfvnR8NSIljt56UhbZ5PeeDmmGHpgpdwQt7ITlGvYaQukCvuBRMLEiKiYC+oeIg4cg==",
1440 | "dev": true
1441 | },
1442 | "esutils": {
1443 | "version": "2.0.3",
1444 | "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz",
1445 | "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==",
1446 | "dev": true
1447 | },
1448 | "extend": {
1449 | "version": "3.0.2",
1450 | "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz",
1451 | "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==",
1452 | "dev": true
1453 | },
1454 | "fsevents": {
1455 | "version": "2.3.2",
1456 | "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz",
1457 | "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==",
1458 | "dev": true,
1459 | "optional": true
1460 | },
1461 | "function-bind": {
1462 | "version": "1.1.1",
1463 | "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz",
1464 | "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==",
1465 | "dev": true
1466 | },
1467 | "gensync": {
1468 | "version": "1.0.0-beta.2",
1469 | "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz",
1470 | "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==",
1471 | "dev": true
1472 | },
1473 | "get-intrinsic": {
1474 | "version": "1.1.1",
1475 | "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz",
1476 | "integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==",
1477 | "dev": true,
1478 | "requires": {
1479 | "function-bind": "^1.1.1",
1480 | "has": "^1.0.3",
1481 | "has-symbols": "^1.0.1"
1482 | }
1483 | },
1484 | "globals": {
1485 | "version": "11.12.0",
1486 | "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz",
1487 | "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==",
1488 | "dev": true
1489 | },
1490 | "has": {
1491 | "version": "1.0.3",
1492 | "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz",
1493 | "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==",
1494 | "dev": true,
1495 | "requires": {
1496 | "function-bind": "^1.1.1"
1497 | }
1498 | },
1499 | "has-flag": {
1500 | "version": "3.0.0",
1501 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
1502 | "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=",
1503 | "dev": true
1504 | },
1505 | "has-symbols": {
1506 | "version": "1.0.1",
1507 | "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz",
1508 | "integrity": "sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==",
1509 | "dev": true
1510 | },
1511 | "is-core-module": {
1512 | "version": "2.2.0",
1513 | "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.2.0.tgz",
1514 | "integrity": "sha512-XRAfAdyyY5F5cOXn7hYQDqh2Xmii+DEfIcQGxK/uNwMHhIkPWO0g8msXcbzLe+MpGoR951MlqM/2iIlU4vKDdQ==",
1515 | "dev": true,
1516 | "requires": {
1517 | "has": "^1.0.3"
1518 | }
1519 | },
1520 | "is-module": {
1521 | "version": "1.0.0",
1522 | "resolved": "https://registry.npmjs.org/is-module/-/is-module-1.0.0.tgz",
1523 | "integrity": "sha1-Mlj7afeMFNW4FdZkM2tM/7ZEFZE=",
1524 | "dev": true
1525 | },
1526 | "js-cleanup": {
1527 | "version": "1.2.0",
1528 | "resolved": "https://registry.npmjs.org/js-cleanup/-/js-cleanup-1.2.0.tgz",
1529 | "integrity": "sha512-JeDD0yiiSt80fXzAVa/crrS0JDPQljyBG/RpOtaSbyDq03VHa9szJWMaWOYU/bcTn412uMN2MxApXq8v79cUiQ==",
1530 | "dev": true,
1531 | "requires": {
1532 | "magic-string": "^0.25.7",
1533 | "perf-regexes": "^1.0.1",
1534 | "skip-regex": "^1.0.2"
1535 | }
1536 | },
1537 | "js-tokens": {
1538 | "version": "4.0.0",
1539 | "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
1540 | "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==",
1541 | "dev": true
1542 | },
1543 | "jsesc": {
1544 | "version": "2.5.2",
1545 | "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz",
1546 | "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==",
1547 | "dev": true
1548 | },
1549 | "json5": {
1550 | "version": "2.2.0",
1551 | "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.0.tgz",
1552 | "integrity": "sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA==",
1553 | "dev": true,
1554 | "requires": {
1555 | "minimist": "^1.2.5"
1556 | }
1557 | },
1558 | "lodash": {
1559 | "version": "4.17.20",
1560 | "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.20.tgz",
1561 | "integrity": "sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA==",
1562 | "dev": true
1563 | },
1564 | "lodash.hasin": {
1565 | "version": "4.5.2",
1566 | "resolved": "https://registry.npmjs.org/lodash.hasin/-/lodash.hasin-4.5.2.tgz",
1567 | "integrity": "sha1-+R41I3jSHvcJC552h8LKNcW01So=",
1568 | "dev": true
1569 | },
1570 | "lodash.isempty": {
1571 | "version": "4.4.0",
1572 | "resolved": "https://registry.npmjs.org/lodash.isempty/-/lodash.isempty-4.4.0.tgz",
1573 | "integrity": "sha1-b4bL7di+TsmHvpqvM8loTbGzHn4=",
1574 | "dev": true
1575 | },
1576 | "lodash.isnil": {
1577 | "version": "4.0.0",
1578 | "resolved": "https://registry.npmjs.org/lodash.isnil/-/lodash.isnil-4.0.0.tgz",
1579 | "integrity": "sha1-SeKM1VkBNFjIFMVHnTxmOiG/qmw=",
1580 | "dev": true
1581 | },
1582 | "lodash.omitby": {
1583 | "version": "4.6.0",
1584 | "resolved": "https://registry.npmjs.org/lodash.omitby/-/lodash.omitby-4.6.0.tgz",
1585 | "integrity": "sha1-XBX/R1StVVAWtTwEExHo8HkgR5E=",
1586 | "dev": true
1587 | },
1588 | "lru-cache": {
1589 | "version": "6.0.0",
1590 | "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz",
1591 | "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==",
1592 | "dev": true,
1593 | "requires": {
1594 | "yallist": "^4.0.0"
1595 | }
1596 | },
1597 | "magic-string": {
1598 | "version": "0.25.7",
1599 | "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.7.tgz",
1600 | "integrity": "sha512-4CrMT5DOHTDk4HYDlzmwu4FVCcIYI8gauveasrdCu2IKIFOJ3f0v/8MDGJCDL9oD2ppz/Av1b0Nj345H9M+XIA==",
1601 | "dev": true,
1602 | "requires": {
1603 | "sourcemap-codec": "^1.4.4"
1604 | }
1605 | },
1606 | "minimist": {
1607 | "version": "1.2.5",
1608 | "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz",
1609 | "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==",
1610 | "dev": true
1611 | },
1612 | "ms": {
1613 | "version": "2.1.2",
1614 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
1615 | "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
1616 | "dev": true
1617 | },
1618 | "node-releases": {
1619 | "version": "1.1.70",
1620 | "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.70.tgz",
1621 | "integrity": "sha512-Slf2s69+2/uAD79pVVQo8uSiC34+g8GWY8UH2Qtqv34ZfhYrxpYpfzs9Js9d6O0mbDmALuxaTlplnBTnSELcrw==",
1622 | "dev": true
1623 | },
1624 | "object-keys": {
1625 | "version": "1.1.1",
1626 | "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz",
1627 | "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==",
1628 | "dev": true
1629 | },
1630 | "object-path": {
1631 | "version": "0.11.5",
1632 | "resolved": "https://registry.npmjs.org/object-path/-/object-path-0.11.5.tgz",
1633 | "integrity": "sha512-jgSbThcoR/s+XumvGMTMf81QVBmah+/Q7K7YduKeKVWL7N111unR2d6pZZarSk6kY/caeNxUDyxOvMWyzoU2eg==",
1634 | "dev": true
1635 | },
1636 | "object.assign": {
1637 | "version": "4.1.2",
1638 | "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz",
1639 | "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==",
1640 | "dev": true,
1641 | "requires": {
1642 | "call-bind": "^1.0.0",
1643 | "define-properties": "^1.1.3",
1644 | "has-symbols": "^1.0.1",
1645 | "object-keys": "^1.1.1"
1646 | }
1647 | },
1648 | "path-parse": {
1649 | "version": "1.0.6",
1650 | "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz",
1651 | "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==",
1652 | "dev": true
1653 | },
1654 | "perf-regexes": {
1655 | "version": "1.0.1",
1656 | "resolved": "https://registry.npmjs.org/perf-regexes/-/perf-regexes-1.0.1.tgz",
1657 | "integrity": "sha512-L7MXxUDtqr4PUaLFCDCXBfGV/6KLIuSEccizDI7JxT+c9x1G1v04BQ4+4oag84SHaCdrBgQAIs/Cqn+flwFPng==",
1658 | "dev": true
1659 | },
1660 | "picomatch": {
1661 | "version": "2.2.2",
1662 | "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.2.2.tgz",
1663 | "integrity": "sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg==",
1664 | "dev": true
1665 | },
1666 | "prettier": {
1667 | "version": "2.2.1",
1668 | "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.2.1.tgz",
1669 | "integrity": "sha512-PqyhM2yCjg/oKkFPtTGUojv7gnZAoG80ttl45O6x2Ug/rMJw4wcc9k6aaf2hibP7BGVCCM33gZoGjyvt9mm16Q==",
1670 | "dev": true
1671 | },
1672 | "regenerate": {
1673 | "version": "1.4.2",
1674 | "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz",
1675 | "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==",
1676 | "dev": true
1677 | },
1678 | "regenerate-unicode-properties": {
1679 | "version": "8.2.0",
1680 | "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-8.2.0.tgz",
1681 | "integrity": "sha512-F9DjY1vKLo/tPePDycuH3dn9H1OTPIkVD9Kz4LODu+F2C75mgjAJ7x/gwy6ZcSNRAAkhNlJSOHRe8k3p+K9WhA==",
1682 | "dev": true,
1683 | "requires": {
1684 | "regenerate": "^1.4.0"
1685 | }
1686 | },
1687 | "regenerator-runtime": {
1688 | "version": "0.13.7",
1689 | "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.7.tgz",
1690 | "integrity": "sha512-a54FxoJDIr27pgf7IgeQGxmqUNYrcV338lf/6gH456HZ/PhX+5BcwHXG9ajESmwe6WRO0tAzRUrRmNONWgkrew==",
1691 | "dev": true
1692 | },
1693 | "regenerator-transform": {
1694 | "version": "0.14.5",
1695 | "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.14.5.tgz",
1696 | "integrity": "sha512-eOf6vka5IO151Jfsw2NO9WpGX58W6wWmefK3I1zEGr0lOD0u8rwPaNqQL1aRxUaxLeKO3ArNh3VYg1KbaD+FFw==",
1697 | "dev": true,
1698 | "requires": {
1699 | "@babel/runtime": "^7.8.4"
1700 | }
1701 | },
1702 | "regexpu-core": {
1703 | "version": "4.7.1",
1704 | "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-4.7.1.tgz",
1705 | "integrity": "sha512-ywH2VUraA44DZQuRKzARmw6S66mr48pQVva4LBeRhcOltJ6hExvWly5ZjFLYo67xbIxb6W1q4bAGtgfEl20zfQ==",
1706 | "dev": true,
1707 | "requires": {
1708 | "regenerate": "^1.4.0",
1709 | "regenerate-unicode-properties": "^8.2.0",
1710 | "regjsgen": "^0.5.1",
1711 | "regjsparser": "^0.6.4",
1712 | "unicode-match-property-ecmascript": "^1.0.4",
1713 | "unicode-match-property-value-ecmascript": "^1.2.0"
1714 | }
1715 | },
1716 | "regjsgen": {
1717 | "version": "0.5.2",
1718 | "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.5.2.tgz",
1719 | "integrity": "sha512-OFFT3MfrH90xIW8OOSyUrk6QHD5E9JOTeGodiJeBS3J6IwlgzJMNE/1bZklWz5oTg+9dCMyEetclvCVXOPoN3A==",
1720 | "dev": true
1721 | },
1722 | "regjsparser": {
1723 | "version": "0.6.7",
1724 | "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.6.7.tgz",
1725 | "integrity": "sha512-ib77G0uxsA2ovgiYbCVGx4Pv3PSttAx2vIwidqQzbL2U5S4Q+j00HdSAneSBuyVcMvEnTXMjiGgB+DlXozVhpQ==",
1726 | "dev": true,
1727 | "requires": {
1728 | "jsesc": "~0.5.0"
1729 | },
1730 | "dependencies": {
1731 | "jsesc": {
1732 | "version": "0.5.0",
1733 | "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz",
1734 | "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=",
1735 | "dev": true
1736 | }
1737 | }
1738 | },
1739 | "resolve": {
1740 | "version": "1.20.0",
1741 | "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz",
1742 | "integrity": "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==",
1743 | "dev": true,
1744 | "requires": {
1745 | "is-core-module": "^2.2.0",
1746 | "path-parse": "^1.0.6"
1747 | }
1748 | },
1749 | "rollup": {
1750 | "version": "2.38.5",
1751 | "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.38.5.tgz",
1752 | "integrity": "sha512-VoWt8DysFGDVRGWuHTqZzT02J0ASgjVq/hPs9QcBOGMd7B+jfTr/iqMVEyOi901rE3xq+Deq66GzIT1yt7sGwQ==",
1753 | "dev": true,
1754 | "requires": {
1755 | "fsevents": "~2.3.1"
1756 | }
1757 | },
1758 | "rollup-plugin-cleanup": {
1759 | "version": "3.2.1",
1760 | "resolved": "https://registry.npmjs.org/rollup-plugin-cleanup/-/rollup-plugin-cleanup-3.2.1.tgz",
1761 | "integrity": "sha512-zuv8EhoO3TpnrU8MX8W7YxSbO4gmOR0ny06Lm3nkFfq0IVKdBUtHwhVzY1OAJyNCIAdLiyPnOrU0KnO0Fri1GQ==",
1762 | "dev": true,
1763 | "requires": {
1764 | "js-cleanup": "^1.2.0",
1765 | "rollup-pluginutils": "^2.8.2"
1766 | }
1767 | },
1768 | "rollup-plugin-prettier": {
1769 | "version": "2.1.0",
1770 | "resolved": "https://registry.npmjs.org/rollup-plugin-prettier/-/rollup-plugin-prettier-2.1.0.tgz",
1771 | "integrity": "sha512-2uPhHkBMVBZeb4cruQrYrjOTtoqHNvnUB5UIzmMu8JBXCfQ+0/JxDclEmnBd44MjO14VmXvfr0GanQaZjCxSbQ==",
1772 | "dev": true,
1773 | "requires": {
1774 | "diff": "4.0.2",
1775 | "lodash.hasin": "4.5.2",
1776 | "lodash.isempty": "4.4.0",
1777 | "lodash.isnil": "4.0.0",
1778 | "lodash.omitby": "4.6.0",
1779 | "magic-string": "0.25.7"
1780 | }
1781 | },
1782 | "rollup-pluginutils": {
1783 | "version": "2.8.2",
1784 | "resolved": "https://registry.npmjs.org/rollup-pluginutils/-/rollup-pluginutils-2.8.2.tgz",
1785 | "integrity": "sha512-EEp9NhnUkwY8aif6bxgovPHMoMoNr2FulJziTndpt5H9RdwC47GSGuII9XxpSdzVGM0GWrNPHV6ie1LTNJPaLQ==",
1786 | "dev": true,
1787 | "requires": {
1788 | "estree-walker": "^0.6.1"
1789 | },
1790 | "dependencies": {
1791 | "estree-walker": {
1792 | "version": "0.6.1",
1793 | "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-0.6.1.tgz",
1794 | "integrity": "sha512-SqmZANLWS0mnatqbSfRP5g8OXZC12Fgg1IwNtLsyHDzJizORW4khDfjPqJZsemPWBB2uqykUah5YpQ6epsqC/w==",
1795 | "dev": true
1796 | }
1797 | }
1798 | },
1799 | "safe-buffer": {
1800 | "version": "5.1.2",
1801 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
1802 | "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
1803 | "dev": true
1804 | },
1805 | "semver": {
1806 | "version": "5.7.1",
1807 | "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
1808 | "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==",
1809 | "dev": true
1810 | },
1811 | "skip-regex": {
1812 | "version": "1.0.2",
1813 | "resolved": "https://registry.npmjs.org/skip-regex/-/skip-regex-1.0.2.tgz",
1814 | "integrity": "sha512-pEjMUbwJ5Pl/6Vn6FsamXHXItJXSRftcibixDmNCWbWhic0hzHrwkMZo0IZ7fMRH9KxcWDFSkzhccB4285PutA==",
1815 | "dev": true
1816 | },
1817 | "slash": {
1818 | "version": "3.0.0",
1819 | "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz",
1820 | "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==",
1821 | "dev": true
1822 | },
1823 | "source-map": {
1824 | "version": "0.5.7",
1825 | "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
1826 | "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
1827 | "dev": true
1828 | },
1829 | "sourcemap-codec": {
1830 | "version": "1.4.8",
1831 | "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz",
1832 | "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==",
1833 | "dev": true
1834 | },
1835 | "supports-color": {
1836 | "version": "5.5.0",
1837 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
1838 | "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
1839 | "dev": true,
1840 | "requires": {
1841 | "has-flag": "^3.0.0"
1842 | }
1843 | },
1844 | "to-fast-properties": {
1845 | "version": "2.0.0",
1846 | "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz",
1847 | "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=",
1848 | "dev": true
1849 | },
1850 | "tslib": {
1851 | "version": "2.1.0",
1852 | "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.1.0.tgz",
1853 | "integrity": "sha512-hcVC3wYEziELGGmEEXue7D75zbwIIVUMWAVbHItGPx0ziyXxrOMQx4rQEVEV45Ut/1IotuEvwqPopzIOkDMf0A==",
1854 | "dev": true
1855 | },
1856 | "typescript": {
1857 | "version": "4.1.5",
1858 | "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.1.5.tgz",
1859 | "integrity": "sha512-6OSu9PTIzmn9TCDiovULTnET6BgXtDYL4Gg4szY+cGsc3JP1dQL8qvE8kShTRx1NIw4Q9IBHlwODjkjWEtMUyA==",
1860 | "dev": true
1861 | },
1862 | "ua-parser-js": {
1863 | "version": "0.7.23",
1864 | "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.23.tgz",
1865 | "integrity": "sha512-m4hvMLxgGHXG3O3fQVAyyAQpZzDOvwnhOTjYz5Xmr7r/+LpkNy3vJXdVRWgd1TkAb7NGROZuSy96CrlNVjA7KA==",
1866 | "dev": true
1867 | },
1868 | "uarray": {
1869 | "version": "1.0.0",
1870 | "resolved": "https://registry.npmjs.org/uarray/-/uarray-1.0.0.tgz",
1871 | "integrity": "sha512-LHmiAd5QuAv7pU2vbh+Zq9YOnqVK0H764p2Ozinpfy9ka58OID4IsGLiXsitqH7n0NAIDxvax1A/kDXpii/Ckg==",
1872 | "dev": true
1873 | },
1874 | "udomdiff": {
1875 | "version": "1.1.0",
1876 | "resolved": "https://registry.npmjs.org/udomdiff/-/udomdiff-1.1.0.tgz",
1877 | "integrity": "sha512-aqjTs5x/wsShZBkVagdafJkP8S3UMGhkHKszsu1cszjjZ7iOp86+Qb3QOFYh01oWjPMy5ZTuxD6hw5uTKxd+VA==",
1878 | "dev": true
1879 | },
1880 | "uhandlers": {
1881 | "version": "0.4.2",
1882 | "resolved": "https://registry.npmjs.org/uhandlers/-/uhandlers-0.4.2.tgz",
1883 | "integrity": "sha512-4M3yo0saEReMHiUz3yTDX/e9Z1Z+X8fVvDEywdjvWHPKqzpI6xEPJ21llrBf6Tvf7E5xaPCf9l5JXaYZRU7QRA==",
1884 | "dev": true,
1885 | "requires": {
1886 | "uarray": "^1.0.0"
1887 | }
1888 | },
1889 | "uhtml": {
1890 | "version": "2.5.0",
1891 | "resolved": "https://registry.npmjs.org/uhtml/-/uhtml-2.5.0.tgz",
1892 | "integrity": "sha512-SwKqJmLF6rsCY+3ATCl5xTVOwFkNPVClfdrdIpw5SJQdZW/rYfWnHZtyQFa2Y6Qg9iDMhVJGIxL81RJV+jBL1g==",
1893 | "dev": true,
1894 | "requires": {
1895 | "@ungap/create-content": "^0.3.1",
1896 | "async-tag": "^0.2.0",
1897 | "uarray": "^1.0.0",
1898 | "udomdiff": "^1.1.0",
1899 | "uhandlers": "^0.4.2",
1900 | "umap": "^1.0.2",
1901 | "uparser": "^0.2.1",
1902 | "uwire": "^1.1.0"
1903 | }
1904 | },
1905 | "umap": {
1906 | "version": "1.0.2",
1907 | "resolved": "https://registry.npmjs.org/umap/-/umap-1.0.2.tgz",
1908 | "integrity": "sha512-bW127HgG4H4VAD6qlqO5vCC+7bnlYvZ6A6BdwyGblkWvlEG7VYpj1bcpf3iJpvyKmkPZWDIeZDmoULz67ec7NA==",
1909 | "dev": true
1910 | },
1911 | "unicode-canonical-property-names-ecmascript": {
1912 | "version": "1.0.4",
1913 | "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-1.0.4.tgz",
1914 | "integrity": "sha512-jDrNnXWHd4oHiTZnx/ZG7gtUTVp+gCcTTKr8L0HjlwphROEW3+Him+IpvC+xcJEFegapiMZyZe02CyuOnRmbnQ==",
1915 | "dev": true
1916 | },
1917 | "unicode-match-property-ecmascript": {
1918 | "version": "1.0.4",
1919 | "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-1.0.4.tgz",
1920 | "integrity": "sha512-L4Qoh15vTfntsn4P1zqnHulG0LdXgjSO035fEpdtp6YxXhMT51Q6vgM5lYdG/5X3MjS+k/Y9Xw4SFCY9IkR0rg==",
1921 | "dev": true,
1922 | "requires": {
1923 | "unicode-canonical-property-names-ecmascript": "^1.0.4",
1924 | "unicode-property-aliases-ecmascript": "^1.0.4"
1925 | }
1926 | },
1927 | "unicode-match-property-value-ecmascript": {
1928 | "version": "1.2.0",
1929 | "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-1.2.0.tgz",
1930 | "integrity": "sha512-wjuQHGQVofmSJv1uVISKLE5zO2rNGzM/KCYZch/QQvez7C1hUhBIuZ701fYXExuufJFMPhv2SyL8CyoIfMLbIQ==",
1931 | "dev": true
1932 | },
1933 | "unicode-property-aliases-ecmascript": {
1934 | "version": "1.1.0",
1935 | "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-1.1.0.tgz",
1936 | "integrity": "sha512-PqSoPh/pWetQ2phoj5RLiaqIk4kCNwoV3CI+LfGmWLKI3rE3kl1h59XpX2BjgDrmbxD9ARtQobPGU1SguCYuQg==",
1937 | "dev": true
1938 | },
1939 | "uparser": {
1940 | "version": "0.2.1",
1941 | "resolved": "https://registry.npmjs.org/uparser/-/uparser-0.2.1.tgz",
1942 | "integrity": "sha512-hTwK8e+bAaER8gJBOysoFGjRPsX/xOthSPR/ieI9EgTf1rts9ey25tbDXIU0rDr/cGcLsvkCo1n8J/eccfAvvw==",
1943 | "dev": true
1944 | },
1945 | "uwire": {
1946 | "version": "1.1.0",
1947 | "resolved": "https://registry.npmjs.org/uwire/-/uwire-1.1.0.tgz",
1948 | "integrity": "sha512-XJPmJnySabt8D0/wnfFFywgUOBnXszDEW32nEVIfOx1n6gLTZSp+X+70+blSnHKNiIUVSFPmmRuxOal0I/aB5g==",
1949 | "dev": true,
1950 | "requires": {
1951 | "uarray": "^1.0.0"
1952 | }
1953 | },
1954 | "yallist": {
1955 | "version": "4.0.0",
1956 | "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
1957 | "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
1958 | "dev": true
1959 | }
1960 | }
1961 | }
1962 |
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "@shoelace-style/shoemaker",
3 | "description": "An elegant way to create web components.",
4 | "version": "1.0.0-beta.6",
5 | "homepage": "https://github.com/shoelace-style/shoemaker",
6 | "author": "Cory LaViska",
7 | "license": "MIT",
8 | "main": "dist/shoemaker.js",
9 | "module": "dist/shoemaker.js",
10 | "type": "module",
11 | "types": "dist/shoemaker.d.ts",
12 | "files": [
13 | "dist"
14 | ],
15 | "keywords": [
16 | "web components",
17 | "custom elements",
18 | "components"
19 | ],
20 | "repository": {
21 | "type": "git",
22 | "url": "git+https://github.com/shoelace-style/shoemaker.git"
23 | },
24 | "bugs": {
25 | "url": "https://github.com/shoelace-style/shoemaker/issues"
26 | },
27 | "funding": {
28 | "type": "individual",
29 | "url": "https://github.com/sponsors/claviska"
30 | },
31 | "scripts": {
32 | "start": "rollup --config --watch",
33 | "build": "rollup --config",
34 | "clean": "rm -rf ./dist",
35 | "prepublish": "npm run clean && npm run build"
36 | },
37 | "dependencies": {},
38 | "devDependencies": {
39 | "@rollup/plugin-node-resolve": "^11.1.0",
40 | "@wessberg/rollup-plugin-ts": "^1.3.8",
41 | "prettier": "^2.2.1",
42 | "rollup": "^2.36.2",
43 | "rollup-plugin-cleanup": "^3.2.1",
44 | "rollup-plugin-prettier": "^2.1.0",
45 | "tslib": "^2.1.0",
46 | "typescript": "^4.1.3",
47 | "uhtml": "^2.5.0"
48 | }
49 | }
50 |
--------------------------------------------------------------------------------
/prettier.config.cjs:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | arrowParens: 'avoid',
3 | bracketSpacing: true,
4 | htmlWhitespaceSensitivity: 'css',
5 | insertPragma: false,
6 | jsxBracketSameLine: false,
7 | jsxSingleQuote: false,
8 | parser: 'typescript',
9 | printWidth: 120,
10 | proseWrap: 'preserve',
11 | quoteProps: 'as-needed',
12 | requirePragma: false,
13 | semi: true,
14 | singleQuote: true,
15 | tabWidth: 2,
16 | trailingComma: 'none',
17 | useTabs: false
18 | };
19 |
--------------------------------------------------------------------------------
/rollup.config.js:
--------------------------------------------------------------------------------
1 | import typescript from '@wessberg/rollup-plugin-ts';
2 | import { nodeResolve } from '@rollup/plugin-node-resolve';
3 |
4 | export default {
5 | input: 'src/shoemaker.ts',
6 | output: {
7 | file: 'dist/shoemaker.js',
8 | format: 'esm'
9 | },
10 | plugins: [nodeResolve(), typescript()]
11 | };
12 |
--------------------------------------------------------------------------------
/src/shoemaker.ts:
--------------------------------------------------------------------------------
1 | import { getAttrName, getAttrValue } from './utilities/attributes';
2 | import { getPropName, getPropValue, reservedProperties } from './utilities/properties';
3 | import { html, render as renderTemplate, Hole } from 'uhtml';
4 |
5 | export { classMap, styleMap } from './utilities/directives';
6 | export { html, svg, Hole } from 'uhtml';
7 |
8 | export abstract class Shoemaker extends HTMLElement {
9 | static tag: string;
10 | static props: string[] = [];
11 | static reflect: string[] = [];
12 | static styles = '';
13 |
14 | static get observedAttributes() {
15 | return this.props.map(prop => getAttrName(prop));
16 | }
17 |
18 | private _initialProps: { [key: string]: any } = {};
19 | private _isInitialized = false; // the component has been initialized and may or may not be connected to the DOM
20 | private _isMounted = false; // the component has been initialized and is currently connected to the DOM
21 | private _isRenderScheduled = false;
22 | private _props: { [key: string]: any } = {};
23 |
24 | constructor() {
25 | super();
26 | this.attachShadow({ mode: 'open' });
27 |
28 | const { props } = this.constructor as typeof Shoemaker;
29 |
30 | props.map(prop => {
31 | if (reservedProperties.includes(prop)) {
32 | throw new Error(`Invalid prop name: "${prop}" is a reserved property`);
33 | }
34 |
35 | // Store initial prop values so we can restore them after the subclass' constructor runs. This lets us set default
36 | // values for components but prevents those values from overriding user-defined values when elements are created.
37 | if (this.hasOwnProperty(prop)) {
38 | this._initialProps[prop] = (this as any)[prop];
39 | }
40 |
41 | // Define getters and setters for props
42 | Object.defineProperty(this, prop, {
43 | get: () => this._props[prop],
44 | set: (newValue: any) => {
45 | const oldValue = this._props[prop];
46 |
47 | this._props[prop] = newValue;
48 | this._reflectToAttr(prop);
49 | this.scheduleRender();
50 | this._triggerWatcher(prop, oldValue, newValue);
51 | }
52 | });
53 | });
54 | }
55 |
56 | connectedCallback() {
57 | const { props } = this.constructor as typeof Shoemaker;
58 |
59 | // Restore user-defined props before attributes are set. This prevents default values in components from being
60 | // overridden during instantiation but still allows attributes to take precedence.
61 | Object.keys(this._initialProps).map((prop: string) => {
62 | (this as any)[prop] = this._initialProps[prop];
63 | });
64 |
65 | // Once we've set the initial props, destroy them so they don't get applied if the component reconnects to the DOM
66 | this._initialProps = {};
67 |
68 | // Sync attributes to props
69 | props.map(prop => {
70 | const attr = getAttrName(prop);
71 | if (this.hasAttribute(attr)) {
72 | this._props[prop] = getPropValue(this.getAttribute(attr));
73 | }
74 | });
75 |
76 | this._isInitialized = true;
77 | this.onConnect();
78 | this._isMounted = true;
79 | this._renderToDOM();
80 | this.onReady();
81 | }
82 |
83 | disconnectedCallback() {
84 | this._isMounted = false;
85 | this.onDisconnect();
86 | }
87 |
88 | attributeChangedCallback(attrName: string, oldValue: string | null, newValue: string | null) {
89 | if (newValue !== oldValue && this._isMounted) {
90 | this._props[getPropName(attrName)] = getPropValue(newValue);
91 | this.scheduleRender();
92 | }
93 | }
94 |
95 | private _reflectToAttr(prop: string) {
96 | const { reflect } = this.constructor as typeof Shoemaker;
97 |
98 | if (reflect.includes(prop) && this._isMounted) {
99 | const propValue = this._props[prop];
100 | const attrName = getAttrName(prop);
101 | const attrValue = getAttrValue(propValue);
102 |
103 | if (typeof attrValue === 'string') {
104 | this.setAttribute(attrName, attrValue);
105 | } else {
106 | this.removeAttribute(attrName);
107 | }
108 | }
109 | }
110 |
111 | private _triggerWatcher(propertyName: string, oldValue: any, newValue: any) {
112 | if (newValue !== oldValue && this._isMounted) {
113 | const methodName = `watch${propertyName.charAt(0).toUpperCase() + propertyName.substring(1)}`;
114 | if (typeof this.constructor.prototype[methodName] === 'function') {
115 | this.constructor.prototype[methodName].call(this, oldValue, newValue);
116 | }
117 | }
118 | }
119 |
120 | private _renderToDOM() {
121 | const template = this.render();
122 |
123 | if (template) {
124 | const { styles } = this.constructor as typeof Shoemaker;
125 | const stylesheet = html``;
128 |
129 | renderTemplate(this.shadowRoot!, html`${stylesheet} ${template}`);
130 | }
131 | }
132 |
133 | /** Called after the component has been connected to the DOM and before the initial render. At this point, the
134 | * component's internals are not available in the DOM. This is a good place to fetch data and override initial props.
135 | */
136 | public onConnect() {}
137 |
138 | /** Called after the component has initialized and the first render has occurred. */
139 | public onReady() {}
140 |
141 | /** Called when the component is removed from the DOM. */
142 | public onDisconnect() {}
143 |
144 | /** Renders the component. */
145 | public render(): Hole | string | undefined {
146 | return undefined;
147 | }
148 |
149 | /**
150 | * Schedules a render. This is called automatically when props change, but you can force a re-render by calling it
151 | * arbitrarily. It's almost always a bad practice to rely on this method. Try to use props instead.
152 | */
153 | public async scheduleRender() {
154 | if (!this._isRenderScheduled && this._isMounted) {
155 | this._isRenderScheduled = true;
156 |
157 | return new Promise(resolve =>
158 | requestAnimationFrame(() => {
159 | // To perform a render, the component must be initialized but it doesn't necessarily have to be connected to
160 | // the DOM. This prevents extra rerenders during initialization.
161 | if (this._isInitialized) {
162 | this._renderToDOM();
163 | this._isRenderScheduled = false;
164 | resolve(null);
165 | }
166 | })
167 | );
168 | }
169 | }
170 |
171 | /** Dispatches a custom event from the host element. */
172 | public emit(eventName: string, eventOptions?: CustomEventInit) {
173 | const event = new CustomEvent(
174 | eventName,
175 | Object.assign(
176 | {
177 | bubbles: true,
178 | cancelable: true,
179 | composed: true,
180 | detail: {}
181 | },
182 | eventOptions
183 | )
184 | );
185 | this.dispatchEvent(event);
186 | return event;
187 | }
188 |
189 | /** Registers the component as a custom element. */
190 | static register() {
191 | // @ts-ignore
192 | customElements.define(this.tag, this);
193 | }
194 | }
195 |
--------------------------------------------------------------------------------
/src/utilities/attributes.ts:
--------------------------------------------------------------------------------
1 | export function getAttrName(propName: string) {
2 | return propName.replace(/[A-Z]/g, m => `-${m.toLowerCase()}`).replace(/^-/, '');
3 | }
4 |
5 | export function getAttrValue(propValue: any) {
6 | if (typeof propValue === 'string' || typeof propValue === 'number') {
7 | return propValue + '';
8 | } else if (typeof propValue === 'boolean') {
9 | // Empty attributes resolve to boolean true, e.g.
10 | return propValue ? '' : null;
11 | } else {
12 | // Other types cannot be stored as attributes
13 | return null;
14 | }
15 | }
16 |
--------------------------------------------------------------------------------
/src/utilities/directives.ts:
--------------------------------------------------------------------------------
1 | export function classMap(classes: any) {
2 | let result: string[] = [];
3 | Object.keys(classes).map(key => {
4 | if (classes[key]) {
5 | result.push(key);
6 | }
7 | });
8 |
9 | return result.join(' ');
10 | }
11 |
12 | export function styleMap(styles: { [key: string]: any }) {
13 | let result: string[] = [];
14 |
15 | Object.keys(styles).map(key => {
16 | if (styles[key]) {
17 | const isCustomProperty = /^--/.test(key);
18 | const name = isCustomProperty ? key : key.replace(/[A-Z]/g, m => `-${m.toLowerCase()}`).replace(/^-/, '');
19 | result.push(`${name}: ${styles[key]}`);
20 | }
21 | });
22 |
23 | return result.join('; ') + (result.length ? ';' : '');
24 | }
25 |
--------------------------------------------------------------------------------
/src/utilities/properties.ts:
--------------------------------------------------------------------------------
1 | export function getPropName(attrName: string) {
2 | return attrName.replace(/-./g, m => m.toUpperCase()[1]);
3 | }
4 |
5 | export function getPropValue(attrValue: string | null) {
6 | if (attrValue === '') {
7 | // Empty attributes resolve to boolean true, e.g.
8 | return true;
9 | } else if (Number(attrValue).toString() === attrValue) {
10 | return Number(attrValue);
11 | } else {
12 | return attrValue;
13 | }
14 | }
15 |
16 | export const reservedProperties = [
17 | 'accesskey',
18 | 'class',
19 | 'contenteditable',
20 | 'dir',
21 | 'draggable',
22 | 'hidden',
23 | 'id',
24 | 'lang',
25 | 'style',
26 | 'tabindex',
27 | 'title',
28 | 'translate'
29 | ];
30 |
--------------------------------------------------------------------------------
/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "compilerOptions": {
3 | /* Visit https://aka.ms/tsconfig.json to read more about this file */
4 |
5 | /* Basic Options */
6 | // "incremental": true, /* Enable incremental compilation */
7 | "target": "es6", /* Specify ECMAScript target version: 'ES3' (default), 'ES5', 'ES2015', 'ES2016', 'ES2017', 'ES2018', 'ES2019', 'ES2020', or 'ESNEXT'. */
8 | "module": "es6", /* Specify module code generation: 'none', 'commonjs', 'amd', 'system', 'umd', 'es2015', 'es2020', or 'ESNext'. */
9 | // "lib": [], /* Specify library files to be included in the compilation. */
10 | // "allowJs": true, /* Allow javascript files to be compiled. */
11 | // "checkJs": true, /* Report errors in .js files. */
12 | // "jsx": "preserve", /* Specify JSX code generation: 'preserve', 'react-native', or 'react'. */
13 | "declaration": true, /* Generates corresponding '.d.ts' file. */
14 | // "declarationMap": true, /* Generates a sourcemap for each corresponding '.d.ts' file. */
15 | "sourceMap": true, /* Generates corresponding '.map' file. */
16 | // "outFile": "./", /* Concatenate and emit output to single file. */
17 | "outDir": "./dist", /* Redirect output structure to the directory. */
18 | "rootDir": "./src", /* Specify the root directory of input files. Use to control the output directory structure with --outDir. */
19 | // "composite": true, /* Enable project compilation */
20 | // "tsBuildInfoFile": "./", /* Specify file to store incremental compilation information */
21 | // "removeComments": true, /* Do not emit comments to output. */
22 | // "noEmit": true, /* Do not emit outputs. */
23 | // "importHelpers": true, /* Import emit helpers from 'tslib'. */
24 | // "downlevelIteration": true, /* Provide full support for iterables in 'for-of', spread, and destructuring when targeting 'ES5' or 'ES3'. */
25 | // "isolatedModules": true, /* Transpile each file as a separate module (similar to 'ts.transpileModule'). */
26 |
27 | /* Strict Type-Checking Options */
28 | "strict": true, /* Enable all strict type-checking options. */
29 | "noImplicitAny": true, /* Raise error on expressions and declarations with an implied 'any' type. */
30 | // "strictNullChecks": true, /* Enable strict null checks. */
31 | // "strictFunctionTypes": true, /* Enable strict checking of function types. */
32 | // "strictBindCallApply": true, /* Enable strict 'bind', 'call', and 'apply' methods on functions. */
33 | // "strictPropertyInitialization": true, /* Enable strict checking of property initialization in classes. */
34 | // "noImplicitThis": true, /* Raise error on 'this' expressions with an implied 'any' type. */
35 | // "alwaysStrict": true, /* Parse in strict mode and emit "use strict" for each source file. */
36 |
37 | /* Additional Checks */
38 | "noUnusedLocals": true, /* Report errors on unused locals. */
39 | "noUnusedParameters": true, /* Report errors on unused parameters. */
40 | "noImplicitReturns": true, /* Report error when not all code paths in function return a value. */
41 | "noFallthroughCasesInSwitch": true, /* Report errors for fallthrough cases in switch statement. */
42 | // "noUncheckedIndexedAccess": true, /* Include 'undefined' in index signature results */
43 |
44 | /* Module Resolution Options */
45 | "moduleResolution": "node", /* Specify module resolution strategy: 'node' (Node.js) or 'classic' (TypeScript pre-1.6). */
46 | // "baseUrl": "./", /* Base directory to resolve non-absolute module names. */
47 | // "paths": {}, /* A series of entries which re-map imports to lookup locations relative to the 'baseUrl'. */
48 | // "rootDirs": [], /* List of root folders whose combined content represents the structure of the project at runtime. */
49 | // "typeRoots": [], /* List of folders to include type definitions from. */
50 | // "types": [], /* Type declaration files to be included in compilation. */
51 | // "allowSyntheticDefaultImports": true, /* Allow default imports from modules with no default export. This does not affect code emit, just typechecking. */
52 | "esModuleInterop": true, /* Enables emit interoperability between CommonJS and ES Modules via creation of namespace objects for all imports. Implies 'allowSyntheticDefaultImports'. */
53 | // "preserveSymlinks": true, /* Do not resolve the real path of symlinks. */
54 | // "allowUmdGlobalAccess": true, /* Allow accessing UMD globals from modules. */
55 |
56 | /* Source Map Options */
57 | // "sourceRoot": "", /* Specify the location where debugger should locate TypeScript files instead of source locations. */
58 | // "mapRoot": "", /* Specify the location where debugger should locate map files instead of generated locations. */
59 | // "inlineSourceMap": true, /* Emit a single file with source maps instead of having a separate file. */
60 | // "inlineSources": true, /* Emit the source alongside the sourcemaps within a single file; requires '--inlineSourceMap' or '--sourceMap' to be set. */
61 |
62 | /* Experimental Options */
63 | // "experimentalDecorators": true, /* Enables experimental support for ES7 decorators. */
64 | // "emitDecoratorMetadata": true, /* Enables experimental support for emitting type metadata for decorators. */
65 |
66 | /* Advanced Options */
67 | "skipLibCheck": true, /* Skip type checking of declaration files. */
68 | "forceConsistentCasingInFileNames": true, /* Disallow inconsistently-cased references to the same file. */
69 | "plugins": [
70 | {
71 | "name": "typescript-styled-plugin",
72 | "validate": false
73 | }
74 | ]
75 | }
76 | }
77 |
--------------------------------------------------------------------------------