feat(babel-plugin-extends-docs): extend docs by rewriting imports/code

Co-authored-by: Thomas Allmer <thomas.allmer@ing.com>
This commit is contained in:
Joren Broekema 2020-04-15 17:42:22 +02:00 committed by Thomas Allmer
parent 89a84a8b29
commit 2cdb7cac50
22 changed files with 1741 additions and 261 deletions

View file

@ -6,6 +6,7 @@ module.exports = {
'**/test-suites/**/*.js',
'**/test/**/*.js',
'**/test-node/**/*.js',
'**/demo/**/*.js',
'**/stories/**/*.js',
'**/*.config.js',
],

View file

@ -0,0 +1,225 @@
# babel-plugin-extend-docs
A plugin which rewrites imports and templates according to a configuration.
This enables the reuse of existing documentation from source packages while still using your extensions code.
## Installation
```bash
npm i -D babel-plugin-extend-docs
```
We want to only execute `babel-plugin-extend-docs` on the actual files we want to modify/extend.
We recommend using [babel overrides](https://babeljs.io/docs/en/options#overrides) for it.
👉 _babel.config.js_
```js
const extendDocsConfig = {
rootPath: process.cwd(), // or `path.resolve('./')` as plugin needs to know the rootPath of your project
changes: [
// possible changes as described below
],
};
module.exports = {
overrides: [
{
// plugin will only be executed on files that match this pattern
test: ['./node_modules/source-library/demos/**/*.js'],
plugins: [['babel-plugin-extend-docs', extendDocsConfig]],
},
],
};
```
## Features
- Renames named imports and all it's usage
- Adjusts import paths
- Replace tags in template literals
## A Change
A change is what gets placed between in the extendDocsConfig within the `changes` array.
> automating the generation of changes is optional but encouraged
It has the following possibilities:
```js
changes: [
{
description: 'MyCounter', // not needed but can be added for easier reading of the config
variable: {
// see below
},
tag: {
// see below
},
},
];
```
### Paths
Both `variable` and `tag` are required to have a `paths` array which defines how to remap import paths.
As demos can use multiple ways to import all of them needs to be written down in the config.
```js
paths: [
{ from: './index.js', to: './my-extension/index.js' },
{ from: '../index.js', to: '../my-extension/index.js' },
{ from: './src/MyCounter.js', to: './my-extension/index.js' },
{ from: '../src/MyCounter.js', to: '../my-extension/index.js' },
],
```
## Replacement of tags
We have an existing demo code which we want to reuse.
```js
import { LitElement, html } from 'lit-element';
import './my-counter.js';
class MyApp extends LitElement {
render() {
return html`
<h1>Example App</h1>
<my-counter></my-counter>
`;
}
}
customElements.define('my-app', MyApp);
```
We created a "better" version of `<my-counter>` so we would like to use that in the demo.
Our extension is called `<my-extension>` and is available in `./my-extension/my-extension.js`.
Within `babel-plugin-extend-docs` we can define to replace the tag + it's import.
```js
tag: {
from: 'my-counter',
to: 'my-extension',
paths: [{ from: './my-counter.js', to: './my-extension/my-extension.js' }],
}
```
### Result of Replacement of tags
```js
import { LitElement, html } from 'lit-element';
import './my-extension/my-extension.js';
class MyApp extends LitElement {
render() {
return html`
<h1>Example App</h1>
<my-extension></my-extension>
`;
}
}
customElements.define('my-app', MyApp);
```
## Replacement of classes
We have an existing demo code which we want to reuse.
```js
import { LitElement, html } from 'lit-element';
import { MyCounter } from './src/MyCounter.js';
class TenCounter extends MyCounter {
inc() {
this.count += 10;
}
}
customElements.define('ten-counter', TenCounter);
class MyApp extends LitElement {
render() {
return html`
<h1>Example App</h1>
<ten-counter></ten-counter>
`;
}
}
customElements.define('my-app', MyApp);
```
We created a "better" version of `MyCounter` so we would like that `TenCounter` now extends it instead.
Within `babel-plugin-extend-docs` we can define to replace the class + it's import.
```js
variable: {
from: 'MyCounter',
to: 'MyExtension',
paths: [
{ from: './src/MyCounter.js', to: './my-extension/index.js' },
],
},
```
### Result of Replacement of classes
```js
import { LitElement, html } from 'lit-element';
import { MyExtension } from './my-extension/index.js';
class TenCounter extends MyExtension {
inc() {
this.count += 10;
}
}
customElements.define('ten-counter', TenCounter);
class MyApp extends LitElement {
render() {
return html`
<h1>Example App</h1>
<ten-counter></ten-counter>
`;
}
}
customElements.define('my-app', MyApp);
```
## Full Demo & Api Example
You can run the example locally via `npm run start` or look at its [source code](https://github.com/ing-bank/lion/tree/master/packages/babel-plugin-extend-docs/demo/).
_Note we are configuring babel via the [server.config.js](https://github.com/ing-bank/lion/tree/master/packages/babel-plugin-extend-docs/demo/server.config.js)_
👉 _babel.config.js_
```js
const path = require('path');
const extendDocsConfig = {
rootPath: path.resolve('./demo'),
changes: [
{
name: 'MyCounter',
variable: {
from: 'MyCounter',
to: 'MyExtension',
paths: [
{ from: './index.js', to: './my-extension/index.js' },
{ from: './src/MyCounter.js', to: './my-extension/index.js' },
],
},
tag: {
from: 'my-counter',
to: 'my-extension',
paths: [{ from: './my-counter.js', to: './my-extension/my-extension.js' }],
},
},
],
};
module.exports = {
overrides: [
{
test: ['./node_modules/@lion/*/README.md', './node_modules/@lion/*/docs/**/*.md',
plugins: [['babel-plugin-docs-extend', extendDocsConfig]],
},
],
};
```

View file

@ -0,0 +1,7 @@
<html>
<head></head>
<body>
<my-app></my-app>
</body>
<script type="module" src="./my-app.demo.js"></script>
</html>

View file

@ -0,0 +1,25 @@
import { LitElement, html } from 'lit-element';
import { MyCounter } from './src/MyCounter.js';
import './my-counter.js';
class TenCounter extends MyCounter {
inc() {
this.count += 10;
}
}
customElements.define('ten-counter', TenCounter);
class MyApp extends LitElement {
render() {
return html`
<h1>Example App</h1>
<hr />
<my-counter></my-counter>
<hr />
<ten-counter></ten-counter>
`;
}
}
customElements.define('my-app', MyApp);

View file

@ -0,0 +1,3 @@
import { MyCounter } from './src/MyCounter.js';
customElements.define('my-counter', MyCounter);

View file

@ -0,0 +1,19 @@
import { html, css } from 'lit-element';
import { MyCounter } from '../src/MyCounter.js';
export class MyExtension extends MyCounter {
static get styles() {
return [
super.styles,
css`
button {
background: #c43f16;
}
`,
];
}
_renderHeader() {
return html`<h2>I am MyExtension</h2> `;
}
}

View file

@ -0,0 +1 @@
export { MyExtension } from './MyExtension.js';

View file

@ -0,0 +1,3 @@
import { MyExtension } from './MyExtension.js';
customElements.define('my-extension', MyExtension);

View file

@ -0,0 +1,38 @@
const path = require('path');
const extendDocsConfig = {
changes: [
{
name: 'MyCounter',
variable: {
from: 'MyCounter',
to: 'MyExtension',
paths: [
{ from: './index.js', to: './my-extension/index.js' },
{ from: './src/MyCounter.js', to: './my-extension/index.js' },
],
},
tag: {
from: 'my-counter',
to: 'my-extension',
paths: [{ from: './my-counter.js', to: './my-extension/my-extension.js' }],
},
},
],
rootPath: path.resolve('./demo'),
};
module.exports = {
nodeResolve: true,
watch: true,
open: 'packages/babel-plugin-extend-docs/demo/',
babel: true,
babelConfig: {
overrides: [
{
test: ['./demo/**/*.demo.js'],
plugins: [[path.resolve('./'), extendDocsConfig]],
},
],
},
};

View file

@ -0,0 +1,5 @@
module.exports = {
nodeResolve: true,
watch: true,
open: 'packages/babel-plugin-extend-docs/demo/',
};

View file

@ -0,0 +1,69 @@
import { LitElement, html, css } from 'lit-element';
export class MyCounter extends LitElement {
static properties = {
count: { type: Number },
};
static styles = css`
:host {
display: block;
width: 220px;
margin: 0 auto;
}
button,
span {
font-size: 200%;
}
span {
width: 4rem;
display: inline-block;
text-align: center;
}
button {
width: 64px;
height: 64px;
border: none;
border-radius: 10px;
background-color: seagreen;
color: white;
}
h3 {
text-align: center;
}
`;
constructor() {
super();
this.count = 0;
}
inc() {
this.count += 1;
}
dec() {
this.count -= 1;
}
_renderHeader() {
return html`<h3>I am MyCounter</h3> `;
}
_renderIncButton() {
return html`<button @click="${this.inc}">+</button> `;
}
render() {
return html`
${this._renderHeader()}
<button @click="${this.dec}">-</button>
<span>${this.count}</span>
${this._renderIncButton()}
`;
}
}

View file

@ -0,0 +1,3 @@
const babelPlugin = require('./src/babelPluginExtendDocs');
module.exports = babelPlugin;

View file

@ -0,0 +1,34 @@
{
"name": "babel-plugin-extend-docs",
"version": "0.0.0",
"description": "Babel plugin which rewrites imports and templates according to a configuration",
"author": "ing-bank",
"homepage": "https://github.com/ing-bank/lion/",
"license": "MIT",
"publishConfig": {
"access": "public"
},
"repository": {
"type": "git",
"url": "https://github.com/ing-bank/lion.git",
"directory": "packages/babel-plugin-extend-docs"
},
"scripts": {
"prepublishOnly": "../../scripts/npm-prepublish.js",
"start": "es-dev-server -c demo/server.config.js --root-dir ../../",
"start:no-babel": "es-dev-server -c demo/server.no-babel.config.js --root-dir ../../",
"test": "npm run test:node",
"test:node": "mocha test-node",
"test:watch": "mocha test-node --watch"
},
"keywords": [
"babel",
"extend"
],
"main": "index.js",
"files": [
"src",
"test-node",
"*.js"
]
}

View file

@ -0,0 +1,63 @@
/* eslint-disable no-param-reassign */
const {
renameAndStoreImports,
generateImportStatements,
replaceTagImports,
} = require('./handleImports.js');
const { validateOptions } = require('./validateOptions.js');
function replaceTemplateElements({ path, opts }) {
const replaceTag = (value, from, to) =>
value
.replace(new RegExp(`<${from}`, 'g'), `<${to}`)
.replace(new RegExp(`${from}>`, 'g'), `${to}>`);
path.node.quasi.quasis.forEach(quasi => {
opts.changes.forEach(change => {
if (change.tag && quasi.value.raw.match(change.tag.from)) {
quasi.value.raw = replaceTag(quasi.value.raw, change.tag.from, change.tag.to);
if (typeof quasi.value.cooked === 'string') {
quasi.value.cooked = replaceTag(quasi.value.cooked, change.tag.from, change.tag.to);
}
}
});
});
}
function insertImportStatements({ imports, path }) {
path.node.body = [...imports, ...path.node.body];
}
module.exports = ({ types: t }) => ({
visitor: {
ImportDeclaration(path, state) {
// If a filePath is not passed explicitly by the user, take the filename provided by babel
// and subtract the rootpath from it, to get the desired filePath relative to the root.
state.filePath = state.opts.__filePath
? state.opts.__filePath
: state.file.opts.filename.replace(state.opts.rootPath, '');
if (path.node.specifiers.length > 0) {
renameAndStoreImports({ path, state, opts: state.opts, types: t });
} else {
replaceTagImports({ path, state, opts: state.opts, types: t });
}
},
TaggedTemplateExpression(path, state) {
if (t.isIdentifier(path.node.tag) && path.node.tag.name === 'html') {
replaceTemplateElements({ path, opts: state.opts });
}
},
Program: {
enter: (path, state) => {
validateOptions(state.opts);
state.importedStorage = [];
state.filePath = '';
},
exit: (path, state) => {
const imports = generateImportStatements({ state, types: t });
insertImportStatements({ imports, path });
},
},
},
});

View file

@ -0,0 +1,96 @@
/* eslint-disable no-param-reassign */
const { joinPaths } = require('./helpers.js');
/**
* -1 because filepath is an absolute path starting with '/' and we turn it into a relative path without a '/' at the start
* @param {*} filePath
*/
function getFolderDepth(filePath) {
return [...filePath.match(new RegExp('/', 'g'))].length - 1;
}
function getImportAs(specifier, newImportName) {
if (specifier.local && specifier.local.name && specifier.local.name !== specifier.imported.name) {
return specifier.local.name;
}
return newImportName;
}
function renameAndStoreImports({ path, state, opts, types: t }) {
for (const specifier of path.node.specifiers) {
let managed = false;
if (t.isIdentifier(specifier.imported) && specifier.type === 'ImportSpecifier') {
for (const change of opts.changes) {
if (specifier.imported.name === change.variable.from) {
for (const { from, to } of change.variable.paths) {
if (managed === false && from === path.node.source.value) {
const relativePart = '../'.repeat(getFolderDepth(state.filePath));
const importAs = getImportAs(specifier, change.variable.to);
const newPath = joinPaths(relativePart, to);
// rename so it replaces all occurrences
path.scope.rename(specifier.local.name, importAs);
if (specifier.imported && specifier.imported.name) {
specifier.imported.name = change.variable.to;
}
state.importedStorage.push({
action: 'change',
specifier,
path: newPath,
});
managed = true;
}
}
}
}
}
if (managed === false) {
state.importedStorage.push({
action: 'keep',
specifier,
path: path.node.source.value,
});
}
}
path.remove();
}
function generateImportStatements({ state, types: t }) {
const statements = {};
for (const imp of state.importedStorage) {
if (!statements[imp.path]) {
statements[imp.path] = [];
}
statements[imp.path].push(imp.specifier);
}
const res = [];
for (const path of Object.keys(statements)) {
const importSpecifiers = statements[path];
const source = t.stringLiteral(path);
res.push(t.importDeclaration(importSpecifiers, source));
}
return res;
}
function replaceTagImports({ path, state, opts, types: t }) {
for (const change of opts.changes) {
if (change.tag && Array.isArray(change.tag.paths) && change.tag.paths.length > 0) {
for (const { from, to } of change.tag.paths) {
if (from === path.node.source.value) {
const relativePart = '../'.repeat(getFolderDepth(state.filePath));
const updatedPath = joinPaths(relativePart, to);
path.node.source = t.stringLiteral(updatedPath);
}
}
}
}
}
module.exports = {
renameAndStoreImports,
generateImportStatements,
replaceTagImports,
};

View file

@ -0,0 +1,19 @@
const path = require('path');
function joinPaths(a, b) {
let joinMe = b;
if (a && a === b.substring(0, a.length)) {
joinMe = b.substring(a.length + 1);
}
const updatedPath = path.join(a, joinMe);
// console.log({ a, b, updatedPath });
if (a === '' && b.startsWith('./')) {
return `./${updatedPath}`;
}
return updatedPath;
}
module.exports = {
joinPaths,
};

View file

@ -0,0 +1,149 @@
const fs = require('fs');
const { joinPaths } = require('./helpers.js');
const tagExample = [
'Should be example:',
' {',
" from: 'my-counter',",
" to: 'my-extension',",
' paths: [',
' {',
" from: './my-counter.js',",
" to: './my-extension/my-extension.js'",
' }',
' ]',
' }',
];
const variableExample = [
'Should be example:',
' {',
" from: 'MyCounter',",
" to: 'MyExtension',",
' paths: [',
' {',
" from: './index.js',",
" to: './my-extension/index.js'",
' }',
' ]',
' }',
];
function formatJsonErrorMessage(json) {
if (!json) {
return '';
}
return `\n ${JSON.stringify(json, null, 2).split('\n').join('\n ')}`;
}
function validatePaths(paths, given, intro, example, options) {
if (!Array.isArray(paths) || (Array.isArray(paths) && paths.length === 0)) {
const errorMsg = [
intro,
'The paths array is missing.',
`Given: ${formatJsonErrorMessage(given)}`,
...example,
].join('\n');
throw new Error(errorMsg);
}
const errorMsg = [
intro,
'The path object is invalid.',
`Given: ${formatJsonErrorMessage(given)}`,
...example,
].join('\n');
for (const pathObj of paths) {
if (typeof pathObj.from !== 'string' || !pathObj.from) {
throw new Error(errorMsg);
}
if (typeof pathObj.to !== 'string' || !pathObj.to) {
throw new Error(errorMsg);
} else if (options.throwOnNonExistingPathToFiles === true) {
const filePath = joinPaths(options.rootPath, pathObj.to);
if (!(fs.existsSync(filePath) && fs.lstatSync(filePath).isFile())) {
throw new Error(
`babel-plugin-extend-docs: Rewriting import from "${pathObj.from}" to "${pathObj.to}" but we could not find a file at "${filePath}".`,
);
}
}
}
}
function validateChanges(changes, options) {
if (!Array.isArray(changes) || (Array.isArray(changes) && changes.length === 0)) {
const errorMsg = [
'babel-plugin-extend-docs: The required changes array is missing.',
`Given: ${formatJsonErrorMessage(changes)}`,
...tagExample,
].join('\n');
throw new Error(errorMsg);
}
for (const change of changes) {
if (change.tag) {
const { tag } = change;
const intro = 'babel-plugin-extend-docs: The provided tag change is not valid.';
const errorMsg = [intro, `Given: ${formatJsonErrorMessage(tag)}`, ...tagExample].join('\n');
if (typeof tag.from !== 'string' || !tag.from) {
throw new Error(errorMsg);
}
if (typeof tag.to !== 'string' || !tag.to) {
throw new Error(errorMsg);
}
validatePaths(tag.paths, tag, intro, tagExample, options);
}
if (change.variable) {
const { variable } = change;
const intro = 'babel-plugin-extend-docs: The provided variable change is not valid.';
const errorMsg = [
intro,
`Given: ${formatJsonErrorMessage(variable)}`,
...variableExample,
].join('\n');
if (typeof variable.from !== 'string' || !variable.from) {
throw new Error(errorMsg);
}
if (typeof variable.to !== 'string' || !variable.to) {
throw new Error(errorMsg);
}
validatePaths(variable.paths, variable, intro, variableExample, options);
}
}
}
function validateOptions(_options) {
const options = {
throwOnNonExistingPathToFiles: true,
throwOnNonExistingRootPath: true,
..._options,
};
if (options.throwOnNonExistingRootPath) {
if (!options.rootPath) {
throw new Error(
`babel-plugin-extend-docs: You need to provide a rootPath option (string)\nExample: rootPath: path.resolve('.')`,
);
}
if (!fs.existsSync(options.rootPath)) {
throw new Error(
`babel-plugin-extend-docs: The provided rootPath "${options.rootPath}" does not exist.`,
);
}
if (!fs.lstatSync(options.rootPath).isDirectory()) {
throw new Error(
`babel-plugin-extend-docs: The provided rootPath "${options.rootPath}" is not a directory.`,
);
}
}
validateChanges(options.changes, {
throwOnNonExistingPathToFiles: options.throwOnNonExistingPathToFiles,
rootPath: options.rootPath,
});
}
module.exports = {
validateOptions,
};

View file

@ -0,0 +1,291 @@
const { expect } = require('chai');
const { executeBabel, baseConfig } = require('./helpers.js');
const testConfig = {
...baseConfig,
throwOnNonExistingPathToFiles: false,
throwOnNonExistingRootPath: false,
__filePath: '/node_module/@lion/input/README.md',
};
describe('babel-plugin-extend-docs', () => {
it('replaces local src class imports (1)', () => {
const code = `import { LionInput } from './src/LionInput.js';`;
const output = `import { WolfInput } from "../../../index.js";`;
expect(executeBabel(code, testConfig)).to.equal(output);
});
it('renames classes everywhere', () => {
const code = [
`import { LionInput } from './src/LionInput.js';`,
`class Foo extends LionInput {}`,
].join('\n');
const output = [
`import { WolfInput } from "../../../index.js";`,
'',
`class Foo extends WolfInput {}`,
].join('\n');
expect(executeBabel(code, testConfig)).to.equal(output);
});
it('replaces local src class imports (2)', () => {
const code = `import { LionInput } from './src/LionInput.js';`;
const output = `import { WolfInput } from "../../../../index.js";`;
const config = {
...testConfig,
__filePath: '/node_module/@lion/input/docs/README.md',
};
expect(executeBabel(code, config)).to.equal(output);
});
it('replaces local src class imports (3)', () => {
const code = `import { LionInput as Foo } from './src/LionInput.js';`;
const output = `import { WolfInput as Foo } from "../../../index.js";`;
expect(executeBabel(code, testConfig)).to.equal(output);
});
it('replaces local src class imports (4)', () => {
const code = [
`import someDefaultHelper, { LionInput, someHelper } from './src/LionInput.js';`,
`import { LionButton } from '@lion/button';`,
].join('\n');
const output = [
`import someDefaultHelper, { someHelper } from "./src/LionInput.js";`,
`import { WolfInput, WolfButton } from "../../../index.js";`,
].join('\n');
expect(executeBabel(code, testConfig)).to.equal(output);
});
it('replaces local src class imports (5)', () => {
const code = `import { LionInput, LionFoo, LionBar, someHelper } from '@lion/input';`;
const output = [
`import { WolfInput, WolfFoo } from "../../../index.js";`,
`import { WolfBar } from "../../../somewhere-else.js";`,
`import { someHelper } from "@lion/input";`,
].join('\n');
const config = {
...testConfig,
changes: [
...baseConfig.changes,
{
description: 'LionFoo',
variable: {
from: 'LionFoo',
to: 'WolfFoo',
paths: [
{
from: '@lion/input',
to: './index.js',
},
],
},
},
{
description: 'LionBar',
variable: {
from: 'LionBar',
to: 'WolfBar',
paths: [
{
from: '@lion/input',
to: './somewhere-else.js',
},
],
},
},
],
__filePath: '/node_module/@lion/input/README.md',
};
expect(executeBabel(code, config)).to.equal(output);
});
it('replaces local src class imports (6)', () => {
const code = `
import { localize } from '@lion/localize';
import { LionInput } from '@lion/input';
`;
const output = [
`import { localize } from "../../../localize.js";`,
`import { WolfInput } from "../../../index.js";`,
].join('\n');
expect(executeBabel(code, testConfig)).to.equal(output);
});
it('allows separate import paths of managed imports', () => {
const code1 = `import { LionInput } from '@lion/input';`;
const code2 = `import { LionInput } from './src/LionInput.js';`;
const output1 = `import { WolfInput } from "../../../index.js";`;
const output2 = `import { WolfInput } from "../../../packages/input/src/WolfInput.js";`;
const config = {
...testConfig,
changes: [
{
description: 'LionInput',
variable: {
from: 'LionInput',
to: 'WolfInput',
paths: [
{
from: '@lion/input',
to: './index.js',
},
{
from: './src/LionInput.js',
to: './packages/input/src/WolfInput.js',
},
],
},
},
],
__filePath: '/node_module/@lion/input/README.md',
};
expect(executeBabel(code1, config)).to.equal(output1);
expect(executeBabel(code2, config)).to.equal(output2);
});
it('replaces local index.js class imports (1)', () => {
const code = `import { LionInput } from './index.js';`;
const output = `import { WolfInput } from "../../../index.js";`;
expect(executeBabel(code, testConfig)).to.equal(output);
});
it('replaces local index.js class imports (2)', () => {
const code = `import { LionInput } from './index.js';`;
const output = `import { WolfInput } from "../../../../index.js";`;
const config = {
...testConfig,
__filePath: '/node_module/@lion/input/docs/README.md',
};
expect(executeBabel(code, config)).to.equal(output);
});
it('works with local index.js class imports with an empty relative path', () => {
const code = `import { LionInput } from './index.js';`;
const output = `import { WolfInput } from "./index.js";`;
const config = {
...testConfig,
__filePath: './README.md',
};
expect(executeBabel(code, config)).to.equal(output);
});
it('replaces `@lion` class imports', () => {
const code = `import { LionInput } from '@lion/input';`;
const output = `import { WolfInput } from "../../../index.js";`;
expect(executeBabel(code, testConfig)).to.equal(output);
});
it('does NOT replace imports no in the config', () => {
const code = `import { FooInput } from '@lion/input';`;
const output = `import { FooInput } from "@lion/input";`;
expect(executeBabel(code, testConfig)).to.equal(output);
});
it('replaces local tag imports', () => {
const code = `import './lion-input.js';`;
const output = `import "../../../__element-definitions/wolf-input.js";`;
expect(executeBabel(code, testConfig)).to.equal(output);
});
it('replaces `@lion` tag imports', () => {
const code = `import '@lion/input/lion-input.js';`;
const output = `import "../../../__element-definitions/wolf-input.js";`;
expect(executeBabel(code, testConfig)).to.equal(output);
});
it('replaces tags in function occurrences', () => {
const code = [
'export const main = () => html`',
` <lion-input \${'hi'} label="First Name"></lion-input>`,
'`;',
].join('\n');
const output = [
'export const main = () => html`',
` <wolf-input \${'hi'} label="First Name"></wolf-input>`,
'`;',
].join('\n');
expect(executeBabel(code, testConfig)).to.equal(output);
});
it('will no touch content of tags', () => {
const code = [
'export const main = () => html`',
` <lion-input \${'hi'} label="lion-input"></lion-input>`,
' <lion-input ',
' label="some label"',
' ></lion-input>',
'`;',
].join('\n');
const output = [
'export const main = () => html`',
` <wolf-input \${'hi'} label="lion-input"></wolf-input>`,
' <wolf-input ',
' label="some label"',
' ></wolf-input>',
'`;',
].join('\n');
expect(executeBabel(code, testConfig)).to.equal(output);
});
it('replaces nested tags in function occurrences', () => {
const code = [
'export const main = () => html`',
' <lion-input label="First Name">',
' ${html`',
' <lion-button></lion-button>',
' `}',
' </lion-input>',
'`;',
].join('\n');
const output = [
'export const main = () => html`',
' <wolf-input label="First Name">',
' ${html`',
' <wolf-button></wolf-button>',
' `}',
' </wolf-input>',
'`;',
].join('\n');
expect(executeBabel(code, testConfig)).to.equal(output);
});
it('replaces tags in classes occurrences', () => {
const code = [
'class Foo extends LitElement {',
' render() {',
' return html`',
' <lion-input some-attribute>',
' <p>light dom</p>',
' <lion-input></lion-input>',
' </lion-input>',
' `;',
' }',
'}',
].join('\n');
const output = [
'class Foo extends LitElement {',
' render() {',
' return html`',
' <wolf-input some-attribute>',
' <p>light dom</p>',
' <wolf-input></wolf-input>',
' </wolf-input>',
' `;',
' }',
'', // babel puts an empty line here?
'}',
].join('\n');
expect(executeBabel(code, testConfig)).to.equal(output);
});
// nice to have
it.skip("doesn't care about namespace imports", () => {
const code = `import * as all from '@lion/input';`;
const output = `
import { notRenameHelper } from "@lion/input";
import { WolfInput } from "../../../index.js";
const all = { LionInput: WolfInput, someHelper };
`;
expect(executeBabel(code, testConfig)).to.equal(output);
});
});

View file

@ -0,0 +1,110 @@
const babel = require('babel-core');
const babelPluginExtendDocs = require('../src/babelPluginExtendDocs.js');
function executeBabel(input, options) {
const result = babel.transform(input, {
plugins: [[babelPluginExtendDocs, options]],
});
return result.code;
}
const baseConfig = {
changes: [
{
description: 'LionInput',
variable: {
from: 'LionInput',
to: 'WolfInput',
paths: [
{
from: './index.js',
to: './index.js',
},
{
from: './src/LionInput.js',
to: './index.js',
},
{
from: '@lion/input',
to: './index.js',
},
],
},
tag: {
from: 'lion-input',
to: 'wolf-input',
paths: [
{
from: './lion-input.js',
to: './__element-definitions/wolf-input.js',
},
{
from: '@lion/input/lion-input.js',
to: './__element-definitions/wolf-input.js',
},
],
},
},
{
description: 'LionButton',
variable: {
from: 'LionButton',
to: 'WolfButton',
paths: [
{
from: './index.js',
to: './index.js',
},
{
from: './src/LionButton.js',
to: './index.js',
},
{
from: '@lion/button',
to: './index.js',
},
],
},
tag: {
from: 'lion-button',
to: 'wolf-button',
paths: [
{
from: './lion-button.js',
to: './__element-definitions/wolf-button.js',
},
{
from: '@lion/button/lion-button.js',
to: './__element-definitions/wolf-button.js',
},
],
},
},
{
description: 'localize',
variable: {
from: 'localize',
to: 'localize',
paths: [
{
from: './index.js',
to: './localize.js',
},
{
from: './src/localize.js',
to: './localize.js',
},
{
from: '@lion/localize',
to: './localize.js',
},
],
},
},
],
};
module.exports = {
executeBabel,
baseConfig,
};

View file

@ -0,0 +1,84 @@
const { expect } = require('chai');
const path = require('path');
const { executeBabel } = require('./helpers.js');
const extendDocsConfig = {
changes: [
{
name: 'MyCounter',
variable: {
from: 'MyCounter',
to: 'MyExtension',
paths: [
{ from: './index.js', to: './my-extension/index.js' },
{ from: './src/MyCounter.js', to: './my-extension/index.js' },
],
},
tag: {
from: 'my-counter',
to: 'my-extension',
paths: [{ from: './my-counter.js', to: './my-extension/my-extension.js' }],
},
},
],
rootPath: path.resolve('./demo'),
__filePath: '/my-app.demo.js',
};
describe('babel-plugin-extend-docs: integration tests', () => {
it('works for the demo', () => {
const code = `import { LitElement, html } from 'lit-element';
import { MyCounter } from './src/MyCounter.js';
import './my-counter.js';
class TenCounter extends MyCounter {
inc() {
this.count += 10;
}
}
customElements.define('ten-counter', TenCounter);
class MyApp extends LitElement {
render() {
return html\`
<h1>Example App</h1>
<hr />
<my-counter></my-counter>
<hr />
<ten-counter></ten-counter>
\`;
}
}
customElements.define('my-app', MyApp);
`;
const output = `import { LitElement, html } from "lit-element";
import { MyExtension } from "./my-extension/index.js";
import "./my-extension/my-extension.js";
class TenCounter extends MyExtension {
inc() {
this.count += 10;
}
}
customElements.define('ten-counter', TenCounter);
class MyApp extends LitElement {
render() {
return html\`
<h1>Example App</h1>
<hr />
<my-extension></my-extension>
<hr />
<ten-counter></ten-counter>
\`;
}
}
customElements.define('my-app', MyApp);`;
expect(executeBabel(code, extendDocsConfig)).to.equal(output);
});
});

View file

@ -0,0 +1,217 @@
const { expect } = require('chai');
const path = require('path');
const { executeBabel, baseConfig } = require('./helpers.js');
function formatJsonErrorMessage(json) {
if (!json) {
return '';
}
return `\n ${JSON.stringify(json, null, 2).split('\n').join('\n ')}`;
}
describe('babel-plugin-extend-docs: validateOptions', () => {
it('throws if no rootPath string is provided', () => {
expect(() => executeBabel('', { ...baseConfig })).to.throw(
`babel-plugin-extend-docs: You need to provide a rootPath option (string)\nExample: rootPath: path.resolve('.')`,
);
});
it('throws if rootPath does not exist', () => {
expect(() => executeBabel('', { ...baseConfig, rootPath: 'something' })).to.throw(
`babel-plugin-extend-docs: The provided rootPath "something" does not exist.`,
);
});
it('throws if rootPath is not a directory', () => {
const rootPath = path.resolve('./index.js');
expect(() => {
executeBabel('', {
...baseConfig,
rootPath,
});
}).to.throw(
`babel-plugin-extend-docs: The provided rootPath "${rootPath}" is not a directory.`,
);
});
it('throws if no changes array is provided', () => {
expect(() => {
executeBabel('', {
rootPath: path.resolve('./'),
});
}).to.throw(
[
'babel-plugin-extend-docs: The required changes array is missing.',
`Given: ${formatJsonErrorMessage(undefined)}`,
'Should be example:',
' {',
" from: 'my-counter',",
" to: 'my-extension',",
' paths: [',
' {',
" from: './my-counter.js',",
" to: './my-extension/my-extension.js'",
' }',
' ]',
' }',
].join('\n'),
);
});
it('throws if tag change does not have a valid to, from, and paths property', () => {
const defaultMsg = ['babel-plugin-extend-docs: The provided tag change is not valid.'];
function tagThrowsErrorFor(tag, msg = defaultMsg) {
expect(() => {
executeBabel('', {
rootPath: path.resolve('./'),
changes: [{ tag }],
});
}).to.throw(
[
...msg,
`Given: ${formatJsonErrorMessage(tag)}`,
'Should be example:',
' {',
" from: 'my-counter',",
" to: 'my-extension',",
' paths: [',
' {',
" from: './my-counter.js',",
" to: './my-extension/my-extension.js'",
' }',
' ]',
' }',
].join('\n'),
);
}
tagThrowsErrorFor({});
tagThrowsErrorFor({ from: '' });
tagThrowsErrorFor({ from: 'my-counter' });
tagThrowsErrorFor({ from: 'my-counter', to: '' });
tagThrowsErrorFor({ from: 'my-counter', to: 'my-extension' }, [
'babel-plugin-extend-docs: The provided tag change is not valid.',
'The paths array is missing.',
]);
tagThrowsErrorFor({ from: 'my-counter', to: 'my-extension', paths: [] }, [
'babel-plugin-extend-docs: The provided tag change is not valid.',
'The paths array is missing.',
]);
const pathMsg = [
'babel-plugin-extend-docs: The provided tag change is not valid.',
'The path object is invalid.',
];
const pathSetup = { from: 'my-counter', to: 'my-extension' };
tagThrowsErrorFor({ ...pathSetup, paths: [{}] }, pathMsg);
tagThrowsErrorFor({ ...pathSetup, paths: [{ from: '' }] }, pathMsg);
tagThrowsErrorFor({ ...pathSetup, paths: [{ from: './index.js' }] }, pathMsg);
tagThrowsErrorFor({ ...pathSetup, paths: [{ to: '' }] }, pathMsg);
tagThrowsErrorFor({ ...pathSetup, paths: [{ to: './index.js' }] }, pathMsg);
tagThrowsErrorFor({ ...pathSetup, paths: [{ from: './index.js', to: '' }] }, pathMsg);
tagThrowsErrorFor({ ...pathSetup, paths: [{ from: '', to: './index.js' }] }, pathMsg);
});
it('throws if variable change does not have a valid to, from, and paths property', () => {
const defaultMsg = ['babel-plugin-extend-docs: The provided variable change is not valid.'];
function variableThrowsErrorFor(variable, msg = defaultMsg) {
expect(() => {
executeBabel('', {
rootPath: path.resolve('./'),
changes: [{ variable }],
});
}).to.throw(
[
...msg,
`Given: ${formatJsonErrorMessage(variable)}`,
'Should be example:',
' {',
" from: 'MyCounter',",
" to: 'MyExtension',",
' paths: [',
' {',
" from: './index.js',",
" to: './my-extension/index.js'",
' }',
' ]',
' }',
].join('\n'),
);
}
variableThrowsErrorFor({});
variableThrowsErrorFor({ from: '' });
variableThrowsErrorFor({ from: 'my-counter' });
variableThrowsErrorFor({ from: 'my-counter', to: '' });
variableThrowsErrorFor({ from: 'my-counter', to: 'my-extension' }, [
'babel-plugin-extend-docs: The provided variable change is not valid.',
'The paths array is missing.',
]);
variableThrowsErrorFor({ from: 'my-counter', to: 'my-extension', paths: [] }, [
'babel-plugin-extend-docs: The provided variable change is not valid.',
'The paths array is missing.',
]);
const pathMsg = [
'babel-plugin-extend-docs: The provided variable change is not valid.',
'The path object is invalid.',
];
const pathSetup = { from: 'my-counter', to: 'my-extension' };
variableThrowsErrorFor({ ...pathSetup, paths: [{}] }, pathMsg);
variableThrowsErrorFor({ ...pathSetup, paths: [{ from: '' }] }, pathMsg);
variableThrowsErrorFor({ ...pathSetup, paths: [{ from: './index.js' }] }, pathMsg);
variableThrowsErrorFor({ ...pathSetup, paths: [{ to: '' }] }, pathMsg);
variableThrowsErrorFor({ ...pathSetup, paths: [{ to: './index.js' }] }, pathMsg);
variableThrowsErrorFor({ ...pathSetup, paths: [{ from: './index.js', to: '' }] }, pathMsg);
variableThrowsErrorFor({ ...pathSetup, paths: [{ from: '', to: './index.js' }] }, pathMsg);
});
it('throws if "to path" could not be found on file system', () => {
expect(() => {
executeBabel('', {
changes: [
{
tag: {
from: 'lion-input',
to: 'wolf-input',
paths: [
{
from: './lion-input.js',
to: './non-existing/wolf-input.js',
},
],
},
},
],
rootPath: path.resolve('./'),
});
}).to.throw(
[
'babel-plugin-extend-docs: Rewriting import from "./lion-input.js" to "./non-existing/wolf-input.js" but we ',
`could not find a file at "${path.resolve('./')}/non-existing/wolf-input.js".`,
].join(''),
);
});
it('does NOT throws if "to path" could be found on file system', () => {
expect(() => {
executeBabel('', {
changes: [
{
tag: {
from: 'lion-input',
to: 'wolf-input',
paths: [
{
from: './lion-input.js',
to: path.resolve('./test-node/validateOptions.test.js'),
},
],
},
},
],
rootPath: path.resolve('./'),
});
}).to.not.throw();
});
});

540
yarn.lock
View file

@ -2120,48 +2120,47 @@
lit-element "^2.2.1"
"@mdx-js/loader@^1.5.1":
version "1.6.0"
resolved "https://registry.yarnpkg.com/@mdx-js/loader/-/loader-1.6.0.tgz#d04b598332dfb5e7674e7cb6d4a73ba5258b1ae9"
integrity sha512-rgXFDZ8B6f+MuMlJMOGAknv0OzK52AB8WKRz98N+pQnQntRCbosjOsUTwXftfvir2xQSigXybWHe6axsXplVHg==
version "1.5.8"
resolved "https://registry.yarnpkg.com/@mdx-js/loader/-/loader-1.5.8.tgz#3d1c4031b934c03309cabbbfe01628f3960e3221"
integrity sha512-Tmrx1ZSTDEBF6oBG6aoEmLNhKVvLqfCQe7mpnTFDjAG0O26E96m45Saj/FJkl373ulJ8BRED2EamNjejrKoeJQ==
dependencies:
"@mdx-js/mdx" "^1.6.0"
"@mdx-js/react" "^1.6.0"
loader-utils "2.0.0"
"@mdx-js/mdx" "^1.5.8"
"@mdx-js/react" "^1.5.8"
loader-utils "1.2.3"
"@mdx-js/mdx@^1.5.1", "@mdx-js/mdx@^1.6.0":
version "1.6.0"
resolved "https://registry.yarnpkg.com/@mdx-js/mdx/-/mdx-1.6.0.tgz#176c7851be2092afd0cf8c10ce41ed21c30512b5"
integrity sha512-e4RZtMWU3jM0mA02fL0fvAOcxzGMTL8awDUHv/7bbU7z5JnfMAX4wSvR3Mp2y0J+hNjQ723696CP5zL92xVjyw==
"@mdx-js/mdx@^1.5.1", "@mdx-js/mdx@^1.5.8":
version "1.5.8"
resolved "https://registry.yarnpkg.com/@mdx-js/mdx/-/mdx-1.5.8.tgz#40740eaf0b0007b461cee8df13a7ae5a1af8064a"
integrity sha512-OzanPTN0p9GZOEVeEuEa8QsjxxGyfFOOnI/+V1oC1su9UIN4KUg1k4n/hWTZC+VZhdW1Lfj6+Ho8nIs6L+pbDA==
dependencies:
"@babel/core" "7.9.0"
"@babel/core" "7.8.4"
"@babel/plugin-syntax-jsx" "7.8.3"
"@babel/plugin-syntax-object-rest-spread" "7.8.3"
"@mdx-js/util" "^1.6.0"
babel-plugin-apply-mdx-type-prop "^1.6.0"
babel-plugin-extract-import-names "^1.6.0"
"@mdx-js/util" "^1.5.8"
babel-plugin-apply-mdx-type-prop "^1.5.8"
babel-plugin-extract-import-names "^1.5.8"
camelcase-css "2.0.1"
detab "2.0.3"
hast-util-raw "5.0.2"
lodash.uniq "4.5.0"
mdast-util-to-hast "8.2.0"
remark-footnotes "1.0.0"
remark-mdx "^1.6.0"
remark-parse "8.0.1"
remark-squeeze-paragraphs "4.0.0"
mdast-util-to-hast "7.0.0"
remark-mdx "^1.5.8"
remark-parse "7.0.2"
remark-squeeze-paragraphs "3.0.4"
style-to-object "0.3.0"
unified "9.0.0"
unified "8.4.2"
unist-builder "2.0.3"
unist-util-visit "2.0.2"
"@mdx-js/react@^1.5.1", "@mdx-js/react@^1.6.0":
version "1.6.0"
resolved "https://registry.yarnpkg.com/@mdx-js/react/-/react-1.6.0.tgz#96ec0c153beca0e1fc7111460f7b6982f092aeb4"
integrity sha512-Sn9Rm7/C02PzrpzusM12etSMdZHFUNJGgY1t7nR8Ds10S9hnFKWxnQ1J2b4YrQfzRKn1fOm4wv/KAEUy3oubPA==
"@mdx-js/react@^1.5.1", "@mdx-js/react@^1.5.8":
version "1.5.8"
resolved "https://registry.yarnpkg.com/@mdx-js/react/-/react-1.5.8.tgz#fc38fe0eb278ae24666b2df3c751e726e33f5fac"
integrity sha512-L3rehITVxqDHOPJFGBSHKt3Mv/p3MENYlGIwLNYU89/iVqTLMD/vz8hL9RQtKqRoMbKuWpzzLlKIObqJzthNYg==
"@mdx-js/util@^1.6.0":
version "1.6.0"
resolved "https://registry.yarnpkg.com/@mdx-js/util/-/util-1.6.0.tgz#896eace2b34238320521c0a92180c349942cd8f6"
integrity sha512-zzGMtKnc28voDQ4LZFczZzwkm5VwwF7ZbC5iePaWFaF+kD+ekPVdronJEOMFK9SUEKUbmc31Bz81rtS6264z4w==
"@mdx-js/util@^1.5.8":
version "1.5.8"
resolved "https://registry.yarnpkg.com/@mdx-js/util/-/util-1.5.8.tgz#cbadda0378af899c17ce1aa69c677015cab28448"
integrity sha512-a7Gjjw8bfBSertA/pTWBA/9WKEhgaSxvQE2NTSUzaknrzGFOhs4alZSHh3RHmSFdSWv5pUuzAgsWseMLhWEVkQ==
"@mrmlnc/readdir-enhanced@^2.2.1":
version "2.2.1"
@ -2272,9 +2271,9 @@
universal-user-agent "^4.0.0"
"@octokit/types@^2.0.0", "@octokit/types@^2.0.1", "@octokit/types@^2.11.1":
version "2.12.2"
resolved "https://registry.yarnpkg.com/@octokit/types/-/types-2.12.2.tgz#e9fbffa294adb54140946d436da9f73bc94b169c"
integrity sha512-1GHLI/Jll3j6F0GbYyZPFTcHZMGjAiRfkTEoRUyaVVk2IWbDdwEiClAJvXzfXCDayuGSNCqAUH8lpjZtqW9GDw==
version "2.11.1"
resolved "https://registry.yarnpkg.com/@octokit/types/-/types-2.11.1.tgz#bd5b059596b42845be3f8e66065667aff8c8bf8b"
integrity sha512-QaLoLkmFdfoNbk3eOzPv7vKrUY0nRJIYmZDoz/pTer4ICpqu80aSQTVHnnUxEFuURCiidig76CcxUOYC/bY3RQ==
dependencies:
"@types/node" ">= 8"
@ -2298,7 +2297,39 @@
rollup-plugin-terser "^5.1.0"
rollup-plugin-workbox "^4.0.0"
"@open-wc/building-utils@^2.16.2", "@open-wc/building-utils@^2.16.4":
"@open-wc/building-utils@^2.16.2", "@open-wc/building-utils@^2.16.3":
version "2.16.3"
resolved "https://registry.yarnpkg.com/@open-wc/building-utils/-/building-utils-2.16.3.tgz#f512d68198c31458849c79111fa9d3f24f03049d"
integrity sha512-lO/HD2wEl2avRSgqISeP4S1zPQEGRQ/+Zh8RBk9AggDma3uPiRU0RbuRvhunmu7hFWVDBj5o1FRJ7xJ94AWCnw==
dependencies:
"@babel/core" "^7.9.0"
"@babel/plugin-syntax-dynamic-import" "^7.8.3"
"@webcomponents/shadycss" "^1.9.4"
"@webcomponents/webcomponentsjs" "^2.4.0"
arrify "^2.0.1"
browserslist "^4.9.1"
chokidar "^3.0.0"
clean-css "^4.2.1"
clone "^2.1.2"
core-js-bundle "^3.6.0"
deepmerge "^4.2.2"
es-module-shims "^0.4.6"
html-minifier "^4.0.0"
lru-cache "^5.1.1"
minimatch "^3.0.4"
parse5 "^5.1.1"
path-is-inside "^1.0.2"
regenerator-runtime "^0.13.3"
resolve "^1.11.1"
rimraf "^3.0.2"
shady-css-scoped-element "^0.0.2"
systemjs "^4.0.0"
terser "^4.6.7"
valid-url "^1.0.9"
whatwg-fetch "^3.0.0"
whatwg-url "^7.0.0"
"@open-wc/building-utils@^2.16.4":
version "2.16.4"
resolved "https://registry.yarnpkg.com/@open-wc/building-utils/-/building-utils-2.16.4.tgz#10d64e0d2b92c017caf47a57991f8b1eef91c634"
integrity sha512-ByknIanbo2wSpNs7gHy/hBHmPOO91IOJCDravSNreK88XdTd4vnCkx0DrRltgwvPIg7GVHWv/NFfSfWecRrh4Q==
@ -2338,10 +2369,10 @@
"@open-wc/semantic-dom-diff" "^0.13.16"
"@types/chai" "^4.1.7"
"@open-wc/dedupe-mixin@^1.2.1", "@open-wc/dedupe-mixin@^1.2.17":
version "1.2.17"
resolved "https://registry.yarnpkg.com/@open-wc/dedupe-mixin/-/dedupe-mixin-1.2.17.tgz#50fb903fc8785639487d7987caae45d7bba08ec7"
integrity sha512-9A3WohqNxEloJa4y1DuBL5zH12cNRNW1vsrkiaLMnOGuQdhibs2XY1oliudsKpvIeNjDXRVRPUdIIzn65BypCw==
"@open-wc/dedupe-mixin@^1.2.1", "@open-wc/dedupe-mixin@^1.2.16":
version "1.2.16"
resolved "https://registry.yarnpkg.com/@open-wc/dedupe-mixin/-/dedupe-mixin-1.2.16.tgz#ec543814d3f4396dfe6e5f560c6d26ef274acc4c"
integrity sha512-7FMRmUyxAmNqFN0Vm5/yLIwxkD3UO97r10ymZc/nz9YyPksfHk0CxjCM4upDBzte5F6qyomhMW5POCr1c7/6vw==
"@open-wc/demoing-storybook@^1.10.4":
version "1.15.2"
@ -2380,28 +2411,27 @@
eslint-plugin-no-only-tests "^2.3.1"
eslint-plugin-wc "^1.2.0"
"@open-wc/karma-esm@^2.13.28":
version "2.13.28"
resolved "https://registry.yarnpkg.com/@open-wc/karma-esm/-/karma-esm-2.13.28.tgz#17a4551bdc48936df8096ae4bb51b6f1b6855fb5"
integrity sha512-Qq77hJRQkRHg2XqBIJQxqslaiz5iqoU1VqkR15NfQsvLEdEpS/2kZBPGQDw08kBw/COhix44F6h6TYBDxY5qrA==
"@open-wc/karma-esm@^2.13.23":
version "2.13.23"
resolved "https://registry.yarnpkg.com/@open-wc/karma-esm/-/karma-esm-2.13.23.tgz#bd676154cf4f987f980d3d601bb1277fe3f09779"
integrity sha512-UnC0Vy06F5doojitKIkG+UMbvJBqfRf6o5bdcXaOAd+7SpvpGRwmOq9+/4mkqzIKe/EIiTKc2SoCIh82JI0CTw==
dependencies:
"@open-wc/building-utils" "^2.16.4"
"@open-wc/building-utils" "^2.16.3"
babel-plugin-istanbul "^5.1.4"
chokidar "^3.0.0"
deepmerge "^4.2.2"
es-dev-server "^1.47.0"
es-dev-server "^1.46.2"
minimatch "^3.0.4"
node-fetch "^2.6.0"
polyfills-loader "^1.5.6"
portfinder "^1.0.21"
request "^2.88.0"
"@open-wc/scoped-elements@^1.0.3", "@open-wc/scoped-elements@^1.1.1":
version "1.1.1"
resolved "https://registry.yarnpkg.com/@open-wc/scoped-elements/-/scoped-elements-1.1.1.tgz#732744dac4d029ffacdeb169d85855714eda9d0c"
integrity sha512-Fx9bFOA14xGeNFQpSeyp6GmqW1vJyETr1qlem9pDS3hlK/HpWUtoBRAPyo4yexjY+aeSsenUeAYDXzPWQgeWXw==
"@open-wc/scoped-elements@^1.0.3":
version "1.0.8"
resolved "https://registry.yarnpkg.com/@open-wc/scoped-elements/-/scoped-elements-1.0.8.tgz#4bed4c810cb775b8567b7571e8799630b00fa882"
integrity sha512-eM6MPG0kArvFdbRUTaOFR9/oUIn6O0GxlGy/T22PSB7flaDWKm6eJtn/Xn6zpWc9a6n84sOq9CWv8Y817NiTRA==
dependencies:
"@open-wc/dedupe-mixin" "^1.2.17"
"@open-wc/dedupe-mixin" "^1.2.16"
lit-html "^1.0.0"
"@open-wc/semantic-dom-diff@^0.13.16":
@ -2409,39 +2439,31 @@
resolved "https://registry.yarnpkg.com/@open-wc/semantic-dom-diff/-/semantic-dom-diff-0.13.21.tgz#718b9ec5f9a98935fc775e577ad094ae8d8b7dea"
integrity sha512-BONpjHcGX2zFa9mfnwBCLEmlDsOHzT+j6Qt1yfK3MzFXFtAykfzFjAgaxPetu0YbBlCfXuMlfxI4vlRGCGMvFg==
"@open-wc/semantic-dom-diff@^0.17.9":
version "0.17.9"
resolved "https://registry.yarnpkg.com/@open-wc/semantic-dom-diff/-/semantic-dom-diff-0.17.9.tgz#15ed61dfdf7a01ebbf21755527e25c90c78bf5e2"
integrity sha512-wO4xM3FhLmGGZM3wDexUPFb55tqVX45LJQ9l3uNKj1Roi0/aV1KjIohdE2J0zUJivfCxAWo1Dy45hNkCHO4CVA==
dependencies:
"@types/chai" "^4.2.11"
"@open-wc/semantic-dom-diff@^0.17.7":
version "0.17.7"
resolved "https://registry.yarnpkg.com/@open-wc/semantic-dom-diff/-/semantic-dom-diff-0.17.7.tgz#94b7a406275b786e525a6f9b2005f2bc0b2e9782"
integrity sha512-7SyZLBoXxYMIq2mQh3kJ80a09+M+ZpOiobBpwbW/8TKZEoOriB+eWAej5yPj6bM/XvUfn4y725vyS58U+GBeSw==
"@open-wc/testing-helpers@^1.0.0", "@open-wc/testing-helpers@^1.8.1":
version "1.8.1"
resolved "https://registry.yarnpkg.com/@open-wc/testing-helpers/-/testing-helpers-1.8.1.tgz#e523352f911f273dc4d7cfc2405c8eb886f0be59"
integrity sha512-gvTD5BrXdm0LEZbuy/4XweDjbdTsmZVpuK2172lkwCmoia1VaMvWL1iO7mBWZiACK5SJnBSWy6VX2GkaDHcUoQ==
dependencies:
"@open-wc/scoped-elements" "^1.1.1"
"@open-wc/testing-helpers@^1.0.0", "@open-wc/testing-helpers@^1.7.1":
version "1.7.1"
resolved "https://registry.yarnpkg.com/@open-wc/testing-helpers/-/testing-helpers-1.7.1.tgz#e93a4931e0d117deb7185ce9ea0acc87f6de47c0"
integrity sha512-v7AYqIGA50mFfwuZNqCxB0ZWI+aioZtiprBMl5bZT4eRMRz876jRMiX9y327RwwisGie6+HDIJHwhWjrd1GdOA==
"@open-wc/testing-karma-bs@^1.3.30":
version "1.3.60"
resolved "https://registry.yarnpkg.com/@open-wc/testing-karma-bs/-/testing-karma-bs-1.3.60.tgz#de3db76a7b3cb4ddd6d8ee8cb7fb6f6458710576"
integrity sha512-kRFXP+C7ERCZ5U+kHETFJ3xpqbnclA9Fyvbk48FblKXeWD5hj8akfXStF6drYt0+ppxjQA0EHUVkU9OdsjoFIg==
version "1.3.56"
resolved "https://registry.yarnpkg.com/@open-wc/testing-karma-bs/-/testing-karma-bs-1.3.56.tgz#cf7559f15d5fadba3ce76d56a55e5ef013d70289"
integrity sha512-pdni8cmFj7GMwQYOkm2UN6pT2S4JZh2r6w7ACGPGKAe3VMgdGz2esWS9j3q10Ry00wnEOC/bFybU6u6z8tYDuQ==
dependencies:
"@open-wc/testing-karma" "^3.3.17"
"@open-wc/testing-karma" "^3.3.12"
"@types/node" "^11.13.0"
karma-browserstack-launcher "^1.0.0"
"@open-wc/testing-karma@^3.2.30", "@open-wc/testing-karma@^3.3.17":
version "3.3.17"
resolved "https://registry.yarnpkg.com/@open-wc/testing-karma/-/testing-karma-3.3.17.tgz#3104083acd843906802eb69959025eb42b8007e7"
integrity sha512-dFjXua5/edY7BAWInXF0URxOIDKpyCnU/TUfbZGo2ZDi0ZkSHpeE6sax/bg1T/ymTBWgg1tPqP+IP7he1A7ZGA==
"@open-wc/testing-karma@^3.2.30", "@open-wc/testing-karma@^3.3.12":
version "3.3.12"
resolved "https://registry.yarnpkg.com/@open-wc/testing-karma/-/testing-karma-3.3.12.tgz#c6e3dc0415789b985369aa4c0ce6a0806845ff43"
integrity sha512-Hl0VGwBUQKuyuDrtr2dLi1SdD/BbkImuuE/Ieui37RyRevZy+QH97dIHvHLOSyrCqzaEzV9ePvxiPc7lEHnYIQ==
dependencies:
"@open-wc/karma-esm" "^2.13.28"
"@types/karma" "^5.0.0"
"@types/karma-coverage-istanbul-reporter" "^2.1.0"
"@types/karma-mocha" "^1.3.0"
"@types/karma-mocha-reporter" "^2.2.0"
"@open-wc/karma-esm" "^2.13.23"
axe-core "^3.3.1"
karma "^4.1.0"
karma-chrome-launcher "^3.1.0"
@ -2462,14 +2484,14 @@
webpack "^4.28.0"
"@open-wc/testing@^2.5.0":
version "2.5.15"
resolved "https://registry.yarnpkg.com/@open-wc/testing/-/testing-2.5.15.tgz#3062c17e2aca05e58c33a36b0bb2e0a3941a692a"
integrity sha512-rXuwa3Kf7NE7jhoYgzJVNDQQKb8guWLUCxOrhZcX0QaYIaDbNhierxLtbrpu9z78Y5PvcbwaH+ekO2jO44lxfQ==
version "2.5.11"
resolved "https://registry.yarnpkg.com/@open-wc/testing/-/testing-2.5.11.tgz#97c455ade0645cd2c83b7a902db4ea072f8523d0"
integrity sha512-QtLA5jGpfEJOoC0ka2OAqRAAZ0/pbgWPVLzgKPu//OC3CDxvVgKdEObW9pXVKpti5oLa7NRMxeJcTMkE4aO68Q==
dependencies:
"@open-wc/chai-dom-equals" "^0.12.36"
"@open-wc/semantic-dom-diff" "^0.17.9"
"@open-wc/testing-helpers" "^1.8.1"
"@types/chai" "^4.2.11"
"@open-wc/semantic-dom-diff" "^0.17.7"
"@open-wc/testing-helpers" "^1.7.1"
"@types/chai" "^4.1.7"
"@types/chai-dom" "^0.0.9"
"@types/mocha" "^5.0.0"
"@types/sinon-chai" "^3.2.3"
@ -2894,7 +2916,7 @@
dependencies:
"@types/chai" "*"
"@types/chai@*", "@types/chai@^4.1.7", "@types/chai@^4.2.11":
"@types/chai@*", "@types/chai@^4.1.7":
version "4.2.11"
resolved "https://registry.yarnpkg.com/@types/chai/-/chai-4.2.11.tgz#d3614d6c5f500142358e6ed24e1bf16657536c50"
integrity sha512-t7uW6eFafjO+qJ3BIV2gGUyZs27egcNRkUdalkud+Qa3+kg//f129iuOFivHDXQ+vnU3fDXuwgv0cqMCbcE8sw==
@ -2958,33 +2980,6 @@
"@types/istanbul-lib-coverage" "*"
"@types/istanbul-lib-report" "*"
"@types/karma-coverage-istanbul-reporter@^2.1.0":
version "2.1.0"
resolved "https://registry.yarnpkg.com/@types/karma-coverage-istanbul-reporter/-/karma-coverage-istanbul-reporter-2.1.0.tgz#cc913da37827a8d2149021dbebd294a5db01388e"
integrity sha512-r6y5GgvSUjAhztwDWpRxiZV+Q6knsudGQtF3/ri80AFyHawD0LC9Oz64ZhfexRU0EYWpU3hQJl35IjgTLGtvUg==
"@types/karma-mocha-reporter@^2.2.0":
version "2.2.0"
resolved "https://registry.yarnpkg.com/@types/karma-mocha-reporter/-/karma-mocha-reporter-2.2.0.tgz#54b22a7375e695110974ae4c43b7483e34680e36"
integrity sha512-dsn9iXtwP3HzBCTkGS++1KLCzkhBWoz9fql8WOAcCGDYHlDlNL43R9DklPcNydl1i0/UMh48a0dPrT8b7kKuxw==
dependencies:
"@types/karma" "*"
"@types/karma-mocha@^1.3.0":
version "1.3.0"
resolved "https://registry.yarnpkg.com/@types/karma-mocha/-/karma-mocha-1.3.0.tgz#1163badc60ba22342964918be0a1a2eee097bdf1"
integrity sha512-q7JAJ6oqtMph1/2fpwckutRQXzukvSAJf3ZNIbpOIX1uPktnenDxdqJdpFz7LUMEr+X9Soul3KkHvSR17sPDKQ==
dependencies:
"@types/karma" "*"
"@types/karma@*", "@types/karma@^5.0.0":
version "5.0.0"
resolved "https://registry.yarnpkg.com/@types/karma/-/karma-5.0.0.tgz#6750ffc633c0fbc63dfb725146f198e8c3afcd08"
integrity sha512-5quuLnxdJWkzJCEwFatOClM6O7EkeDWfXltGySb01LQnBVjtbLzIky9JLW0IKt+JfzurUjwj7b7Sb/Omsx4QYA==
dependencies:
"@types/node" "*"
log4js "^4.0.0"
"@types/minimatch@*", "@types/minimatch@^3.0.3":
version "3.0.3"
resolved "https://registry.yarnpkg.com/@types/minimatch/-/minimatch-3.0.3.tgz#3dca0e3f33b200fc7d1139c0cd96c1268cadfd9d"
@ -2996,14 +2991,14 @@
integrity sha512-NYrtPht0wGzhwe9+/idPaBB+TqkY9AhTvOLMkThm0IoEfLaiVQZwBwyJ5puCkO3AUCWrmcoePjp2mbFocKy4SQ==
"@types/node@*", "@types/node@>= 8":
version "13.13.4"
resolved "https://registry.yarnpkg.com/@types/node/-/node-13.13.4.tgz#1581d6c16e3d4803eb079c87d4ac893ee7501c2c"
integrity sha512-x26ur3dSXgv5AwKS0lNfbjpCakGIduWU1DU91Zz58ONRWrIKGunmZBNv4P7N+e27sJkiGDsw/3fT4AtsqQBrBA==
version "13.13.0"
resolved "https://registry.yarnpkg.com/@types/node/-/node-13.13.0.tgz#30d2d09f623fe32cde9cb582c7a6eda2788ce4a8"
integrity sha512-WE4IOAC6r/yBZss1oQGM5zs2D7RuKR6Q+w+X2SouPofnWn+LbCqClRyhO3ZE7Ix8nmFgo/oVuuE01cJT2XB13A==
"@types/node@^11.13.0":
version "11.15.12"
resolved "https://registry.yarnpkg.com/@types/node/-/node-11.15.12.tgz#bf5d348c4d37c026029ad81e874946fa6ad100ba"
integrity sha512-iefeBfpmhoYaZfj+gJM5z9H9eiTwhuzhPsJgH/flx4HP2SBI2FNDra1D3vKljqPLGDr9Cazvh9gP9Xszc30ncA==
version "11.15.11"
resolved "https://registry.yarnpkg.com/@types/node/-/node-11.15.11.tgz#c428d8327dcbd2106d559433728ba261e27bf7c0"
integrity sha512-TyWPoOfqHw3zu61/+2nNuUPhk3XUZnw271ot5K5dhcdSPeO35AjMHU+oBXfvsqdrA+Owwa2Z1999E4m2ENtdrg==
"@types/parse-json@^4.0.0":
version "4.0.0"
@ -3016,9 +3011,9 @@
integrity sha512-KfRL3PuHmqQLOG+2tGpRO26Ctg+Cq1E01D2DMriKEATHgWLfeNDmq9e29Q9WIky0dQ3NPkd1mzYH8Lm936Z9qw==
"@types/reach__router@^1.2.3":
version "1.3.5"
resolved "https://registry.yarnpkg.com/@types/reach__router/-/reach__router-1.3.5.tgz#14e1e981cccd3a5e50dc9e969a72de0b9d472f6d"
integrity sha512-h0NbqXN/tJuBY/xggZSej1SKQEstbHO7J/omt1tYoFGmj3YXOodZKbbqD4mNDh7zvEGYd7YFrac1LTtAr3xsYQ==
version "1.3.4"
resolved "https://registry.yarnpkg.com/@types/reach__router/-/reach__router-1.3.4.tgz#98ef393d06f59d296b5c021ba94b94e5fc463245"
integrity sha512-DZgYfxUIlVSjvf0AvBbYNbpXLrTFNNpU1HrvCRbnMtx3nvGUUWC1/zlAe4dD4FCPFtc+LQuIPEsDiTb0zQkthg==
dependencies:
"@types/history" "*"
"@types/react" "*"
@ -3328,7 +3323,7 @@ acorn@^4.0.4, acorn@~4.0.2:
resolved "https://registry.yarnpkg.com/acorn/-/acorn-4.0.13.tgz#105495ae5361d697bd195c825192e1ad7f253787"
integrity sha1-EFSVrlNh1pe9GVyCUZLhrX8lN4c=
acorn@^6.4.1:
acorn@^6.2.1:
version "6.4.1"
resolved "https://registry.yarnpkg.com/acorn/-/acorn-6.4.1.tgz#531e58ba3f51b9dacb9a6646ca4debf5b14ca474"
integrity sha512-ZVA9k326Nwrj3Cj9jlh3wGFutC2ZornPNARZwsNYqQYgN0EsV2d53w5RN/co65Ohn4sUAUtb1rSUAOD6XN9idA==
@ -3833,13 +3828,13 @@ babel-extract-comments@^1.0.0:
dependencies:
babylon "^6.18.0"
babel-plugin-apply-mdx-type-prop@^1.6.0:
version "1.6.0"
resolved "https://registry.yarnpkg.com/babel-plugin-apply-mdx-type-prop/-/babel-plugin-apply-mdx-type-prop-1.6.0.tgz#81955e1d6594dde24f36ef57905d149c33543a7e"
integrity sha512-wtYaotCmckVs9yiVnubiwE5XjmKOd/cFXLpQJoPzE768HPyrv9FVCauSidjxbrJvZv6wLS+yrfOpZdzGAeI8XA==
babel-plugin-apply-mdx-type-prop@^1.5.8:
version "1.5.8"
resolved "https://registry.yarnpkg.com/babel-plugin-apply-mdx-type-prop/-/babel-plugin-apply-mdx-type-prop-1.5.8.tgz#f5ff6d9d7a7fcde0e5f5bd02d3d3cd10e5cca5bf"
integrity sha512-xYp5F9mAnZdDRFSd1vF3XQ0GQUbIulCpnuht2jCmK30GAHL8szVL7TgzwhEGamQ6yJmP/gEyYNM9OR5D2n26eA==
dependencies:
"@babel/helper-plugin-utils" "7.8.3"
"@mdx-js/util" "^1.6.0"
"@mdx-js/util" "^1.5.8"
babel-plugin-bundled-import-meta@^0.3.0:
version "0.3.2"
@ -3872,10 +3867,10 @@ babel-plugin-emotion@^10.0.27:
find-root "^1.1.0"
source-map "^0.5.7"
babel-plugin-extract-import-names@^1.6.0:
version "1.6.0"
resolved "https://registry.yarnpkg.com/babel-plugin-extract-import-names/-/babel-plugin-extract-import-names-1.6.0.tgz#37de43583c1b3e80fe9a7c5bc05f414c70f9e9c8"
integrity sha512-Uo+g6ykLCYK0I8jxMH3kovHphyHFp4niMmz1+dGCkYblLe3lpYnPDP39JPAh3lbm/c2bLyRcDQHRBgmoUO6fhQ==
babel-plugin-extract-import-names@^1.5.8:
version "1.5.8"
resolved "https://registry.yarnpkg.com/babel-plugin-extract-import-names/-/babel-plugin-extract-import-names-1.5.8.tgz#418057261346451d689dff5036168567036b8cf6"
integrity sha512-LcLfP8ZRBZMdMAXHLugyvvd5PY0gMmLMWFogWAUsG32X6TYW2Eavx+il2bw73KDbW+UdCC1bAJ3NuU25T1MI3g==
dependencies:
"@babel/helper-plugin-utils" "7.8.3"
@ -4212,7 +4207,17 @@ browserslist-useragent@^3.0.2:
semver "^7.3.2"
useragent "^2.3.0"
browserslist@^4.0.0, browserslist@^4.12.0, browserslist@^4.8.5, browserslist@^4.9.1:
browserslist@^4.0.0, browserslist@^4.8.5, browserslist@^4.9.1:
version "4.11.1"
resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.11.1.tgz#92f855ee88d6e050e7e7311d987992014f1a1f1b"
integrity sha512-DCTr3kDrKEYNw6Jb9HFxVLQNaue8z+0ZfRBRjmCunKDEXEBajKDj2Y+Uelg+Pi29OnvaSGwjOsnRyNEkXzHg5g==
dependencies:
caniuse-lite "^1.0.30001038"
electron-to-chromium "^1.3.390"
node-releases "^1.1.53"
pkg-up "^2.0.0"
browserslist@^4.12.0:
version "4.12.0"
resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.12.0.tgz#06c6d5715a1ede6c51fc39ff67fd647f740b656d"
integrity sha512-UH2GkcEDSI0k/lRkuDSzFl9ZZ87skSy9w2XAn1MsZnL+4c4rqbBd3e82UWHbYDpztABrPBhZsTEeuxVfHppqDg==
@ -4509,7 +4514,12 @@ caniuse-api@^3.0.0:
lodash.memoize "^4.1.2"
lodash.uniq "^4.5.0"
caniuse-lite@^1.0.0, caniuse-lite@^1.0.30001033, caniuse-lite@^1.0.30001043:
caniuse-lite@^1.0.0, caniuse-lite@^1.0.30001033, caniuse-lite@^1.0.30001038:
version "1.0.30001043"
resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001043.tgz#1b561de27aefbe6ff99e41866b8d7d87840c513b"
integrity sha512-MrBDRPJPDBYwACtSQvxg9+fkna5jPXhJlKmuxenl/ml9uf8LHKlDmLpElu+zTW/bEz7lC1m0wTDD7jiIB+hgFg==
caniuse-lite@^1.0.30001043:
version "1.0.30001048"
resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001048.tgz#4bb4f1bc2eb304e5e1154da80b93dee3f1cf447e"
integrity sha512-g1iSHKVxornw0K8LG9LLdf+Fxnv7T1Z+mMsf0/YYLclQX4Cd522Ap0Lrw6NFqHgezit78dtyWxzlV2Xfc7vgRg==
@ -5888,6 +5898,11 @@ ee-first@1.1.1:
resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d"
integrity sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=
electron-to-chromium@^1.3.390:
version "1.3.413"
resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.413.tgz#9c457a4165c7b42e59d66dff841063eb9bfe5614"
integrity sha512-Jm1Rrd3siqYHO3jftZwDljL2LYQafj3Kki5r+udqE58d0i91SkjItVJ5RwlJn9yko8i7MOcoidVKjQlgSdd1hg==
electron-to-chromium@^1.3.413:
version "1.3.420"
resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.420.tgz#e95b731f475433d29d2835a200dab413e45ba819"
@ -5926,6 +5941,11 @@ emoji-regex@^8.0.0:
resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37"
integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==
emojis-list@^2.0.0:
version "2.1.0"
resolved "https://registry.yarnpkg.com/emojis-list/-/emojis-list-2.1.0.tgz#4daa4d9db00f9819880c79fa457ae5b09a1fd389"
integrity sha1-TapNnbAPmBmIDHn6RXrlsJof04k=
emojis-list@^3.0.0:
version "3.0.0"
resolved "https://registry.yarnpkg.com/emojis-list/-/emojis-list-3.0.0.tgz#5570662046ad29e2e916e71aae260abdff4f6a78"
@ -6078,10 +6098,10 @@ es-abstract@^1.17.0, es-abstract@^1.17.0-next.1, es-abstract@^1.17.2, es-abstrac
string.prototype.trimleft "^2.1.1"
string.prototype.trimright "^2.1.1"
es-dev-server@^1.46.1, es-dev-server@^1.47.0:
version "1.47.0"
resolved "https://registry.yarnpkg.com/es-dev-server/-/es-dev-server-1.47.0.tgz#d7d257b9a8f1177aa651465b00c47f18bfac6ee7"
integrity sha512-5+i5oD+dkE7dl1b+A65uyEky41ee7T85unjsA0S7d0mngOYR9YQjBdqG6lYCDVXNQBwMJ841OlU1WxM4jtWSWA==
es-dev-server@^1.46.1, es-dev-server@^1.46.2:
version "1.46.2"
resolved "https://registry.yarnpkg.com/es-dev-server/-/es-dev-server-1.46.2.tgz#f2a17cc7a5dab1e8a7fa212b586cb51f3abea32f"
integrity sha512-pqJ1bejSEbcxXFcMi4egkLaLWg5ASaxNeSRiGS9vpxu3S5f0aWX8XgYwifT6VeBpEHalkwb10prm/nvDCZKQlw==
dependencies:
"@babel/core" "^7.9.0"
"@babel/plugin-proposal-dynamic-import" "^7.8.3"
@ -6094,7 +6114,7 @@ es-dev-server@^1.46.1, es-dev-server@^1.47.0:
"@babel/plugin-syntax-optional-chaining" "^7.8.3"
"@babel/plugin-transform-template-literals" "^7.8.3"
"@babel/preset-env" "^7.9.0"
"@open-wc/building-utils" "^2.16.4"
"@open-wc/building-utils" "^2.16.3"
"@rollup/plugin-node-resolve" "^7.1.1"
"@rollup/pluginutils" "^3.0.0"
"@types/minimatch" "^3.0.3"
@ -6122,7 +6142,7 @@ es-dev-server@^1.46.1, es-dev-server@^1.47.0:
opn "^5.4.0"
parse5 "^5.1.1"
path-is-inside "^1.0.2"
polyfills-loader "^1.5.6"
polyfills-loader "^1.5.4"
portfinder "^1.0.21"
strip-ansi "^5.2.0"
systemjs "^4.0.0"
@ -6768,9 +6788,9 @@ fn-name@~2.0.1:
integrity sha1-UhTXU3pNBqSjAcDMJi/rhBiAAuc=
focus-lock@^0.6.3, focus-lock@^0.6.7:
version "0.6.8"
resolved "https://registry.yarnpkg.com/focus-lock/-/focus-lock-0.6.8.tgz#61985fadfa92f02f2ee1d90bc738efaf7f3c9f46"
integrity sha512-vkHTluRCoq9FcsrldC0ulQHiyBYgVJB2CX53I8r0nTC6KnEij7Of0jpBspjt3/CuNb6fyoj3aOh9J2HgQUM0og==
version "0.6.7"
resolved "https://registry.yarnpkg.com/focus-lock/-/focus-lock-0.6.7.tgz#65e298f2ba2a3372ab57a4e4c4bdc19e1e32a4e5"
integrity sha512-KRo93U/afEqt7w5tBm4t0FHf/Li8tEYav3n4GUiZdeRlRfrtMbL8yQg0xRVnY/kmBRmQ4xkqIlbaMvuqlu53kg==
follow-redirects@1.5.10:
version "1.5.10"
@ -9244,14 +9264,14 @@ loader-runner@^2.4.0:
resolved "https://registry.yarnpkg.com/loader-runner/-/loader-runner-2.4.0.tgz#ed47066bfe534d7e84c4c7b9998c2a75607d9357"
integrity sha512-Jsmr89RcXGIwivFY21FcRrisYZfvLMTWx5kOLc+JTxtpBOG6xML0vzbc6SEQG2FO9/4Fc3wW4LVcB5DmGflaRw==
loader-utils@2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-2.0.0.tgz#e4cace5b816d425a166b5f097e10cd12b36064b0"
integrity sha512-rP4F0h2RaWSvPEkD7BLDFQnvSf+nK+wr3ESUjNTyAGobqrijmW92zc+SO6d4p4B1wh7+B/Jg1mkQe5NYUEHtHQ==
loader-utils@1.2.3:
version "1.2.3"
resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-1.2.3.tgz#1ff5dc6911c9f0a062531a4c04b609406108c2c7"
integrity sha512-fkpz8ejdnEMG3s37wGL07iSBDg99O9D5yflE9RGNH3hRdx9SOwYfnGYdZOUIZitN8E+E2vkq3MUMYMvPYl5ZZA==
dependencies:
big.js "^5.2.2"
emojis-list "^3.0.0"
json5 "^2.1.2"
emojis-list "^2.0.0"
json5 "^1.0.1"
loader-utils@^1.2.3:
version "1.4.0"
@ -9664,12 +9684,12 @@ md5@^2.2.1:
crypt "~0.0.1"
is-buffer "~1.1.1"
mdast-squeeze-paragraphs@^4.0.0:
version "4.0.0"
resolved "https://registry.yarnpkg.com/mdast-squeeze-paragraphs/-/mdast-squeeze-paragraphs-4.0.0.tgz#7c4c114679c3bee27ef10b58e2e015be79f1ef97"
integrity sha512-zxdPn69hkQ1rm4J+2Cs2j6wDEv7O17TfXTJ33tl/+JPIoEmtV9t2ZzBM5LPHE8QlHsmVD8t3vPKCyY3oH+H8MQ==
mdast-squeeze-paragraphs@^3.0.0:
version "3.0.5"
resolved "https://registry.yarnpkg.com/mdast-squeeze-paragraphs/-/mdast-squeeze-paragraphs-3.0.5.tgz#f428b6b944f8faef454db9b58f170c4183cb2e61"
integrity sha512-xX6Vbe348Y/rukQlG4W3xH+7v4ZlzUbSY4HUIQCuYrF2DrkcHx584mCaFxkWoDZKNUfyLZItHC9VAqX3kIP7XA==
dependencies:
unist-util-remove "^2.0.0"
unist-util-remove "^1.0.0"
mdast-util-compact@^1.0.0:
version "1.0.4"
@ -9685,22 +9705,15 @@ mdast-util-definitions@^1.2.0, mdast-util-definitions@^1.2.3:
dependencies:
unist-util-visit "^1.0.0"
mdast-util-definitions@^2.0.0:
version "2.0.1"
resolved "https://registry.yarnpkg.com/mdast-util-definitions/-/mdast-util-definitions-2.0.1.tgz#2c931d8665a96670639f17f98e32c3afcfee25f3"
integrity sha512-Co+DQ6oZlUzvUR7JCpP249PcexxygiaKk9axJh+eRzHDZJk2julbIdKB4PXHVxdBuLzvJ1Izb+YDpj2deGMOuA==
dependencies:
unist-util-visit "^2.0.0"
mdast-util-to-hast@8.2.0, mdast-util-to-hast@^8.0.0:
version "8.2.0"
resolved "https://registry.yarnpkg.com/mdast-util-to-hast/-/mdast-util-to-hast-8.2.0.tgz#adf9f824defcd382e53dd7bace4282a45602ac67"
integrity sha512-WjH/KXtqU66XyTJQ7tg7sjvTw1OQcVV0hKdFh3BgHPwZ96fSBCQ/NitEHsN70Mmnggt+5eUUC7pCnK+2qGQnCA==
mdast-util-to-hast@7.0.0:
version "7.0.0"
resolved "https://registry.yarnpkg.com/mdast-util-to-hast/-/mdast-util-to-hast-7.0.0.tgz#589b562ce1ae0a7849e6c38536a9e7bc4f415e54"
integrity sha512-vxnXKSZgvPG2grZM3kxaF052pxsLtq8TPAkiMkqYj1nFTOazYUPXt3LFYIEB6Ws/IX7Uyvljzk64kD6DwZl/wQ==
dependencies:
collapse-white-space "^1.0.0"
detab "^2.0.0"
mdast-util-definitions "^2.0.0"
mdurl "^1.0.0"
mdast-util-definitions "^1.2.0"
mdurl "^1.0.1"
trim-lines "^1.0.0"
unist-builder "^2.0.0"
unist-util-generated "^1.0.0"
@ -9724,12 +9737,27 @@ mdast-util-to-hast@^6.0.0:
unist-util-visit "^1.1.0"
xtend "^4.0.1"
mdast-util-to-hast@^8.0.0:
version "8.2.0"
resolved "https://registry.yarnpkg.com/mdast-util-to-hast/-/mdast-util-to-hast-8.2.0.tgz#adf9f824defcd382e53dd7bace4282a45602ac67"
integrity sha512-WjH/KXtqU66XyTJQ7tg7sjvTw1OQcVV0hKdFh3BgHPwZ96fSBCQ/NitEHsN70Mmnggt+5eUUC7pCnK+2qGQnCA==
dependencies:
collapse-white-space "^1.0.0"
detab "^2.0.0"
mdast-util-definitions "^2.0.0"
mdurl "^1.0.0"
trim-lines "^1.0.0"
unist-builder "^2.0.0"
unist-util-generated "^1.0.0"
unist-util-position "^3.0.0"
unist-util-visit "^2.0.0"
mdast-util-to-string@^1.0.0:
version "1.1.0"
resolved "https://registry.yarnpkg.com/mdast-util-to-string/-/mdast-util-to-string-1.1.0.tgz#27055500103f51637bd07d01da01eb1967a43527"
integrity sha512-jVU0Nr2B9X3MU4tSK7JP1CMkSvOj7X5l/GboG1tKRw52lLF1x2Ju92Ms9tNetCcbfX3hzlM73zYo2NKkWSfF/A==
mdurl@^1.0.0, mdurl@^1.0.1:
mdurl@^1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/mdurl/-/mdurl-1.0.1.tgz#fe85b2ec75a59037f2adfec100fd6c601761152e"
integrity sha1-/oWy7HWlkDfyrf7BAP1sYBdhFS4=
@ -10850,7 +10878,7 @@ parse-asn1@^5.0.0:
pbkdf2 "^3.0.3"
safe-buffer "^5.1.1"
parse-entities@^1.0.2, parse-entities@^1.1.0, parse-entities@^1.1.2:
parse-entities@^1.0.2, parse-entities@^1.1.2:
version "1.2.2"
resolved "https://registry.yarnpkg.com/parse-entities/-/parse-entities-1.2.2.tgz#c31bf0f653b6661354f8973559cb86dd1d5edf50"
integrity sha512-NzfpbxW/NPrzZ/yYSoQxyqUZMZXIdCfE0OIN4ESsnptHJECoUk3FZktxNuzQf4tjt5UEopnxpYJbvYuxIFDdsg==
@ -11168,6 +11196,28 @@ polished@^3.3.1:
dependencies:
"@babel/runtime" "^7.8.7"
polyfills-loader@^1.5.4:
version "1.5.4"
resolved "https://registry.yarnpkg.com/polyfills-loader/-/polyfills-loader-1.5.4.tgz#2ec7327cff00c0c596e99d774d00099ce1554b34"
integrity sha512-Jttph/AKpsmtw5+HGeCqZYaKTYZ3WswVgnTuSzUZOpChSETXiYQ1eihMiTfPIoD9FpIsTb7Ow0VHTFChBvzw9g==
dependencies:
"@babel/core" "^7.9.0"
"@open-wc/building-utils" "^2.16.3"
"@webcomponents/webcomponentsjs" "^2.4.0"
abortcontroller-polyfill "^1.4.0"
core-js-bundle "^3.6.0"
deepmerge "^4.2.2"
dynamic-import-polyfill "^0.1.1"
es-module-shims "^0.4.6"
html-minifier "^4.0.0"
intersection-observer "^0.7.0"
parse5 "^5.1.1"
regenerator-runtime "^0.13.3"
resize-observer-polyfill "^1.5.1"
systemjs "^4.0.0"
terser "^4.6.7"
whatwg-fetch "^3.0.0"
polyfills-loader@^1.5.6:
version "1.5.6"
resolved "https://registry.yarnpkg.com/polyfills-loader/-/polyfills-loader-1.5.6.tgz#5bfd107ebeaaab19da84dfeeb3811fc41a49b29e"
@ -12136,11 +12186,6 @@ remark-external-links@^5.0.0:
space-separated-tokens "^1.1.2"
unist-util-visit "^1.4.0"
remark-footnotes@1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/remark-footnotes/-/remark-footnotes-1.0.0.tgz#9c7a97f9a89397858a50033373020b1ea2aad011"
integrity sha512-X9Ncj4cj3/CIvLI2Z9IobHtVi8FVdUrdJkCNaL9kdX8ohfsi18DXHsCVd/A7ssARBdccdDb5ODnt62WuEWaM/g==
remark-html@^10.0.0:
version "10.0.0"
resolved "https://registry.yarnpkg.com/remark-html/-/remark-html-10.0.0.tgz#927047c16845ec47e2c361e1d7f7c32ab72c63c7"
@ -12161,21 +12206,42 @@ remark-html@^11.0.1:
mdast-util-to-hast "^8.0.0"
xtend "^4.0.1"
remark-mdx@^1.6.0:
version "1.6.0"
resolved "https://registry.yarnpkg.com/remark-mdx/-/remark-mdx-1.6.0.tgz#9c9d7e4b55c0e81210ed7a8094bf53388fa618a5"
integrity sha512-L8cHfD44yM07iPTZzLSY9q2MYdOnVdiR+Q41ntPq+CMvWjPoTqDqSAJjYrt+q9GrV+sn6HYXCgShnUxlAOV//A==
remark-mdx@^1.5.8:
version "1.5.8"
resolved "https://registry.yarnpkg.com/remark-mdx/-/remark-mdx-1.5.8.tgz#81fd9085e56ea534b977d08d6f170899138b3f38"
integrity sha512-wtqqsDuO/mU/ucEo/CDp0L8SPdS2oOE6PRsMm+lQ9TLmqgep4MBmyH8bLpoc8Wf7yjNmae/5yBzUN1YUvR/SsQ==
dependencies:
"@babel/core" "7.9.0"
"@babel/core" "7.8.4"
"@babel/helper-plugin-utils" "7.8.3"
"@babel/plugin-proposal-object-rest-spread" "7.9.5"
"@babel/plugin-proposal-object-rest-spread" "7.8.3"
"@babel/plugin-syntax-jsx" "7.8.3"
"@mdx-js/util" "^1.6.0"
"@mdx-js/util" "^1.5.8"
is-alphabetical "1.0.4"
remark-parse "8.0.1"
unified "9.0.0"
remark-parse "7.0.2"
unified "8.4.2"
remark-parse@8.0.1:
remark-parse@7.0.2, remark-parse@^7.0.0, remark-parse@^7.0.2:
version "7.0.2"
resolved "https://registry.yarnpkg.com/remark-parse/-/remark-parse-7.0.2.tgz#41e7170d9c1d96c3d32cf1109600a9ed50dba7cf"
integrity sha512-9+my0lQS80IQkYXsMA8Sg6m9QfXYJBnXjWYN5U+kFc5/n69t+XZVXU/ZBYr3cYH8FheEGf1v87rkFDhJ8bVgMA==
dependencies:
collapse-white-space "^1.0.2"
is-alphabetical "^1.0.0"
is-decimal "^1.0.0"
is-whitespace-character "^1.0.0"
is-word-character "^1.0.0"
markdown-escapes "^1.0.0"
parse-entities "^1.1.0"
repeat-string "^1.5.4"
state-toggle "^1.0.0"
trim "0.0.1"
trim-trailing-lines "^1.0.0"
unherit "^1.0.4"
unist-util-remove-position "^1.0.0"
vfile-location "^2.0.0"
xtend "^4.0.1"
remark-parse@8.0.1, remark-parse@^8.0.0:
version "8.0.1"
resolved "https://registry.yarnpkg.com/remark-parse/-/remark-parse-8.0.1.tgz#7fc95d8f2b58fc6791cffb54803c763eb3756743"
integrity sha512-Ye/5W57tdQZWsfkuVyRq9SUWRgECHnDsMuyUMzdSKpTbNPkZeGtoYfsrkeSi4+Xyl0mhcPPddHITXPcCPHrl3w==
@ -12218,49 +12284,6 @@ remark-parse@^4.0.0:
vfile-location "^2.0.0"
xtend "^4.0.1"
remark-parse@^7.0.0, remark-parse@^7.0.2:
version "7.0.2"
resolved "https://registry.yarnpkg.com/remark-parse/-/remark-parse-7.0.2.tgz#41e7170d9c1d96c3d32cf1109600a9ed50dba7cf"
integrity sha512-9+my0lQS80IQkYXsMA8Sg6m9QfXYJBnXjWYN5U+kFc5/n69t+XZVXU/ZBYr3cYH8FheEGf1v87rkFDhJ8bVgMA==
dependencies:
collapse-white-space "^1.0.2"
is-alphabetical "^1.0.0"
is-decimal "^1.0.0"
is-whitespace-character "^1.0.0"
is-word-character "^1.0.0"
markdown-escapes "^1.0.0"
parse-entities "^1.1.0"
repeat-string "^1.5.4"
state-toggle "^1.0.0"
trim "0.0.1"
trim-trailing-lines "^1.0.0"
unherit "^1.0.4"
unist-util-remove-position "^1.0.0"
vfile-location "^2.0.0"
xtend "^4.0.1"
remark-parse@^8.0.0:
version "8.0.2"
resolved "https://registry.yarnpkg.com/remark-parse/-/remark-parse-8.0.2.tgz#5999bc0b9c2e3edc038800a64ff103d0890b318b"
integrity sha512-eMI6kMRjsAGpMXXBAywJwiwAse+KNpmt+BK55Oofy4KvBZEqUDj6mWbGLJZrujoPIPPxDXzn3T9baRlpsm2jnQ==
dependencies:
ccount "^1.0.0"
collapse-white-space "^1.0.2"
is-alphabetical "^1.0.0"
is-decimal "^1.0.0"
is-whitespace-character "^1.0.0"
is-word-character "^1.0.0"
markdown-escapes "^1.0.0"
parse-entities "^2.0.0"
repeat-string "^1.5.4"
state-toggle "^1.0.0"
trim "0.0.1"
trim-trailing-lines "^1.0.0"
unherit "^1.0.4"
unist-util-remove-position "^2.0.0"
vfile-location "^3.0.0"
xtend "^4.0.1"
remark-rehype@^5.0.0:
version "5.0.0"
resolved "https://registry.yarnpkg.com/remark-rehype/-/remark-rehype-5.0.0.tgz#dcf85b481bfaadf262ddde9b4ecefbb7f2673e70"
@ -12277,12 +12300,12 @@ remark-slug@^5.1.2:
mdast-util-to-string "^1.0.0"
unist-util-visit "^1.0.0"
remark-squeeze-paragraphs@4.0.0:
version "4.0.0"
resolved "https://registry.yarnpkg.com/remark-squeeze-paragraphs/-/remark-squeeze-paragraphs-4.0.0.tgz#76eb0e085295131c84748c8e43810159c5653ead"
integrity sha512-8qRqmL9F4nuLPIgl92XUuxI3pFxize+F1H0e/W3llTk0UsjJaj01+RrirkMw7P21RKe4X6goQhYRSvNWX+70Rw==
remark-squeeze-paragraphs@3.0.4:
version "3.0.4"
resolved "https://registry.yarnpkg.com/remark-squeeze-paragraphs/-/remark-squeeze-paragraphs-3.0.4.tgz#9fe50c3bf3b572dd88754cd426ada007c0b8dc5f"
integrity sha512-Wmz5Yj9q+W1oryo8BV17JrOXZgUKVcpJ2ApE2pwnoHwhFKSk4Wp2PmFNbmJMgYSqAdFwfkoe+TSYop5Fy8wMgA==
dependencies:
mdast-squeeze-paragraphs "^4.0.0"
mdast-squeeze-paragraphs "^3.0.0"
remark-stringify@^7.0.0:
version "7.0.4"
@ -12463,9 +12486,9 @@ resolve-url@^0.2.1:
integrity sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=
resolve@^1.1.6, resolve@^1.10.0, resolve@^1.11.1, resolve@^1.12.0, resolve@^1.13.1, resolve@^1.14.2, resolve@^1.3.2:
version "1.17.0"
resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.17.0.tgz#b25941b54968231cc2d1bb76a79cb7f2c0bf8444"
integrity sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w==
version "1.16.1"
resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.16.1.tgz#49fac5d8bacf1fd53f200fa51247ae736175832c"
integrity sha512-rmAglCSqWWMrrBv/XM6sW0NuRFiKViw/W4d9EbC4pt+49H8JwHy+mcGmALTEg504AUDcLTvb1T2q3E9AnmY+ig==
dependencies:
path-parse "^1.0.6"
@ -12552,12 +12575,12 @@ rollup-plugin-babel@^4.3.2:
rollup-pluginutils "^2.8.1"
rollup-plugin-index-html@^1.10.5:
version "1.11.1"
resolved "https://registry.yarnpkg.com/rollup-plugin-index-html/-/rollup-plugin-index-html-1.11.1.tgz#43cdb0e9c7a0bd9e6ad7c09643eadc8452d1bc8c"
integrity sha512-hvXF7KkKtcwrfpEnzAVahc32+LD6gDwJWHIjxxIO3aADRypQf4enOwTK0saW8BCyzIRX0t3rQoAQLwu+cP7gug==
version "1.11.0"
resolved "https://registry.yarnpkg.com/rollup-plugin-index-html/-/rollup-plugin-index-html-1.11.0.tgz#924dc06715cd55a10988d309f4aadf7aaa198ff1"
integrity sha512-/XOjrefVf5undG/zAa+mVRJDSTFSgjFAuHmDNCOg5H4TYffBNYg55cS2mhEed/8yv91xZ1FWdL4Z7hbSe1fwdA==
dependencies:
"@import-maps/resolve" "^0.2.6"
"@open-wc/building-utils" "^2.16.4"
"@open-wc/building-utils" "^2.16.3"
deepmerge "^4.2.2"
lit-html "^1.0.0"
md5 "^2.2.1"
@ -12605,9 +12628,11 @@ rsvp@^4.8.4:
integrity sha512-nfMOlASu9OnRJo1mbEk2cz0D56a1MBNrJ7orjRZQG10XDyuvwksKbuXNp6qa+kbn839HwjwhBzhFmdsaEAfauA==
run-async@^2.2.0, run-async@^2.4.0:
version "2.4.1"
resolved "https://registry.yarnpkg.com/run-async/-/run-async-2.4.1.tgz#8440eccf99ea3e70bd409d49aab88e10c189a455"
integrity sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==
version "2.4.0"
resolved "https://registry.yarnpkg.com/run-async/-/run-async-2.4.0.tgz#e59054a5b86876cfae07f431d18cbaddc594f1e8"
integrity sha512-xJTbh/d7Lm7SBhc1tNvTpeCHaEzoyxPrqNlvSdMfBTYwaY++UJFyXUOxAtsRUXjlqOfj8luNaR9vjCh4KeV+pg==
dependencies:
is-promise "^2.1.0"
run-node@^1.0.0:
version "1.0.0"
@ -13020,9 +13045,9 @@ source-map-resolve@^0.5.0:
urix "^0.1.0"
source-map-support@^0.5.16, source-map-support@^0.5.5, source-map-support@~0.5.12:
version "0.5.19"
resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.19.tgz#a98b62f86dcaf4f67399648c085291ab9e8fed61"
integrity sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw==
version "0.5.17"
resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.17.tgz#29fe1b3c98b9dbd5064ada89052ee8ff070cb46c"
integrity sha512-bwdKOBZ5L0gFRh4KOxNap/J/MpvX9Yxsq9lFDx65s3o7F/NiHy7JRaGIS8MwW6tZPAq9UXE207Il0cfcb5yu/Q==
dependencies:
buffer-from "^1.0.0"
source-map "^0.6.0"
@ -13167,9 +13192,9 @@ store2@^2.7.1:
integrity sha512-llZqXAXjG2E4FvWsZxFmBDfh6kqQuGFZm64TX23qW02Hf4dyElhDEbYx1IIVTEMKWrrDnDA9oqOjY8WHo2NgcA==
storybook-addon-markdown-docs@^0.2.3:
version "0.2.8"
resolved "https://registry.yarnpkg.com/storybook-addon-markdown-docs/-/storybook-addon-markdown-docs-0.2.8.tgz#c4108825cbfb0271658331506ef855572d61bab4"
integrity sha512-p0VH8MyKb/CcL2opKwPaHkJdhjB8gL6kMTDZpVCoRqum0gguWIEjkk4upzr7ZhbdI6SPmDde0WieeB4Je5r2ug==
version "0.2.6"
resolved "https://registry.yarnpkg.com/storybook-addon-markdown-docs/-/storybook-addon-markdown-docs-0.2.6.tgz#b88683a789bd539023438d1873c892e32d7001bf"
integrity sha512-MdOqhe5IgnkJS+sp2iqGzWL0wByRwAFVIH/YqV6qJ25WaGvXlt8t92841jDDuIz3+54otViibTu+8KcY4a7VtQ==
dependencies:
"@babel/code-frame" "^7.8.3"
"@babel/core" "^7.9.0"
@ -13660,9 +13685,9 @@ terser-webpack-plugin@^1.4.3:
worker-farm "^1.7.0"
terser@^4.1.2, terser@^4.6.2, terser@^4.6.7:
version "4.6.12"
resolved "https://registry.yarnpkg.com/terser/-/terser-4.6.12.tgz#44b98aef8703fdb09a3491bf79b43faffc5b4fee"
integrity sha512-fnIwuaKjFPANG6MAixC/k1TDtnl1YlPLUlLVIxxGZUn1gfUx2+l3/zGNB72wya+lgsb50QBi2tUV75RiODwnww==
version "4.6.11"
resolved "https://registry.yarnpkg.com/terser/-/terser-4.6.11.tgz#12ff99fdd62a26de2a82f508515407eb6ccd8a9f"
integrity sha512-76Ynm7OXUG5xhOpblhytE7X58oeNSmC8xnNhjWVo8CksHit0U0kO4hfNbPrrYwowLWFgM2n9L176VNx2QaHmtA==
dependencies:
commander "^2.20.0"
source-map "~0.6.1"
@ -14191,20 +14216,13 @@ unist-util-remove-position@^2.0.0:
dependencies:
unist-util-visit "^2.0.0"
unist-util-remove@^1.0.3:
unist-util-remove@^1.0.0, unist-util-remove@^1.0.3:
version "1.0.3"
resolved "https://registry.yarnpkg.com/unist-util-remove/-/unist-util-remove-1.0.3.tgz#58ec193dfa84b52d5a055ffbc58e5444eb8031a3"
integrity sha512-mB6nCHCQK0pQffUAcCVmKgIWzG/AXs/V8qpS8K72tMPtOSCMSjDeMc5yN+Ye8rB0FhcE+JvW++o1xRNc0R+++g==
dependencies:
unist-util-is "^3.0.0"
unist-util-remove@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/unist-util-remove/-/unist-util-remove-2.0.0.tgz#32c2ad5578802f2ca62ab808173d505b2c898488"
integrity sha512-HwwWyNHKkeg/eXRnE11IpzY8JT55JNM1YCwwU9YNCnfzk6s8GhPXrVBBZWiwLeATJbI7euvoGSzcy9M29UeW3g==
dependencies:
unist-util-is "^4.0.0"
unist-util-select@^3.0.1:
version "3.0.1"
resolved "https://registry.yarnpkg.com/unist-util-select/-/unist-util-select-3.0.1.tgz#787fc452db9ba77f0ade0e7dc53c3d9d4acc79c7"
@ -14556,9 +14574,9 @@ void-elements@^2.0.0, void-elements@^2.0.1:
integrity sha1-wGavtYK7HLQSjWDqkjkulNXp2+w=
vue-docgen-api@^4.1.0:
version "4.19.0"
resolved "https://registry.yarnpkg.com/vue-docgen-api/-/vue-docgen-api-4.19.0.tgz#5713c5d42686954f28048e952251e6b193ac49f7"
integrity sha512-cqCkj6n4DcybZNsM72L+4OPrV+Rllp3CDQmvkJeAREYoE35o7FDWkMl6GnWqykQvvo+jvLz3cNDLtJGxOEqvbw==
version "4.18.0"
resolved "https://registry.yarnpkg.com/vue-docgen-api/-/vue-docgen-api-4.18.0.tgz#7d066ee38983c093651cab43e040afc716eb2293"
integrity sha512-y59WmG4+k26567rKKvKGT0ohhrIDlM6BJLLWVM6An44OCS+1b1vRnZvnQom2PElrhz0wNhZPbfqudlwMkyclxw==
dependencies:
"@babel/parser" "^7.6.0"
"@babel/types" "^7.6.0"
@ -14653,15 +14671,15 @@ webpack-sources@^1.4.0, webpack-sources@^1.4.1:
source-map "~0.6.1"
webpack@^4.28.0:
version "4.43.0"
resolved "https://registry.yarnpkg.com/webpack/-/webpack-4.43.0.tgz#c48547b11d563224c561dad1172c8aa0b8a678e6"
integrity sha512-GW1LjnPipFW2Y78OOab8NJlCflB7EFskMih2AHdvjbpKMeDJqEgSx24cXXXiPS65+WSwVyxtDsJH6jGX2czy+g==
version "4.42.1"
resolved "https://registry.yarnpkg.com/webpack/-/webpack-4.42.1.tgz#ae707baf091f5ca3ef9c38b884287cfe8f1983ef"
integrity sha512-SGfYMigqEfdGchGhFFJ9KyRpQKnipvEvjc1TwrXEPCM6H5Wywu10ka8o3KGrMzSMxMQKt8aCHUFh5DaQ9UmyRg==
dependencies:
"@webassemblyjs/ast" "1.9.0"
"@webassemblyjs/helper-module-context" "1.9.0"
"@webassemblyjs/wasm-edit" "1.9.0"
"@webassemblyjs/wasm-parser" "1.9.0"
acorn "^6.4.1"
acorn "^6.2.1"
ajv "^6.10.2"
ajv-keywords "^3.4.1"
chrome-trace-event "^1.0.2"
@ -14678,7 +14696,7 @@ webpack@^4.28.0:
schema-utils "^1.0.0"
tapable "^1.1.3"
terser-webpack-plugin "^1.4.3"
watchpack "^1.6.1"
watchpack "^1.6.0"
webpack-sources "^1.4.1"
whatwg-fetch@>=0.10.0, whatwg-fetch@^3.0.0: