From 2a9617d0fd4a3afa3ffcb7dfdf06e42c1a5ea554 Mon Sep 17 00:00:00 2001 From: Jakob Vogelsang Date: Tue, 19 Oct 2021 00:05:32 +0200 Subject: [PATCH 01/33] feat(auto-align): initial push --- public/js/plugins.js | 8 ++ src/editors/SLD/foundation.ts | 203 ++++++++++++++++++++++++++++++++++ src/editors/Sld.ts | 66 +++++++++++ 3 files changed, 277 insertions(+) create mode 100644 src/editors/SLD/foundation.ts create mode 100644 src/editors/Sld.ts diff --git a/public/js/plugins.js b/public/js/plugins.js index 1ff012576c..0682ce11bf 100644 --- a/public/js/plugins.js +++ b/public/js/plugins.js @@ -6,6 +6,14 @@ export const officialPlugins = [ default: true, kind: 'editor', }, + { + name: 'SLD', + src: '/src/editors/Sld.js', + icon: 'edit', + default: true, + kind: 'editor', + + }, { name: 'Communication', src: '/src/editors/Communication.js', diff --git a/src/editors/SLD/foundation.ts b/src/editors/SLD/foundation.ts new file mode 100644 index 0000000000..de1218b3a0 --- /dev/null +++ b/src/editors/SLD/foundation.ts @@ -0,0 +1,203 @@ +function getTerminals(connectivityNode: Element): Element[] { + const substation = connectivityNode.closest('Substation'); + if (!substation) return []; + + const path = connectivityNode.getAttribute('pathName') ?? ''; + const name = connectivityNode.getAttribute('name'); + const [substationName, voltageLevelName, bayName, _] = path.split('/'); + + return Array.from(substation.getElementsByTagName('Terminal')).filter( + terminal => + terminal.getAttribute('connectivityNode') === path && + terminal.getAttribute('substationName') === substationName && + terminal.getAttribute('voltageLevelName') === voltageLevelName && + terminal.getAttribute('bayName') === bayName && + terminal.getAttribute('cNodeName') === name + ); +} + +function numberConnections(connectivityNode: Element): number { + const substation = connectivityNode.closest('Substation'); + if (!substation) return 0; + + return getTerminals(connectivityNode).length; +} + +function getDesitantion(terminal: Element): Element | null { + const root = terminal.closest('Substation'); + const path = terminal.getAttribute('connectivityNode'); + + const connNode = root?.querySelector(`ConnectivityNode[pathName="${path}"]`); + + const bay = connNode?.parentElement; + if (!bay) return null; + + const isBus = Array(bay).some( + bay => + bay.children.length === 1 && + bay.children[0].tagName === 'ConnectivityNode' + ); + if (isBus) return bay; + + const terminals = getTerminals(connNode); + + if (terminals.length === 2) return terminals[terminals.indexOf(terminal)]; + + if (terminals.length > 2) return connNode; + + return null; +} + +export function getEdges(root: Element): GraphEdge[] { + const edges: GraphEdge[] = []; + + Array.from(root.getElementsByTagName('Terminal')) + .filter(terminal => terminal.getAttribute('cNodeName') !== 'grounded') + .forEach(terminal => { + const destination = getDesitantion(terminal); + const source = terminal.parentElement; + if (destination && source) + edges.push({ node1: source, node2: destination }); + }); + + return edges; +} + +export function getNodes(root: Element): GraphNode[] { + const nodes: GraphNode[] = []; + + let x = 10; + let y = 10; + Array.from(root.getElementsByTagName('ConductingEquipment')).forEach(item => + nodes.push({ element: item, fixed: false, x: x++, y: y }) + ); + + x = 10; + y = 13; + Array.from(root.getElementsByTagName('Bay')) + .filter( + bay => + bay.children.length === 1 && + bay.children[0].tagName === 'ConnectivityNode' + ) + .forEach(item => + nodes.push({ element: item, fixed: false, x: x + 10, y: y++ }) + ); + + x = 10; + + Array.from(root.getElementsByTagName('ConnectivityNode')) + .filter( + connectivityNode => + connectivityNode.getAttribute('name') !== 'grounded' && + numberConnections(connectivityNode) > 2 + ) + .forEach(item => + nodes.push({ element: item, fixed: false, x: x++, y: 20 }) + ); + + return nodes; +} + +export type GraphNode = { + element: Element; + fixed: boolean; + y: number; + x: number; +}; + +export type GraphEdge = { + node1: Element; + node2: Element; + xStart?: number; + yStart?: number; + xEnd?: number; + yEnd?: number; +}; + +function getDistance(n1: GraphNode, n2: GraphNode): number { + const dx = n2.x - n1.x; + const dy = n2.y - n1.y; + return Math.sqrt(Math.pow(dx, 2) + Math.pow(dy, 2)); +} + +function calculateForce( + n1: GraphNode, + n2: GraphNode, + isConnected: boolean +): number[] { + const distance = getDistance(n1, n2); + const xe = (n2.x - n1.x) / distance; + const ye = (n2.y - n1.y) / distance; + + // Calculate forces based on Colomb + const r = 0.1; // + const xForceColomb = (r / Math.pow(distance, 2)) * xe; + const yForceColomb = (r / Math.pow(distance, 2)) * ye; + + if (!isConnected) return [xForceColomb, yForceColomb]; + + // Calculate forces from Hook for connected two nodes + const s = 0.2; // + const l = 0.1; // + const xForceHook = s * (distance - l) * xe; + const yForceHook = s * (distance - l) * ye; + + return [xForceColomb + xForceHook, yForceColomb + yForceHook]; +} + +export function doSpringEmbedded(nodes: GraphNode[], edges: GraphEdge[]): void { + const changerate = 0.001; + + const xForces: number[] = []; + const yForces: number[] = []; + + let iteration = 0; + + while (iteration < 10000) { + // reset force arrays + xForces.length = 0; + yForces.length = 0; + + for (const n1 of nodes) { + let sumxforce = 0; + let sumyforce = 0; + for (const n2 of nodes) { + const isConnected = edges.some( + edge => + (edge.node1 === n1.element && edge.node2 === n2.element) || + (edge.node1 === n2.element && edge.node2 === n1.element) + ); + let [xforce, yforce] = [0, 0]; + if (n1 !== n2) [xforce, yforce] = calculateForce(n1, n2, isConnected); + + sumxforce = sumxforce + xforce; + sumyforce = sumyforce + yforce; + } + + xForces.push(sumxforce); + yForces.push(sumyforce); + } + + for (const n of nodes) { + n.x = n.x + changerate * xForces[nodes.indexOf(n)]; + n.y = n.y + changerate * yForces[nodes.indexOf(n)]; + } + + iteration++; + } +} + +export function updateEdges(nodes: GraphNode[], edges: GraphEdge[]): void { + edges.forEach(edge => { + const node1 = nodes.find(node => node.element === edge.node1); + const node2 = nodes.find(node => node.element === edge.node2); + + if (node1 && node2) { + edge.xStart = node1?.x; + edge.yStart = node1?.y; + edge.xEnd = node2?.x; + edge.yEnd = node2?.y; + } + }); +} diff --git a/src/editors/Sld.ts b/src/editors/Sld.ts new file mode 100644 index 0000000000..51379a76b2 --- /dev/null +++ b/src/editors/Sld.ts @@ -0,0 +1,66 @@ +import {} from 'fast-check'; +import { html, LitElement, TemplateResult, property, css } from 'lit-element'; +import { + doSpringEmbedded, + getEdges, + getNodes, + GraphEdge, + GraphNode, + updateEdges, +} from './SLD/foundation.js'; + +export default class SldPlugin extends LitElement { + @property() + doc!: XMLDocument; + + nodes: GraphNode[] = []; + edges: GraphEdge[] = []; + + firstUpdated(): void { + this.nodes = this.doc + ? getNodes(this.doc.querySelector('Substation')!) + : []; + this.edges = this.doc + ? getEdges(this.doc.querySelector('Substation')!) + : []; + //doSpringEmbedded(this.nodes, this.edges); + updateEdges(this.nodes, this.edges); + this.requestUpdate(); + } + + render(): TemplateResult { + return html`${this.nodes.map( + node => + html`
+ ${node.element.getAttribute('name')} +
` + )}${this.edges.map( + edge => html` + + ` + )}`; + } + + static styles = css` + div { + outline: solid; + position: absolute; + width: 50px; + height: 50px; + } + + svg { + top: 0px; + left: 0px; + position: absolute; + width: 5000px; + height: 5000px; + } + `; +} From 6e14aef5c67d408fefc0fe31b3247e8955e2cb98 Mon Sep 17 00:00:00 2001 From: Jakob Vogelsang Date: Wed, 20 Oct 2021 13:01:22 +0200 Subject: [PATCH 02/33] refactor(auto-align): some improvements --- src/editors/SLD/foundation.ts | 212 ++++++++++++++++--------------- src/editors/SLD/springembeded.ts | 160 +++++++++++++++++++++++ src/editors/Sld.ts | 50 +++++--- 3 files changed, 301 insertions(+), 121 deletions(-) create mode 100644 src/editors/SLD/springembeded.ts diff --git a/src/editors/SLD/foundation.ts b/src/editors/SLD/foundation.ts index de1218b3a0..6034554600 100644 --- a/src/editors/SLD/foundation.ts +++ b/src/editors/SLD/foundation.ts @@ -1,3 +1,26 @@ +export type GraphNode = { + element: Element; + mass: number; + r: number; + xVelocity: number; + yVelocity: number; + xAcceleration: number; + yAcceleration: number; + y: number; + x: number; +}; + +export type GraphEdge = { + node1: Element; + node2: Element; + length: number; + stiffness: number; + xStart?: number; + yStart?: number; + xEnd?: number; + yEnd?: number; +}; + function getTerminals(connectivityNode: Element): Element[] { const substation = connectivityNode.closest('Substation'); if (!substation) return []; @@ -41,7 +64,12 @@ function getDesitantion(terminal: Element): Element | null { const terminals = getTerminals(connNode); - if (terminals.length === 2) return terminals[terminals.indexOf(terminal)]; + if (terminals.length === 2) { + const index = terminals.indexOf(terminal) === 0 ? 1 : 0; + const destinationTerminal = terminals[index]; + const parent = destinationTerminal.parentElement; + return parent ? parent : null; + } if (terminals.length > 2) return connNode; @@ -57,34 +85,101 @@ export function getEdges(root: Element): GraphEdge[] { const destination = getDesitantion(terminal); const source = terminal.parentElement; if (destination && source) - edges.push({ node1: source, node2: destination }); + edges.push({ + node1: source, + node2: destination, + length: 2.0, + stiffness: 20.0, + }); }); return edges; } +function getxPosition(element: Element): number | undefined { + const x = element.getAttributeNS( + 'http://www.iec.ch/61850/2003/SCLcoordinates', + 'x' + ); + + const xNum = x ? parseInt(x) : undefined; + if (!xNum) return xNum; + + const parent = element.parentElement; + if (!parent) return xNum; + + const parentPos = getxPosition(parent); + return parentPos ? xNum + parentPos : xNum; +} + +function getyPosition(element: Element): number | undefined { + const y = element.getAttributeNS( + 'http://www.iec.ch/61850/2003/SCLcoordinates', + 'y' + ); + + const yNum = y ? parseInt(y) : undefined; + if (!yNum) return yNum; + + const parent = element.parentElement; + if (!parent) return yNum; + + const parentPos = getyPosition(parent); + return parentPos ? yNum + parentPos : yNum; +} + +function testElement(element: Element): boolean { + return ( + element.tagName === 'Bay' || + (element.tagName === 'ConductingEquipment' && + element.getAttribute('name')!.includes('QB')) + ); +} + +function initNode( + element: Element, + initX: number, + initY: number, + initMass: number, + r: number +): GraphNode { + const xPos = testElement(element) ? getxPosition(element) : undefined; + const yPos = testElement(element) ? getyPosition(element) : undefined; + + const mass = xPos && yPos ? Infinity : initMass; + const x = xPos && yPos ? xPos : initX; + const y = xPos && yPos ? yPos : initY; + + return { + element, + mass, + r, + xVelocity: 0, + yVelocity: 0, + xAcceleration: 0, + yAcceleration: 0, + x, + y, + }; +} + export function getNodes(root: Element): GraphNode[] { const nodes: GraphNode[] = []; - let x = 10; - let y = 10; + let initX = 0; + let initY = 0; + Array.from(root.getElementsByTagName('ConductingEquipment')).forEach(item => - nodes.push({ element: item, fixed: false, x: x++, y: y }) + nodes.push(initNode(item, initX++, initY++, 1.0, 2.0)) ); - x = 10; - y = 13; Array.from(root.getElementsByTagName('Bay')) .filter( bay => bay.children.length === 1 && bay.children[0].tagName === 'ConnectivityNode' ) - .forEach(item => - nodes.push({ element: item, fixed: false, x: x + 10, y: y++ }) - ); - - x = 10; + .forEach(item => nodes.push(initNode(item, initX++, initY++, 1.0, 2.0))); Array.from(root.getElementsByTagName('ConnectivityNode')) .filter( @@ -92,102 +187,11 @@ export function getNodes(root: Element): GraphNode[] { connectivityNode.getAttribute('name') !== 'grounded' && numberConnections(connectivityNode) > 2 ) - .forEach(item => - nodes.push({ element: item, fixed: false, x: x++, y: 20 }) - ); + .forEach(item => nodes.push(initNode(item, initX++, initY++, 0.1, 0.01))); return nodes; } -export type GraphNode = { - element: Element; - fixed: boolean; - y: number; - x: number; -}; - -export type GraphEdge = { - node1: Element; - node2: Element; - xStart?: number; - yStart?: number; - xEnd?: number; - yEnd?: number; -}; - -function getDistance(n1: GraphNode, n2: GraphNode): number { - const dx = n2.x - n1.x; - const dy = n2.y - n1.y; - return Math.sqrt(Math.pow(dx, 2) + Math.pow(dy, 2)); -} - -function calculateForce( - n1: GraphNode, - n2: GraphNode, - isConnected: boolean -): number[] { - const distance = getDistance(n1, n2); - const xe = (n2.x - n1.x) / distance; - const ye = (n2.y - n1.y) / distance; - - // Calculate forces based on Colomb - const r = 0.1; // - const xForceColomb = (r / Math.pow(distance, 2)) * xe; - const yForceColomb = (r / Math.pow(distance, 2)) * ye; - - if (!isConnected) return [xForceColomb, yForceColomb]; - - // Calculate forces from Hook for connected two nodes - const s = 0.2; // - const l = 0.1; // - const xForceHook = s * (distance - l) * xe; - const yForceHook = s * (distance - l) * ye; - - return [xForceColomb + xForceHook, yForceColomb + yForceHook]; -} - -export function doSpringEmbedded(nodes: GraphNode[], edges: GraphEdge[]): void { - const changerate = 0.001; - - const xForces: number[] = []; - const yForces: number[] = []; - - let iteration = 0; - - while (iteration < 10000) { - // reset force arrays - xForces.length = 0; - yForces.length = 0; - - for (const n1 of nodes) { - let sumxforce = 0; - let sumyforce = 0; - for (const n2 of nodes) { - const isConnected = edges.some( - edge => - (edge.node1 === n1.element && edge.node2 === n2.element) || - (edge.node1 === n2.element && edge.node2 === n1.element) - ); - let [xforce, yforce] = [0, 0]; - if (n1 !== n2) [xforce, yforce] = calculateForce(n1, n2, isConnected); - - sumxforce = sumxforce + xforce; - sumyforce = sumyforce + yforce; - } - - xForces.push(sumxforce); - yForces.push(sumyforce); - } - - for (const n of nodes) { - n.x = n.x + changerate * xForces[nodes.indexOf(n)]; - n.y = n.y + changerate * yForces[nodes.indexOf(n)]; - } - - iteration++; - } -} - export function updateEdges(nodes: GraphNode[], edges: GraphEdge[]): void { edges.forEach(edge => { const node1 = nodes.find(node => node.element === edge.node1); diff --git a/src/editors/SLD/springembeded.ts b/src/editors/SLD/springembeded.ts new file mode 100644 index 0000000000..438d754263 --- /dev/null +++ b/src/editors/SLD/springembeded.ts @@ -0,0 +1,160 @@ +import { GraphEdge, GraphNode } from './foundation.js'; + +function getDistance(n1: GraphNode, n2: GraphNode): number { + const dx = n2.x - n1.x; + const dy = n2.y - n1.y; + return Math.sqrt(Math.pow(dx, 2) + Math.pow(dy, 2)); +} + +function applyCoulombsLaw(nodes: GraphNode[]): void { + for (const n1 of nodes) { + for (const n2 of nodes) { + if (n1.element !== n2.element) { + if (n1.element.tagName === 'ConnectivityNode') continue; + if (n2.element.tagName === 'ConnectivityNode') continue; + + const distance = getDistance(n2, n1); + const xe = (n2.x - n1.x) / distance; + const ye = (n2.y - n1.y) / distance; + const magnitude = distance + 0.1; + + const xforce = (xe * n2.r) / (magnitude * magnitude * 0.5); + const yforce = (ye * n2.r) / (magnitude * magnitude * 0.5); + + n1.xAcceleration = n1.xAcceleration - xforce / n1.mass; + n2.xAcceleration = n2.xAcceleration + xforce / n2.mass; + + n1.yAcceleration = n1.yAcceleration - yforce / n1.mass; + n2.yAcceleration = n2.yAcceleration + yforce / n2.mass; + } + } + } +} + +function applyHookesLaw(nodes: GraphNode[], edges: GraphEdge[]): void { + for (const edge of edges) { + const n1 = nodes.find(node => edge.node1 === node.element); + const n2 = nodes.find(node => edge.node2 === node.element); + + if (!n2 || !n1) continue; + + const distance = getDistance(n2, n1); + const displacement = edge.length - distance; + + const xe = (n2.x - n1.x) / distance; + const ye = (n2.y - n1.y) / distance; + + const xforce = xe * (edge.stiffness * displacement * 0.5); + const yforce = ye * (edge.stiffness * displacement * 0.5); + + n1.xAcceleration = n1.xAcceleration - xforce / n1.mass; + n2.xAcceleration = n2.xAcceleration + xforce / n2.mass; + + n1.yAcceleration = n1.yAcceleration - yforce / n1.mass; + n2.yAcceleration = n2.yAcceleration + yforce / n2.mass; + } +} + +function adjustRotation(nodes: GraphNode[], edges: GraphEdge[]): void { + for (const edge of edges) { + const n1 = nodes.find(node => edge.node1 === node.element); + const n2 = nodes.find(node => edge.node2 === node.element); + + if (!n2 || !n1) continue; + + const xe = n2.x - n1.x; + + const xforce = 2.0 * xe * 0.5; + + n1.xAcceleration = n1.xAcceleration + xforce / n1.mass; + n2.xAcceleration = n2.xAcceleration - xforce / n2.mass; + } +} + +function attractToCenter( + nodes: GraphNode[], + edges: GraphEdge[], + repulsion: number +): void { + for (const node of nodes) { + const isConnected = edges.some( + edge => edge.node1 === node.element || edge.node2 === node.element + ); + + const xe = 20 - 1 * node.x; + const ye = 20 - 1 * node.y; + + const xforce = xe * (repulsion / (isConnected ? 100.0 : 50.0)); + const yforce = ye * (repulsion / (isConnected ? 100.0 : 50.0)); + + node.xAcceleration = node.xAcceleration + xforce / node.mass; + node.yAcceleration = node.yAcceleration + yforce / node.mass; + } +} + +function getSpeed(node: GraphNode): number { + return Math.sqrt( + node.xVelocity * node.xVelocity + node.yVelocity * node.yVelocity + ); +} + +function updateVelocity( + nodes: GraphNode[], + deltaTime: number, + maxSpeed: number +): void { + for (const node of nodes) { + let xVelocity = node.xVelocity + node.xAcceleration * deltaTime; + let yVelocity = node.yVelocity + node.yAcceleration * deltaTime; + + const speed = getSpeed(node); + if (speed > maxSpeed) { + xVelocity = (node.xVelocity * maxSpeed) / speed; + yVelocity = (node.yVelocity * maxSpeed) / speed; + } + + node.xVelocity = xVelocity; + node.yVelocity = yVelocity; + + node.xAcceleration = 0; + node.yAcceleration = 0; + } +} + +function updatePosition(nodes: GraphNode[], deltaTime: number): void { + for (const node of nodes) { + const x = node.x + (isNaN(node.xVelocity) ? 0 : node.xVelocity) * deltaTime; + const y = node.y + (isNaN(node.yVelocity) ? 0 : node.yVelocity) * deltaTime; + + node.x = x; + node.y = y; + } +} + +function isStable(nodes: GraphNode[]): boolean { + return !nodes + .filter(node => node.element.tagName !== 'Bay') + .some(node => { + const speed = getSpeed(node); + const energy = 0.5 * node.mass * speed * speed; + if (energy > 0.01) console.log(energy); + return energy > 0.01; + }); +} + +export function doSpringy(nodes: GraphNode[], edges: GraphEdge[]): void { + let i; + for (i = 0; i < 500; i++) { + const e = 0.1 * Math.exp(-i / 10); + applyCoulombsLaw(nodes); + applyHookesLaw(nodes, edges); + adjustRotation(nodes, edges); + attractToCenter(nodes, edges, 1.0); + updateVelocity(nodes, e, 1); + updatePosition(nodes, e); + + if (isStable(nodes)) { + break; + } + } +} diff --git a/src/editors/Sld.ts b/src/editors/Sld.ts index 51379a76b2..7ab095a732 100644 --- a/src/editors/Sld.ts +++ b/src/editors/Sld.ts @@ -1,18 +1,21 @@ import {} from 'fast-check'; import { html, LitElement, TemplateResult, property, css } from 'lit-element'; import { - doSpringEmbedded, getEdges, getNodes, GraphEdge, GraphNode, updateEdges, } from './SLD/foundation.js'; +import { doSpringy } from './SLD/springembeded.js'; export default class SldPlugin extends LitElement { @property() doc!: XMLDocument; + @property() + iterations = 0; + nodes: GraphNode[] = []; edges: GraphEdge[] = []; @@ -28,23 +31,36 @@ export default class SldPlugin extends LitElement { this.requestUpdate(); } + doIteration(): void { + this.iterations++; + doSpringy(this.nodes, this.edges); + updateEdges(this.nodes, this.edges); + this.requestUpdate(); + } + render(): TemplateResult { - return html`${this.nodes.map( - node => - html`
- ${node.element.getAttribute('name')} -
` - )}${this.edges.map( - edge => html` - - ` - )}`; + return html`
+ + ${this.nodes.map( + node => + html`
+ ${node.element.getAttribute('name')} +
` + )}${this.edges.map( + edge => html` + + ` + )} +
C
+ this.doIteration()} style="z-index:1" + >${this.iterations}`; } static styles = css` From ab582762e601555e8a88242ad621dc8d2f4f6e57 Mon Sep 17 00:00:00 2001 From: Jakob Vogelsang Date: Mon, 25 Oct 2021 16:20:50 +0200 Subject: [PATCH 03/33] add web-compoent per layer --- package-lock.json | 4208 ++++++++++----------------- package.json | 3 +- src/editors/SLD/bay-sld.ts | 205 ++ src/editors/SLD/foundation.ts | 26 + src/editors/SLD/ortho-connector.ts | 885 ++++++ src/editors/SLD/springembeded.ts | 20 +- src/editors/SLD/substation-sld.ts | 45 + src/editors/SLD/voltagelevel-sld.ts | 91 + src/editors/Sld.ts | 87 +- src/open-scd.ts | 2 + src/zeroline/bay-editor.ts | 1 - 11 files changed, 2788 insertions(+), 2785 deletions(-) create mode 100644 src/editors/SLD/bay-sld.ts create mode 100644 src/editors/SLD/ortho-connector.ts create mode 100644 src/editors/SLD/substation-sld.ts create mode 100644 src/editors/SLD/voltagelevel-sld.ts diff --git a/package-lock.json b/package-lock.json index b450a4dd06..17eed44592 100644 --- a/package-lock.json +++ b/package-lock.json @@ -5,9 +5,9 @@ "requires": true, "dependencies": { "@apideck/better-ajv-errors": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/@apideck/better-ajv-errors/-/better-ajv-errors-0.2.5.tgz", - "integrity": "sha512-Pm1fAqCT8OEfBVLddU3fWZ/URWpGGhkvlsBIgn9Y2jJlcNumo0gNzPsQswDJTiA8HcKpCjOhWQOgkA9kXR4Ghg==", + "version": "0.2.6", + "resolved": "https://registry.npmjs.org/@apideck/better-ajv-errors/-/better-ajv-errors-0.2.6.tgz", + "integrity": "sha512-FvGcbFUdbPLexAhdvihkroCA3LQa7kGMa8Qj9f32BiOcV1Thscg/QCxp/kJibsFrhUrlKOzd07uJFOGTN0/awQ==", "dev": true, "requires": { "json-schema": "^0.3.0", @@ -24,9 +24,9 @@ } }, "@babel/code-frame": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.14.5.tgz", - "integrity": "sha512-9pzDqyc6OLDaqe+zbACgFkb6fKMNG6CObKpnYXChRsvYGyEdc7CA2BaqeOM+vOtCS5ndmJicPJhKAwYRI6UfFw==", + "version": "7.15.8", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.15.8.tgz", + "integrity": "sha512-2IAnmn8zbvC/jKYhq5Ki9I+DwjlrtMPUCH/CpHvqI4dNnlwHwsxoIhlc8WcYY5LSYknXQtAlFYuHfqAFCvQ4Wg==", "dev": true, "requires": { "@babel/highlight": "^7.14.5" @@ -39,20 +39,20 @@ "dev": true }, "@babel/core": { - "version": "7.15.0", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.15.0.tgz", - "integrity": "sha512-tXtmTminrze5HEUPn/a0JtOzzfp0nk+UEXQ/tqIJo3WDGypl/2OFQEMll/zSFU8f/lfmfLXvTaORHF3cfXIQMw==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.14.5", - "@babel/generator": "^7.15.0", - "@babel/helper-compilation-targets": "^7.15.0", - "@babel/helper-module-transforms": "^7.15.0", - "@babel/helpers": "^7.14.8", - "@babel/parser": "^7.15.0", - "@babel/template": "^7.14.5", - "@babel/traverse": "^7.15.0", - "@babel/types": "^7.15.0", + "version": "7.15.8", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.15.8.tgz", + "integrity": "sha512-3UG9dsxvYBMYwRv+gS41WKHno4K60/9GPy1CJaH6xy3Elq8CTtvtjT5R5jmNhXfCYLX2mTw+7/aq5ak/gOE0og==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.15.8", + "@babel/generator": "^7.15.8", + "@babel/helper-compilation-targets": "^7.15.4", + "@babel/helper-module-transforms": "^7.15.8", + "@babel/helpers": "^7.15.4", + "@babel/parser": "^7.15.8", + "@babel/template": "^7.15.4", + "@babel/traverse": "^7.15.4", + "@babel/types": "^7.15.6", "convert-source-map": "^1.7.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", @@ -61,48 +61,71 @@ "source-map": "^0.5.0" }, "dependencies": { + "json5": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.0.tgz", + "integrity": "sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA==", + "dev": true, + "requires": { + "minimist": "^1.2.5" + } + }, "semver": { "version": "6.3.0", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", "dev": true + }, + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true } } }, "@babel/generator": { - "version": "7.15.0", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.15.0.tgz", - "integrity": "sha512-eKl4XdMrbpYvuB505KTta4AV9g+wWzmVBW69tX0H2NwKVKd2YJbKgyK6M8j/rgLbmHOYJn6rUklV677nOyJrEQ==", + "version": "7.15.8", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.15.8.tgz", + "integrity": "sha512-ECmAKstXbp1cvpTTZciZCgfOt6iN64lR0d+euv3UZisU5awfRawOvg07Utn/qBGuH4bRIEZKrA/4LzZyXhZr8g==", "dev": true, "requires": { - "@babel/types": "^7.15.0", + "@babel/types": "^7.15.6", "jsesc": "^2.5.1", "source-map": "^0.5.0" + }, + "dependencies": { + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true + } } }, "@babel/helper-annotate-as-pure": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.14.5.tgz", - "integrity": "sha512-EivH9EgBIb+G8ij1B2jAwSH36WnGvkQSEC6CkX/6v6ZFlw5fVOHvsgGF4uiEHO2GzMvunZb6tDLQEQSdrdocrA==", + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.15.4.tgz", + "integrity": "sha512-QwrtdNvUNsPCj2lfNQacsGSQvGX8ee1ttrBrcozUP2Sv/jylewBP/8QFe6ZkBsC8T/GYWonNAWJV4aRR9AL2DA==", "dev": true, "requires": { - "@babel/types": "^7.14.5" + "@babel/types": "^7.15.4" } }, "@babel/helper-builder-binary-assignment-operator-visitor": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.14.5.tgz", - "integrity": "sha512-YTA/Twn0vBXDVGJuAX6PwW7x5zQei1luDDo2Pl6q1qZ7hVNl0RZrhHCQG/ArGpR29Vl7ETiB8eJyrvpuRp300w==", + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.15.4.tgz", + "integrity": "sha512-P8o7JP2Mzi0SdC6eWr1zF+AEYvrsZa7GSY1lTayjF5XJhVH0kjLYUZPvTMflP7tBgZoe9gIhTa60QwFpqh/E0Q==", "dev": true, "requires": { - "@babel/helper-explode-assignable-expression": "^7.14.5", - "@babel/types": "^7.14.5" + "@babel/helper-explode-assignable-expression": "^7.15.4", + "@babel/types": "^7.15.4" } }, "@babel/helper-compilation-targets": { - "version": "7.15.0", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.15.0.tgz", - "integrity": "sha512-h+/9t0ncd4jfZ8wsdAsoIxSa61qhBYlycXiHWqJaQBCXAhDCMbPRSMTGnZIkkmt1u4ag+UQmuqcILwqKzZ4N2A==", + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.15.4.tgz", + "integrity": "sha512-rMWPCirulnPSe4d+gwdWXLfAXTTBj8M3guAf5xFQJ0nvFY7tfNAFnWdqaHegHlgDZOCT4qvhF3BYlSJag8yhqQ==", "dev": true, "requires": { "@babel/compat-data": "^7.15.0", @@ -120,17 +143,17 @@ } }, "@babel/helper-create-class-features-plugin": { - "version": "7.15.0", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.15.0.tgz", - "integrity": "sha512-MdmDXgvTIi4heDVX/e9EFfeGpugqm9fobBVg/iioE8kueXrOHdRDe36FAY7SnE9xXLVeYCoJR/gdrBEIHRC83Q==", + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.15.4.tgz", + "integrity": "sha512-7ZmzFi+DwJx6A7mHRwbuucEYpyBwmh2Ca0RvI6z2+WLZYCqV0JOaLb+u0zbtmDicebgKBZgqbYfLaKNqSgv5Pw==", "dev": true, "requires": { - "@babel/helper-annotate-as-pure": "^7.14.5", - "@babel/helper-function-name": "^7.14.5", - "@babel/helper-member-expression-to-functions": "^7.15.0", - "@babel/helper-optimise-call-expression": "^7.14.5", - "@babel/helper-replace-supers": "^7.15.0", - "@babel/helper-split-export-declaration": "^7.14.5" + "@babel/helper-annotate-as-pure": "^7.15.4", + "@babel/helper-function-name": "^7.15.4", + "@babel/helper-member-expression-to-functions": "^7.15.4", + "@babel/helper-optimise-call-expression": "^7.15.4", + "@babel/helper-replace-supers": "^7.15.4", + "@babel/helper-split-export-declaration": "^7.15.4" } }, "@babel/helper-create-regexp-features-plugin": { @@ -168,84 +191,84 @@ } }, "@babel/helper-explode-assignable-expression": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.14.5.tgz", - "integrity": "sha512-Htb24gnGJdIGT4vnRKMdoXiOIlqOLmdiUYpAQ0mYfgVT/GDm8GOYhgi4GL+hMKrkiPRohO4ts34ELFsGAPQLDQ==", + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.15.4.tgz", + "integrity": "sha512-J14f/vq8+hdC2KoWLIQSsGrC9EFBKE4NFts8pfMpymfApds+fPqR30AOUWc4tyr56h9l/GA1Sxv2q3dLZWbQ/g==", "dev": true, "requires": { - "@babel/types": "^7.14.5" + "@babel/types": "^7.15.4" } }, "@babel/helper-function-name": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.14.5.tgz", - "integrity": "sha512-Gjna0AsXWfFvrAuX+VKcN/aNNWonizBj39yGwUzVDVTlMYJMK2Wp6xdpy72mfArFq5uK+NOuexfzZlzI1z9+AQ==", + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.15.4.tgz", + "integrity": "sha512-Z91cOMM4DseLIGOnog+Z8OI6YseR9bua+HpvLAQ2XayUGU+neTtX+97caALaLdyu53I/fjhbeCnWnRH1O3jFOw==", "dev": true, "requires": { - "@babel/helper-get-function-arity": "^7.14.5", - "@babel/template": "^7.14.5", - "@babel/types": "^7.14.5" + "@babel/helper-get-function-arity": "^7.15.4", + "@babel/template": "^7.15.4", + "@babel/types": "^7.15.4" } }, "@babel/helper-get-function-arity": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.14.5.tgz", - "integrity": "sha512-I1Db4Shst5lewOM4V+ZKJzQ0JGGaZ6VY1jYvMghRjqs6DWgxLCIyFt30GlnKkfUeFLpJt2vzbMVEXVSXlIFYUg==", + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.15.4.tgz", + "integrity": "sha512-1/AlxSF92CmGZzHnC515hm4SirTxtpDnLEJ0UyEMgTMZN+6bxXKg04dKhiRx5Enel+SUA1G1t5Ed/yQia0efrA==", "dev": true, "requires": { - "@babel/types": "^7.14.5" + "@babel/types": "^7.15.4" } }, "@babel/helper-hoist-variables": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.14.5.tgz", - "integrity": "sha512-R1PXiz31Uc0Vxy4OEOm07x0oSjKAdPPCh3tPivn/Eo8cvz6gveAeuyUUPB21Hoiif0uoPQSSdhIPS3352nvdyQ==", + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.15.4.tgz", + "integrity": "sha512-VTy085egb3jUGVK9ycIxQiPbquesq0HUQ+tPO0uv5mPEBZipk+5FkRKiWq5apuyTE9FUrjENB0rCf8y+n+UuhA==", "dev": true, "requires": { - "@babel/types": "^7.14.5" + "@babel/types": "^7.15.4" } }, "@babel/helper-member-expression-to-functions": { - "version": "7.15.0", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.15.0.tgz", - "integrity": "sha512-Jq8H8U2kYiafuj2xMTPQwkTBnEEdGKpT35lJEQsRRjnG0LW3neucsaMWLgKcwu3OHKNeYugfw+Z20BXBSEs2Lg==", + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.15.4.tgz", + "integrity": "sha512-cokOMkxC/BTyNP1AlY25HuBWM32iCEsLPI4BHDpJCHHm1FU2E7dKWWIXJgQgSFiu4lp8q3bL1BIKwqkSUviqtA==", "dev": true, "requires": { - "@babel/types": "^7.15.0" + "@babel/types": "^7.15.4" } }, "@babel/helper-module-imports": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.14.5.tgz", - "integrity": "sha512-SwrNHu5QWS84XlHwGYPDtCxcA0hrSlL2yhWYLgeOc0w7ccOl2qv4s/nARI0aYZW+bSwAL5CukeXA47B/1NKcnQ==", + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.15.4.tgz", + "integrity": "sha512-jeAHZbzUwdW/xHgHQ3QmWR4Jg6j15q4w/gCfwZvtqOxoo5DKtLHk8Bsf4c5RZRC7NmLEs+ohkdq8jFefuvIxAA==", "dev": true, "requires": { - "@babel/types": "^7.14.5" + "@babel/types": "^7.15.4" } }, "@babel/helper-module-transforms": { - "version": "7.15.0", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.15.0.tgz", - "integrity": "sha512-RkGiW5Rer7fpXv9m1B3iHIFDZdItnO2/BLfWVW/9q7+KqQSDY5kUfQEbzdXM1MVhJGcugKV7kRrNVzNxmk7NBg==", + "version": "7.15.8", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.15.8.tgz", + "integrity": "sha512-DfAfA6PfpG8t4S6npwzLvTUpp0sS7JrcuaMiy1Y5645laRJIp/LiLGIBbQKaXSInK8tiGNI7FL7L8UvB8gdUZg==", "dev": true, "requires": { - "@babel/helper-module-imports": "^7.14.5", - "@babel/helper-replace-supers": "^7.15.0", - "@babel/helper-simple-access": "^7.14.8", - "@babel/helper-split-export-declaration": "^7.14.5", - "@babel/helper-validator-identifier": "^7.14.9", - "@babel/template": "^7.14.5", - "@babel/traverse": "^7.15.0", - "@babel/types": "^7.15.0" + "@babel/helper-module-imports": "^7.15.4", + "@babel/helper-replace-supers": "^7.15.4", + "@babel/helper-simple-access": "^7.15.4", + "@babel/helper-split-export-declaration": "^7.15.4", + "@babel/helper-validator-identifier": "^7.15.7", + "@babel/template": "^7.15.4", + "@babel/traverse": "^7.15.4", + "@babel/types": "^7.15.6" } }, "@babel/helper-optimise-call-expression": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.14.5.tgz", - "integrity": "sha512-IqiLIrODUOdnPU9/F8ib1Fx2ohlgDhxnIDU7OEVi+kAbEZcyiF7BLU8W6PfvPi9LzztjS7kcbzbmL7oG8kD6VA==", + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.15.4.tgz", + "integrity": "sha512-E/z9rfbAOt1vDW1DR7k4SzhzotVV5+qMciWV6LaG1g4jeFrkDlJedjtV4h0i4Q/ITnUu+Pk08M7fczsB9GXBDw==", "dev": true, "requires": { - "@babel/types": "^7.14.5" + "@babel/types": "^7.15.4" } }, "@babel/helper-plugin-utils": { @@ -255,59 +278,59 @@ "dev": true }, "@babel/helper-remap-async-to-generator": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.14.5.tgz", - "integrity": "sha512-rLQKdQU+HYlxBwQIj8dk4/0ENOUEhA/Z0l4hN8BexpvmSMN9oA9EagjnhnDpNsRdWCfjwa4mn/HyBXO9yhQP6A==", + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.15.4.tgz", + "integrity": "sha512-v53MxgvMK/HCwckJ1bZrq6dNKlmwlyRNYM6ypaRTdXWGOE2c1/SCa6dL/HimhPulGhZKw9W0QhREM583F/t0vQ==", "dev": true, "requires": { - "@babel/helper-annotate-as-pure": "^7.14.5", - "@babel/helper-wrap-function": "^7.14.5", - "@babel/types": "^7.14.5" + "@babel/helper-annotate-as-pure": "^7.15.4", + "@babel/helper-wrap-function": "^7.15.4", + "@babel/types": "^7.15.4" } }, "@babel/helper-replace-supers": { - "version": "7.15.0", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.15.0.tgz", - "integrity": "sha512-6O+eWrhx+HEra/uJnifCwhwMd6Bp5+ZfZeJwbqUTuqkhIT6YcRhiZCOOFChRypOIe0cV46kFrRBlm+t5vHCEaA==", + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.15.4.tgz", + "integrity": "sha512-/ztT6khaXF37MS47fufrKvIsiQkx1LBRvSJNzRqmbyeZnTwU9qBxXYLaaT/6KaxfKhjs2Wy8kG8ZdsFUuWBjzw==", "dev": true, "requires": { - "@babel/helper-member-expression-to-functions": "^7.15.0", - "@babel/helper-optimise-call-expression": "^7.14.5", - "@babel/traverse": "^7.15.0", - "@babel/types": "^7.15.0" + "@babel/helper-member-expression-to-functions": "^7.15.4", + "@babel/helper-optimise-call-expression": "^7.15.4", + "@babel/traverse": "^7.15.4", + "@babel/types": "^7.15.4" } }, "@babel/helper-simple-access": { - "version": "7.14.8", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.14.8.tgz", - "integrity": "sha512-TrFN4RHh9gnWEU+s7JloIho2T76GPwRHhdzOWLqTrMnlas8T9O7ec+oEDNsRXndOmru9ymH9DFrEOxpzPoSbdg==", + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.15.4.tgz", + "integrity": "sha512-UzazrDoIVOZZcTeHHEPYrr1MvTR/K+wgLg6MY6e1CJyaRhbibftF6fR2KU2sFRtI/nERUZR9fBd6aKgBlIBaPg==", "dev": true, "requires": { - "@babel/types": "^7.14.8" + "@babel/types": "^7.15.4" } }, "@babel/helper-skip-transparent-expression-wrappers": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.14.5.tgz", - "integrity": "sha512-dmqZB7mrb94PZSAOYtr+ZN5qt5owZIAgqtoTuqiFbHFtxgEcmQlRJVI+bO++fciBunXtB6MK7HrzrfcAzIz2NQ==", + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.15.4.tgz", + "integrity": "sha512-BMRLsdh+D1/aap19TycS4eD1qELGrCBJwzaY9IE8LrpJtJb+H7rQkPIdsfgnMtLBA6DJls7X9z93Z4U8h7xw0A==", "dev": true, "requires": { - "@babel/types": "^7.14.5" + "@babel/types": "^7.15.4" } }, "@babel/helper-split-export-declaration": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.14.5.tgz", - "integrity": "sha512-hprxVPu6e5Kdp2puZUmvOGjaLv9TCe58E/Fl6hRq4YiVQxIcNvuq6uTM2r1mT/oPskuS9CgR+I94sqAYv0NGKA==", + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.15.4.tgz", + "integrity": "sha512-HsFqhLDZ08DxCpBdEVtKmywj6PQbwnF6HHybur0MAnkAKnlS6uHkwnmRIkElB2Owpfb4xL4NwDmDLFubueDXsw==", "dev": true, "requires": { - "@babel/types": "^7.14.5" + "@babel/types": "^7.15.4" } }, "@babel/helper-validator-identifier": { - "version": "7.14.9", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.9.tgz", - "integrity": "sha512-pQYxPY0UP6IHISRitNe8bsijHex4TWZXi2HwKVsjPiltzlhse2znVcm9Ace510VT1kxIHjGJCZZQBX2gJDbo0g==", + "version": "7.15.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.15.7.tgz", + "integrity": "sha512-K4JvCtQqad9OY2+yTU8w+E82ywk/fe+ELNlt1G8z3bVGlZfn/hOcQQsUhGhW/N+tb3fxK800wLtKOE/aM0m72w==", "dev": true }, "@babel/helper-validator-option": { @@ -317,26 +340,26 @@ "dev": true }, "@babel/helper-wrap-function": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.14.5.tgz", - "integrity": "sha512-YEdjTCq+LNuNS1WfxsDCNpgXkJaIyqco6DAelTUjT4f2KIWC1nBcaCaSdHTBqQVLnTBexBcVcFhLSU1KnYuePQ==", + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.15.4.tgz", + "integrity": "sha512-Y2o+H/hRV5W8QhIfTpRIBwl57y8PrZt6JM3V8FOo5qarjshHItyH5lXlpMfBfmBefOqSCpKZs/6Dxqp0E/U+uw==", "dev": true, "requires": { - "@babel/helper-function-name": "^7.14.5", - "@babel/template": "^7.14.5", - "@babel/traverse": "^7.14.5", - "@babel/types": "^7.14.5" + "@babel/helper-function-name": "^7.15.4", + "@babel/template": "^7.15.4", + "@babel/traverse": "^7.15.4", + "@babel/types": "^7.15.4" } }, "@babel/helpers": { - "version": "7.15.3", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.15.3.tgz", - "integrity": "sha512-HwJiz52XaS96lX+28Tnbu31VeFSQJGOeKHJeaEPQlTl7PnlhFElWPj8tUXtqFIzeN86XxXoBr+WFAyK2PPVz6g==", + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.15.4.tgz", + "integrity": "sha512-V45u6dqEJ3w2rlryYYXf6i9rQ5YMNu4FLS6ngs8ikblhu2VdR1AqAd6aJjBzmf2Qzh6KOLqKHxEN9+TFbAkAVQ==", "dev": true, "requires": { - "@babel/template": "^7.14.5", - "@babel/traverse": "^7.15.0", - "@babel/types": "^7.15.0" + "@babel/template": "^7.15.4", + "@babel/traverse": "^7.15.4", + "@babel/types": "^7.15.4" } }, "@babel/highlight": { @@ -403,30 +426,30 @@ } }, "@babel/parser": { - "version": "7.15.3", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.15.3.tgz", - "integrity": "sha512-O0L6v/HvqbdJawj0iBEfVQMc3/6WP+AeOsovsIgBFyJaG+W2w7eqvZB7puddATmWuARlm1SX7DwxJ/JJUnDpEA==", + "version": "7.15.8", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.15.8.tgz", + "integrity": "sha512-BRYa3wcQnjS/nqI8Ac94pYYpJfojHVvVXJ97+IDCImX4Jc8W8Xv1+47enbruk+q1etOpsQNwnfFcNGw+gtPGxA==", "dev": true }, "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.14.5.tgz", - "integrity": "sha512-ZoJS2XCKPBfTmL122iP6NM9dOg+d4lc9fFk3zxc8iDjvt8Pk4+TlsHSKhIPf6X+L5ORCdBzqMZDjL/WHj7WknQ==", + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.15.4.tgz", + "integrity": "sha512-eBnpsl9tlhPhpI10kU06JHnrYXwg3+V6CaP2idsCXNef0aeslpqyITXQ74Vfk5uHgY7IG7XP0yIH8b42KSzHog==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.14.5", - "@babel/helper-skip-transparent-expression-wrappers": "^7.14.5", + "@babel/helper-skip-transparent-expression-wrappers": "^7.15.4", "@babel/plugin-proposal-optional-chaining": "^7.14.5" } }, "@babel/plugin-proposal-async-generator-functions": { - "version": "7.14.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.14.9.tgz", - "integrity": "sha512-d1lnh+ZnKrFKwtTYdw320+sQWCTwgkB9fmUhNXRADA4akR6wLjaruSGnIEUjpt9HCOwTr4ynFTKu19b7rFRpmw==", + "version": "7.15.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.15.8.tgz", + "integrity": "sha512-2Z5F2R2ibINTc63mY7FLqGfEbmofrHU9FitJW1Q7aPaKFhiPvSq6QEt/BoWN5oME3GVyjcRuNNSRbb9LC0CSWA==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.14.5", - "@babel/helper-remap-async-to-generator": "^7.14.5", + "@babel/helper-remap-async-to-generator": "^7.15.4", "@babel/plugin-syntax-async-generators": "^7.8.4" } }, @@ -441,12 +464,12 @@ } }, "@babel/plugin-proposal-class-static-block": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.14.5.tgz", - "integrity": "sha512-KBAH5ksEnYHCegqseI5N9skTdxgJdmDoAOc0uXa+4QMYKeZD0w5IARh4FMlTNtaHhbB8v+KzMdTgxMMzsIy6Yg==", + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.15.4.tgz", + "integrity": "sha512-M682XWrrLNk3chXCjoPUQWOyYsB93B9z3mRyjtqqYJWDf2mfCdIYgDrA11cgNVhAQieaq6F2fn2f3wI0U4aTjA==", "dev": true, "requires": { - "@babel/helper-create-class-features-plugin": "^7.14.5", + "@babel/helper-create-class-features-plugin": "^7.15.4", "@babel/helper-plugin-utils": "^7.14.5", "@babel/plugin-syntax-class-static-block": "^7.14.5" } @@ -512,16 +535,16 @@ } }, "@babel/plugin-proposal-object-rest-spread": { - "version": "7.14.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.14.7.tgz", - "integrity": "sha512-082hsZz+sVabfmDWo1Oct1u1AgbKbUAyVgmX4otIc7bdsRgHBXwTwb3DpDmD4Eyyx6DNiuz5UAATT655k+kL5g==", + "version": "7.15.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.15.6.tgz", + "integrity": "sha512-qtOHo7A1Vt+O23qEAX+GdBpqaIuD3i9VRrWgCJeq7WO6H2d14EK3q11urj5Te2MAeK97nMiIdRpwd/ST4JFbNg==", "dev": true, "requires": { - "@babel/compat-data": "^7.14.7", - "@babel/helper-compilation-targets": "^7.14.5", + "@babel/compat-data": "^7.15.0", + "@babel/helper-compilation-targets": "^7.15.4", "@babel/helper-plugin-utils": "^7.14.5", "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-transform-parameters": "^7.14.5" + "@babel/plugin-transform-parameters": "^7.15.4" } }, "@babel/plugin-proposal-optional-catch-binding": { @@ -556,13 +579,13 @@ } }, "@babel/plugin-proposal-private-property-in-object": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.14.5.tgz", - "integrity": "sha512-62EyfyA3WA0mZiF2e2IV9mc9Ghwxcg8YTu8BS4Wss4Y3PY725OmS9M0qLORbJwLqFtGh+jiE4wAmocK2CTUK2Q==", + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.15.4.tgz", + "integrity": "sha512-X0UTixkLf0PCCffxgu5/1RQyGGbgZuKoI+vXP4iSbJSYwPb7hu06omsFGBvQ9lJEvwgrxHdS8B5nbfcd8GyUNA==", "dev": true, "requires": { - "@babel/helper-annotate-as-pure": "^7.14.5", - "@babel/helper-create-class-features-plugin": "^7.14.5", + "@babel/helper-annotate-as-pure": "^7.15.4", + "@babel/helper-create-class-features-plugin": "^7.15.4", "@babel/helper-plugin-utils": "^7.14.5", "@babel/plugin-syntax-private-property-in-object": "^7.14.5" } @@ -751,17 +774,17 @@ } }, "@babel/plugin-transform-classes": { - "version": "7.14.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.14.9.tgz", - "integrity": "sha512-NfZpTcxU3foGWbl4wxmZ35mTsYJy8oQocbeIMoDAGGFarAmSQlL+LWMkDx/tj6pNotpbX3rltIA4dprgAPOq5A==", + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.15.4.tgz", + "integrity": "sha512-Yjvhex8GzBmmPQUvpXRPWQ9WnxXgAFuZSrqOK/eJlOGIXwvv8H3UEdUigl1gb/bnjTrln+e8bkZUYCBt/xYlBg==", "dev": true, "requires": { - "@babel/helper-annotate-as-pure": "^7.14.5", - "@babel/helper-function-name": "^7.14.5", - "@babel/helper-optimise-call-expression": "^7.14.5", + "@babel/helper-annotate-as-pure": "^7.15.4", + "@babel/helper-function-name": "^7.15.4", + "@babel/helper-optimise-call-expression": "^7.15.4", "@babel/helper-plugin-utils": "^7.14.5", - "@babel/helper-replace-supers": "^7.14.5", - "@babel/helper-split-export-declaration": "^7.14.5", + "@babel/helper-replace-supers": "^7.15.4", + "@babel/helper-split-export-declaration": "^7.15.4", "globals": "^11.1.0" }, "dependencies": { @@ -821,9 +844,9 @@ } }, "@babel/plugin-transform-for-of": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.14.5.tgz", - "integrity": "sha512-CfmqxSUZzBl0rSjpoQSFoR9UEj3HzbGuGNL21/iFTmjb5gFggJp3ph0xR1YBhexmLoKRHzgxuFvty2xdSt6gTA==", + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.15.4.tgz", + "integrity": "sha512-DRTY9fA751AFBDh2oxydvVm4SYevs5ILTWLs6xKXps4Re/KG5nfUkr+TdHCrRWB8C69TlzVgA9b3RmGWmgN9LA==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.14.5" @@ -869,27 +892,27 @@ } }, "@babel/plugin-transform-modules-commonjs": { - "version": "7.15.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.15.0.tgz", - "integrity": "sha512-3H/R9s8cXcOGE8kgMlmjYYC9nqr5ELiPkJn4q0mypBrjhYQoc+5/Maq69vV4xRPWnkzZuwJPf5rArxpB/35Cig==", + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.15.4.tgz", + "integrity": "sha512-qg4DPhwG8hKp4BbVDvX1s8cohM8a6Bvptu4l6Iingq5rW+yRUAhe/YRup/YcW2zCOlrysEWVhftIcKzrEZv3sA==", "dev": true, "requires": { - "@babel/helper-module-transforms": "^7.15.0", + "@babel/helper-module-transforms": "^7.15.4", "@babel/helper-plugin-utils": "^7.14.5", - "@babel/helper-simple-access": "^7.14.8", + "@babel/helper-simple-access": "^7.15.4", "babel-plugin-dynamic-import-node": "^2.3.3" } }, "@babel/plugin-transform-modules-systemjs": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.14.5.tgz", - "integrity": "sha512-mNMQdvBEE5DcMQaL5LbzXFMANrQjd2W7FPzg34Y4yEz7dBgdaC+9B84dSO+/1Wba98zoDbInctCDo4JGxz1VYA==", + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.15.4.tgz", + "integrity": "sha512-fJUnlQrl/mezMneR72CKCgtOoahqGJNVKpompKwzv3BrEXdlPspTcyxrZ1XmDTIr9PpULrgEQo3qNKp6dW7ssw==", "dev": true, "requires": { - "@babel/helper-hoist-variables": "^7.14.5", - "@babel/helper-module-transforms": "^7.14.5", + "@babel/helper-hoist-variables": "^7.15.4", + "@babel/helper-module-transforms": "^7.15.4", "@babel/helper-plugin-utils": "^7.14.5", - "@babel/helper-validator-identifier": "^7.14.5", + "@babel/helper-validator-identifier": "^7.14.9", "babel-plugin-dynamic-import-node": "^2.3.3" } }, @@ -932,9 +955,9 @@ } }, "@babel/plugin-transform-parameters": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.14.5.tgz", - "integrity": "sha512-Tl7LWdr6HUxTmzQtzuU14SqbgrSKmaR77M0OKyq4njZLQTPfOvzblNKyNkGwOfEFCEx7KeYHQHDI0P3F02IVkA==", + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.15.4.tgz", + "integrity": "sha512-9WB/GUTO6lvJU3XQsSr6J/WKvBC2hcs4Pew8YxZagi6GkTdniyqp8On5kqdK8MN0LMeu0mGbhPN+O049NV/9FQ==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.14.5" @@ -977,13 +1000,13 @@ } }, "@babel/plugin-transform-spread": { - "version": "7.14.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.14.6.tgz", - "integrity": "sha512-Zr0x0YroFJku7n7+/HH3A2eIrGMjbmAIbJSVv0IZ+t3U2WUQUA64S/oeied2e+MaGSjmt4alzBCsK9E8gh+fag==", + "version": "7.15.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.15.8.tgz", + "integrity": "sha512-/daZ8s2tNaRekl9YJa9X4bzjpeRZLt122cpgFnQPLGUe61PH8zMEBmYqKkW5xF5JUEh5buEGXJoQpqBmIbpmEQ==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.14.5", - "@babel/helper-skip-transparent-expression-wrappers": "^7.14.5" + "@babel/helper-skip-transparent-expression-wrappers": "^7.15.4" } }, "@babel/plugin-transform-sticky-regex": { @@ -1033,30 +1056,30 @@ } }, "@babel/preset-env": { - "version": "7.15.0", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.15.0.tgz", - "integrity": "sha512-FhEpCNFCcWW3iZLg0L2NPE9UerdtsCR6ZcsGHUX6Om6kbCQeL5QZDqFDmeNHC6/fy6UH3jEge7K4qG5uC9In0Q==", + "version": "7.15.8", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.15.8.tgz", + "integrity": "sha512-rCC0wH8husJgY4FPbHsiYyiLxSY8oMDJH7Rl6RQMknbN9oDDHhM9RDFvnGM2MgkbUJzSQB4gtuwygY5mCqGSsA==", "dev": true, "requires": { "@babel/compat-data": "^7.15.0", - "@babel/helper-compilation-targets": "^7.15.0", + "@babel/helper-compilation-targets": "^7.15.4", "@babel/helper-plugin-utils": "^7.14.5", "@babel/helper-validator-option": "^7.14.5", - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.14.5", - "@babel/plugin-proposal-async-generator-functions": "^7.14.9", + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.15.4", + "@babel/plugin-proposal-async-generator-functions": "^7.15.8", "@babel/plugin-proposal-class-properties": "^7.14.5", - "@babel/plugin-proposal-class-static-block": "^7.14.5", + "@babel/plugin-proposal-class-static-block": "^7.15.4", "@babel/plugin-proposal-dynamic-import": "^7.14.5", "@babel/plugin-proposal-export-namespace-from": "^7.14.5", "@babel/plugin-proposal-json-strings": "^7.14.5", "@babel/plugin-proposal-logical-assignment-operators": "^7.14.5", "@babel/plugin-proposal-nullish-coalescing-operator": "^7.14.5", "@babel/plugin-proposal-numeric-separator": "^7.14.5", - "@babel/plugin-proposal-object-rest-spread": "^7.14.7", + "@babel/plugin-proposal-object-rest-spread": "^7.15.6", "@babel/plugin-proposal-optional-catch-binding": "^7.14.5", "@babel/plugin-proposal-optional-chaining": "^7.14.5", "@babel/plugin-proposal-private-methods": "^7.14.5", - "@babel/plugin-proposal-private-property-in-object": "^7.14.5", + "@babel/plugin-proposal-private-property-in-object": "^7.15.4", "@babel/plugin-proposal-unicode-property-regex": "^7.14.5", "@babel/plugin-syntax-async-generators": "^7.8.4", "@babel/plugin-syntax-class-properties": "^7.12.13", @@ -1075,39 +1098,39 @@ "@babel/plugin-transform-arrow-functions": "^7.14.5", "@babel/plugin-transform-async-to-generator": "^7.14.5", "@babel/plugin-transform-block-scoped-functions": "^7.14.5", - "@babel/plugin-transform-block-scoping": "^7.14.5", - "@babel/plugin-transform-classes": "^7.14.9", + "@babel/plugin-transform-block-scoping": "^7.15.3", + "@babel/plugin-transform-classes": "^7.15.4", "@babel/plugin-transform-computed-properties": "^7.14.5", "@babel/plugin-transform-destructuring": "^7.14.7", "@babel/plugin-transform-dotall-regex": "^7.14.5", "@babel/plugin-transform-duplicate-keys": "^7.14.5", "@babel/plugin-transform-exponentiation-operator": "^7.14.5", - "@babel/plugin-transform-for-of": "^7.14.5", + "@babel/plugin-transform-for-of": "^7.15.4", "@babel/plugin-transform-function-name": "^7.14.5", "@babel/plugin-transform-literals": "^7.14.5", "@babel/plugin-transform-member-expression-literals": "^7.14.5", "@babel/plugin-transform-modules-amd": "^7.14.5", - "@babel/plugin-transform-modules-commonjs": "^7.15.0", - "@babel/plugin-transform-modules-systemjs": "^7.14.5", + "@babel/plugin-transform-modules-commonjs": "^7.15.4", + "@babel/plugin-transform-modules-systemjs": "^7.15.4", "@babel/plugin-transform-modules-umd": "^7.14.5", "@babel/plugin-transform-named-capturing-groups-regex": "^7.14.9", "@babel/plugin-transform-new-target": "^7.14.5", "@babel/plugin-transform-object-super": "^7.14.5", - "@babel/plugin-transform-parameters": "^7.14.5", + "@babel/plugin-transform-parameters": "^7.15.4", "@babel/plugin-transform-property-literals": "^7.14.5", "@babel/plugin-transform-regenerator": "^7.14.5", "@babel/plugin-transform-reserved-words": "^7.14.5", "@babel/plugin-transform-shorthand-properties": "^7.14.5", - "@babel/plugin-transform-spread": "^7.14.6", + "@babel/plugin-transform-spread": "^7.15.8", "@babel/plugin-transform-sticky-regex": "^7.14.5", "@babel/plugin-transform-template-literals": "^7.14.5", "@babel/plugin-transform-typeof-symbol": "^7.14.5", "@babel/plugin-transform-unicode-escapes": "^7.14.5", "@babel/plugin-transform-unicode-regex": "^7.14.5", "@babel/preset-modules": "^0.1.4", - "@babel/types": "^7.15.0", + "@babel/types": "^7.15.6", "babel-plugin-polyfill-corejs2": "^0.2.2", - "babel-plugin-polyfill-corejs3": "^0.2.2", + "babel-plugin-polyfill-corejs3": "^0.2.5", "babel-plugin-polyfill-regenerator": "^0.2.2", "core-js-compat": "^3.16.0", "semver": "^6.3.0" @@ -1135,18 +1158,18 @@ } }, "@babel/runtime": { - "version": "7.15.3", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.15.3.tgz", - "integrity": "sha512-OvwMLqNXkCXSz1kSm58sEsNuhqOx/fKpnUnKnFB5v8uDda5bLNEHNgKPvhDN6IU0LDcnHQ90LlJ0Q6jnyBSIBA==", + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.15.4.tgz", + "integrity": "sha512-99catp6bHCaxr4sJ/DbTGgHS4+Rs2RVd2g7iOap6SLGPDknRK9ztKNsE/Fg6QhSeh1FGE5f6gHGQmvvn3I3xhw==", "dev": true, "requires": { "regenerator-runtime": "^0.13.4" } }, "@babel/runtime-corejs3": { - "version": "7.15.3", - "resolved": "https://registry.npmjs.org/@babel/runtime-corejs3/-/runtime-corejs3-7.15.3.tgz", - "integrity": "sha512-30A3lP+sRL6ml8uhoJSs+8jwpKzbw8CqBvDc1laeptxPm5FahumJxirigcbD2qTs71Sonvj1cyZB0OKGAmxQ+A==", + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/runtime-corejs3/-/runtime-corejs3-7.15.4.tgz", + "integrity": "sha512-lWcAqKeB624/twtTc3w6w/2o9RqJPaNBhPGK6DKLSiwuVWC7WFkypWyNg+CpZoyJH0jVzv1uMtXZ/5/lQOLtCg==", "dev": true, "requires": { "core-js-pure": "^3.16.0", @@ -1154,29 +1177,29 @@ } }, "@babel/template": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.14.5.tgz", - "integrity": "sha512-6Z3Po85sfxRGachLULUhOmvAaOo7xCvqGQtxINai2mEGPFm6pQ4z5QInFnUrRpfoSV60BnjyF5F3c+15fxFV1g==", + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.15.4.tgz", + "integrity": "sha512-UgBAfEa1oGuYgDIPM2G+aHa4Nlo9Lh6mGD2bDBGMTbYnc38vulXPuC1MGjYILIEmlwl6Rd+BPR9ee3gm20CBtg==", "dev": true, "requires": { "@babel/code-frame": "^7.14.5", - "@babel/parser": "^7.14.5", - "@babel/types": "^7.14.5" + "@babel/parser": "^7.15.4", + "@babel/types": "^7.15.4" } }, "@babel/traverse": { - "version": "7.15.0", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.15.0.tgz", - "integrity": "sha512-392d8BN0C9eVxVWd8H6x9WfipgVH5IaIoLp23334Sc1vbKKWINnvwRpb4us0xtPaCumlwbTtIYNA0Dv/32sVFw==", + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.15.4.tgz", + "integrity": "sha512-W6lQD8l4rUbQR/vYgSuCAE75ADyyQvOpFVsvPPdkhf6lATXAsQIG9YdtOcu8BB1dZ0LKu+Zo3c1wEcbKeuhdlA==", "dev": true, "requires": { "@babel/code-frame": "^7.14.5", - "@babel/generator": "^7.15.0", - "@babel/helper-function-name": "^7.14.5", - "@babel/helper-hoist-variables": "^7.14.5", - "@babel/helper-split-export-declaration": "^7.14.5", - "@babel/parser": "^7.15.0", - "@babel/types": "^7.15.0", + "@babel/generator": "^7.15.4", + "@babel/helper-function-name": "^7.15.4", + "@babel/helper-hoist-variables": "^7.15.4", + "@babel/helper-split-export-declaration": "^7.15.4", + "@babel/parser": "^7.15.4", + "@babel/types": "^7.15.4", "debug": "^4.1.0", "globals": "^11.1.0" }, @@ -1190,9 +1213,9 @@ } }, "@babel/types": { - "version": "7.15.0", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.15.0.tgz", - "integrity": "sha512-OBvfqnllOIdX4ojTHpwZbpvz4j3EWyjkZEdmjH0/cgsd6QOdSgU8rLSk6ard/pcW7rlmjdVSX/AWOaORR1uNOQ==", + "version": "7.15.6", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.15.6.tgz", + "integrity": "sha512-BPU+7QhqNjmWyDO0/vitH/CuhpV8ZmK1wpKva8nuyNF5MJfuRNWMc+hc14+u9xT93kvykMdncrJT19h74uB1Ig==", "dev": true, "requires": { "@babel/helper-validator-identifier": "^7.14.9", @@ -1200,16 +1223,16 @@ } }, "@commitlint/cli": { - "version": "13.1.0", - "resolved": "https://registry.npmjs.org/@commitlint/cli/-/cli-13.1.0.tgz", - "integrity": "sha512-xN/uNYWtGTva5OMSd+xA6e6/c2jk8av7MUbdd6w2cw89u6z3fAWoyiH87X0ewdSMNYmW/6B3L/2dIVGHRDID5w==", + "version": "13.2.1", + "resolved": "https://registry.npmjs.org/@commitlint/cli/-/cli-13.2.1.tgz", + "integrity": "sha512-JGzYk2ay5JkRS5w+FLQzr0u/Kih52ds4HPpa3vnwVOQN8Q+S1VYr8Nk/6kRm6uNYsAcC1nejtuDxRdLcLh/9TA==", "dev": true, "requires": { - "@commitlint/format": "^13.1.0", - "@commitlint/lint": "^13.1.0", - "@commitlint/load": "^13.1.0", - "@commitlint/read": "^13.1.0", - "@commitlint/types": "^13.1.0", + "@commitlint/format": "^13.2.0", + "@commitlint/lint": "^13.2.0", + "@commitlint/load": "^13.2.1", + "@commitlint/read": "^13.2.0", + "@commitlint/types": "^13.2.0", "lodash": "^4.17.19", "resolve-from": "5.0.0", "resolve-global": "1.0.0", @@ -1217,110 +1240,120 @@ } }, "@commitlint/config-conventional": { - "version": "13.1.0", - "resolved": "https://registry.npmjs.org/@commitlint/config-conventional/-/config-conventional-13.1.0.tgz", - "integrity": "sha512-zukJXqdr6jtMiVRy3tTHmwgKcUMGfqKDEskRigc5W3k2aYF4gBAtCEjMAJGZgSQE4DMcHeok0pEV2ANmTpb0cw==", + "version": "13.2.0", + "resolved": "https://registry.npmjs.org/@commitlint/config-conventional/-/config-conventional-13.2.0.tgz", + "integrity": "sha512-7u7DdOiF+3qSdDlbQGfpvCH8DCQdLFvnI2+VucYmmV7E92iD6t9PBj+UjIoSQCaMAzYp27Vkall78AkcXBh6Xw==", "dev": true, "requires": { "conventional-changelog-conventionalcommits": "^4.3.1" } }, "@commitlint/ensure": { - "version": "13.1.0", - "resolved": "https://registry.npmjs.org/@commitlint/ensure/-/ensure-13.1.0.tgz", - "integrity": "sha512-NRGyjOdZQnlYwm9it//BZJ2Vm+4x7G9rEnHpLCvNKYY0c6RA8Qf7hamLAB8dWO12RLuFt06JaOpHZoTt/gHutA==", + "version": "13.2.0", + "resolved": "https://registry.npmjs.org/@commitlint/ensure/-/ensure-13.2.0.tgz", + "integrity": "sha512-rqhT62RehdLTRBu8OrPHnRCCd/7RmHEE4TiTlT4BLlr5ls5jlZhecOQWJ8np872uCNirrJ5NFjnjYYdbkNoW9Q==", "dev": true, "requires": { - "@commitlint/types": "^13.1.0", + "@commitlint/types": "^13.2.0", "lodash": "^4.17.19" } }, "@commitlint/execute-rule": { - "version": "13.0.0", - "resolved": "https://registry.npmjs.org/@commitlint/execute-rule/-/execute-rule-13.0.0.tgz", - "integrity": "sha512-lBz2bJhNAgkkU/rFMAw3XBNujbxhxlaFHY3lfKB/MxpAa+pIfmWB3ig9i1VKe0wCvujk02O0WiMleNaRn2KJqw==", + "version": "13.2.0", + "resolved": "https://registry.npmjs.org/@commitlint/execute-rule/-/execute-rule-13.2.0.tgz", + "integrity": "sha512-6nPwpN0hwTYmsH3WM4hCdN+NrMopgRIuQ0aqZa+jnwMoS/g6ljliQNYfL+m5WO306BaIu1W3yYpbW5aI8gEr0g==", "dev": true }, "@commitlint/format": { - "version": "13.1.0", - "resolved": "https://registry.npmjs.org/@commitlint/format/-/format-13.1.0.tgz", - "integrity": "sha512-n46rYvzf+6Sm99TJjTLjJBkjm6JVcklt31lDO5Q+pCIV0NnJ4qIUcwa6wIL9a9Vqb1XzlMgtp27E0zyYArkvSg==", + "version": "13.2.0", + "resolved": "https://registry.npmjs.org/@commitlint/format/-/format-13.2.0.tgz", + "integrity": "sha512-yNBQJe6YFhM1pJAta4LvzQxccSKof6axJH7ALYjuhQqfT8AKlad7Y/2SuJ07ioyreNIqwOTuF2UfU8yJ7JzEIQ==", "dev": true, "requires": { - "@commitlint/types": "^13.1.0", + "@commitlint/types": "^13.2.0", "chalk": "^4.0.0" } }, "@commitlint/is-ignored": { - "version": "13.1.0", - "resolved": "https://registry.npmjs.org/@commitlint/is-ignored/-/is-ignored-13.1.0.tgz", - "integrity": "sha512-P6zenLE5Tn3FTNjRzmL9+/KooTXEI0khA2TmUbuei9KiycemeO4q7Xk7w7aXwFPNAbN0O9oI7z3z7cFpzKJWmQ==", + "version": "13.2.0", + "resolved": "https://registry.npmjs.org/@commitlint/is-ignored/-/is-ignored-13.2.0.tgz", + "integrity": "sha512-onnx4WctHFPPkHGFFAZBIWRSaNwuhixIIfbwPhcZ6IewwQX5n4jpjwM1GokA7vhlOnQ57W7AavbKUGjzIVtnRQ==", "dev": true, "requires": { - "@commitlint/types": "^13.1.0", + "@commitlint/types": "^13.2.0", "semver": "7.3.5" } }, "@commitlint/lint": { - "version": "13.1.0", - "resolved": "https://registry.npmjs.org/@commitlint/lint/-/lint-13.1.0.tgz", - "integrity": "sha512-qH9AYSQDDTaSWSdtOvB3G1RdPpcYSgddAdFYqpFewlKQ1GJj/L+sM7vwqCG7/ip6AiM04Sry1sgmFzaEoFREUA==", + "version": "13.2.0", + "resolved": "https://registry.npmjs.org/@commitlint/lint/-/lint-13.2.0.tgz", + "integrity": "sha512-5XYkh0e9ehHjA7BxAHFpjPgr1qqbFY8OFG1wpBiAhycbYBtJnQmculA2wcwqTM40YCUBqEvWFdq86jTG8fbkMw==", "dev": true, "requires": { - "@commitlint/is-ignored": "^13.1.0", - "@commitlint/parse": "^13.1.0", - "@commitlint/rules": "^13.1.0", - "@commitlint/types": "^13.1.0" + "@commitlint/is-ignored": "^13.2.0", + "@commitlint/parse": "^13.2.0", + "@commitlint/rules": "^13.2.0", + "@commitlint/types": "^13.2.0" } }, "@commitlint/load": { - "version": "13.1.0", - "resolved": "https://registry.npmjs.org/@commitlint/load/-/load-13.1.0.tgz", - "integrity": "sha512-zlZbjJCWnWmBOSwTXis8H7I6pYk6JbDwOCuARA6B9Y/qt2PD+NCo0E/7EuaaFoxjHl+o56QR5QttuMBrf+BJzg==", + "version": "13.2.1", + "resolved": "https://registry.npmjs.org/@commitlint/load/-/load-13.2.1.tgz", + "integrity": "sha512-qlaJkj0hfa9gtWRfCfbgFBTK3GYQRmjZhba4l9mUu4wV9lEZ4ICFlrLtd/8kaLXf/8xbrPhkAPkVFOAqM0YwUQ==", "dev": true, "requires": { - "@commitlint/execute-rule": "^13.0.0", - "@commitlint/resolve-extends": "^13.0.0", - "@commitlint/types": "^13.1.0", + "@commitlint/execute-rule": "^13.2.0", + "@commitlint/resolve-extends": "^13.2.0", + "@commitlint/types": "^13.2.0", + "@endemolshinegroup/cosmiconfig-typescript-loader": "^3.0.2", "chalk": "^4.0.0", "cosmiconfig": "^7.0.0", "lodash": "^4.17.19", - "resolve-from": "^5.0.0" + "resolve-from": "^5.0.0", + "typescript": "^4.4.3" + }, + "dependencies": { + "typescript": { + "version": "4.4.4", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.4.4.tgz", + "integrity": "sha512-DqGhF5IKoBl8WNf8C1gu8q0xZSInh9j1kJJMqT3a94w1JzVaBU4EXOSMrz9yDqMT0xt3selp83fuFMQ0uzv6qA==", + "dev": true + } } }, "@commitlint/message": { - "version": "13.0.0", - "resolved": "https://registry.npmjs.org/@commitlint/message/-/message-13.0.0.tgz", - "integrity": "sha512-W/pxhesVEk8747BEWJ+VGQ9ILHmCV27/pEwJ0hGny1wqVquUR8SxvScRCbUjHCB1YtWX4dEnOPXOS9CLH/CX7A==", + "version": "13.2.0", + "resolved": "https://registry.npmjs.org/@commitlint/message/-/message-13.2.0.tgz", + "integrity": "sha512-+LlErJj2F2AC86xJb33VJIvSt25xqSF1I0b0GApSgoUtQBeJhx4SxIj1BLvGcLVmbRmbgTzAFq/QylwLId7EhA==", "dev": true }, "@commitlint/parse": { - "version": "13.1.0", - "resolved": "https://registry.npmjs.org/@commitlint/parse/-/parse-13.1.0.tgz", - "integrity": "sha512-xFybZcqBiKVjt6vTStvQkySWEUYPI0AcO4QQELyy29o8EzYZqWkhUfrb7K61fWiHsplWL1iL6F3qCLoxSgTcrg==", + "version": "13.2.0", + "resolved": "https://registry.npmjs.org/@commitlint/parse/-/parse-13.2.0.tgz", + "integrity": "sha512-AtfKSQJQADbDhW+kuC5PxOyBANsYCuuJlZRZ2PYslOz2rvWwZ93zt+nKjM4g7C9ETbz0uq4r7/EoOsTJ2nJqfQ==", "dev": true, "requires": { - "@commitlint/types": "^13.1.0", + "@commitlint/types": "^13.2.0", "conventional-changelog-angular": "^5.0.11", - "conventional-commits-parser": "^3.0.0" + "conventional-commits-parser": "^3.2.2" } }, "@commitlint/read": { - "version": "13.1.0", - "resolved": "https://registry.npmjs.org/@commitlint/read/-/read-13.1.0.tgz", - "integrity": "sha512-NrVe23GMKyL6i1yDJD8IpqCBzhzoS3wtLfDj8QBzc01Ov1cYBmDojzvBklypGb+MLJM1NbzmRM4PR5pNX0U/NQ==", + "version": "13.2.0", + "resolved": "https://registry.npmjs.org/@commitlint/read/-/read-13.2.0.tgz", + "integrity": "sha512-7db5e1Bn3re6hQN0SqygTMF/QX6/MQauoJn3wJiUHE93lvwO6aFQxT3qAlYeyBPwfWsmDz/uSH454jtrSsv3Uw==", "dev": true, "requires": { - "@commitlint/top-level": "^13.0.0", - "@commitlint/types": "^13.1.0", + "@commitlint/top-level": "^13.2.0", + "@commitlint/types": "^13.2.0", "fs-extra": "^10.0.0", "git-raw-commits": "^2.0.0" } }, "@commitlint/resolve-extends": { - "version": "13.0.0", - "resolved": "https://registry.npmjs.org/@commitlint/resolve-extends/-/resolve-extends-13.0.0.tgz", - "integrity": "sha512-1SyaE+UOsYTkQlTPUOoj4NwxQhGFtYildVS/d0TJuK8a9uAJLw7bhCLH2PEeH5cC2D1do4Eqhx/3bLDrSLH3hg==", + "version": "13.2.0", + "resolved": "https://registry.npmjs.org/@commitlint/resolve-extends/-/resolve-extends-13.2.0.tgz", + "integrity": "sha512-HLCMkqMKtvl1yYLZ1Pm0UpFvd0kYjsm1meLOGZ7VkOd9G/XX+Fr1S2G5AT2zeiDw7WUVYK8lGVMNa319bnV+aw==", "dev": true, "requires": { "import-fresh": "^3.0.0", @@ -1330,28 +1363,28 @@ } }, "@commitlint/rules": { - "version": "13.1.0", - "resolved": "https://registry.npmjs.org/@commitlint/rules/-/rules-13.1.0.tgz", - "integrity": "sha512-b6F+vBqEXsHVghrhomG0Y6YJimHZqkzZ0n5QEpk03dpBXH2OnsezpTw5e+GvbyYCc7PutGbYVQkytuv+7xCxYA==", + "version": "13.2.0", + "resolved": "https://registry.npmjs.org/@commitlint/rules/-/rules-13.2.0.tgz", + "integrity": "sha512-O3A9S7blOzvHfzrJrUQe9JxdtGy154ol/GXHwvd8WfMJ10y5ryBB4b6+0YZ1XhItWzrEASOfOKbD++EdLV90dQ==", "dev": true, "requires": { - "@commitlint/ensure": "^13.1.0", - "@commitlint/message": "^13.0.0", - "@commitlint/to-lines": "^13.0.0", - "@commitlint/types": "^13.1.0", + "@commitlint/ensure": "^13.2.0", + "@commitlint/message": "^13.2.0", + "@commitlint/to-lines": "^13.2.0", + "@commitlint/types": "^13.2.0", "execa": "^5.0.0" } }, "@commitlint/to-lines": { - "version": "13.0.0", - "resolved": "https://registry.npmjs.org/@commitlint/to-lines/-/to-lines-13.0.0.tgz", - "integrity": "sha512-mzxWwCio1M4/kG9/69TTYqrraQ66LmtJCYTzAZdZ2eJX3I5w52pSjyP/DJzAUVmmJCYf2Kw3s+RtNVShtnZ+Rw==", + "version": "13.2.0", + "resolved": "https://registry.npmjs.org/@commitlint/to-lines/-/to-lines-13.2.0.tgz", + "integrity": "sha512-ZfWZix2y/CzewReCrj5g0nKOEfj5HW9eBMDrqjJJMPApve00CWv0tYrFCGXuGlv244lW4uvWJt6J/0HLRWsfyg==", "dev": true }, "@commitlint/top-level": { - "version": "13.0.0", - "resolved": "https://registry.npmjs.org/@commitlint/top-level/-/top-level-13.0.0.tgz", - "integrity": "sha512-baBy3MZBF28sR93yFezd4a5TdHsbXaakeladfHK9dOcGdXo9oQe3GS5hP3BmlN680D6AiQSN7QPgEJgrNUWUCg==", + "version": "13.2.0", + "resolved": "https://registry.npmjs.org/@commitlint/top-level/-/top-level-13.2.0.tgz", + "integrity": "sha512-knBvWYbIq6VV6VPHrVeDsxDiJq4Zq6cv5NIYU3iesKAsmK2KlLfsZPa+Ig96Y4AqAPU3zNJwjHxYkz9qxdBbfA==", "dev": true, "requires": { "find-up": "^5.0.0" @@ -1397,14 +1430,26 @@ } }, "@commitlint/types": { - "version": "13.1.0", - "resolved": "https://registry.npmjs.org/@commitlint/types/-/types-13.1.0.tgz", - "integrity": "sha512-zcVjuT+OfKt8h91vhBxt05RMcTGEx6DM7Q9QZeuMbXFk6xgbsSEDMMapbJPA1bCZ81fa/1OQBijSYPrKvtt06g==", + "version": "13.2.0", + "resolved": "https://registry.npmjs.org/@commitlint/types/-/types-13.2.0.tgz", + "integrity": "sha512-RRVHEqmk1qn/dIaSQhvuca6k/6Z54G+r/KyimZ8gnAFielGiGUpsFRhIY3qhd5rXClVxDaa3nlcyTWckSccotQ==", "dev": true, "requires": { "chalk": "^4.0.0" } }, + "@endemolshinegroup/cosmiconfig-typescript-loader": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@endemolshinegroup/cosmiconfig-typescript-loader/-/cosmiconfig-typescript-loader-3.0.2.tgz", + "integrity": "sha512-QRVtqJuS1mcT56oHpVegkKBlgtWjXw/gHNWO3eL9oyB5Sc7HBoc2OLG/nYpVfT/Jejvo3NUrD0Udk7XgoyDKkA==", + "dev": true, + "requires": { + "lodash.get": "^4", + "make-error": "^1", + "ts-node": "^9", + "tslib": "^2" + } + }, "@eslint/eslintrc": { "version": "0.4.3", "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.4.3.tgz", @@ -2455,14 +2500,6 @@ "ssri": "^8.0.1", "treeverse": "^1.0.4", "walk-up-path": "^1.0.0" - }, - "dependencies": { - "mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", - "dev": true - } } }, "@npmcli/fs": { @@ -2489,14 +2526,6 @@ "promise-retry": "^2.0.1", "semver": "^7.3.5", "which": "^2.0.2" - }, - "dependencies": { - "mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", - "dev": true - } } }, "@npmcli/installed-package-contents": { @@ -2540,14 +2569,6 @@ "requires": { "mkdirp": "^1.0.4", "rimraf": "^3.0.2" - }, - "dependencies": { - "mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", - "dev": true - } } }, "@npmcli/name-from-folder": { @@ -2792,6 +2813,12 @@ "whatwg-url": "^7.0.0" } }, + "es-module-lexer": { + "version": "0.3.26", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-0.3.26.tgz", + "integrity": "sha512-Va0Q/xqtrss45hWzP8CZJwzGSZJjDM5/MJRE3IXXnUCcVLElR9BRaE9F62BopysASyc4nM3uwhSW7FFB9nlWAA==", + "dev": true + }, "get-stream": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", @@ -2801,6 +2828,16 @@ "pump": "^3.0.0" } }, + "koa-etag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/koa-etag/-/koa-etag-3.0.0.tgz", + "integrity": "sha1-nvc4Ld1agqsN6xU0FckVg293HT8=", + "dev": true, + "requires": { + "etag": "^1.3.0", + "mz": "^2.1.0" + } + }, "lru-cache": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", @@ -2810,6 +2847,16 @@ "yallist": "^3.0.2" } }, + "open": { + "version": "7.4.2", + "resolved": "https://registry.npmjs.org/open/-/open-7.4.2.tgz", + "integrity": "sha512-MVHddDVweXZF3awtlAS+6pgKLlm/JgxZ90+/NBurBoQctVOOB/zDdVjcyPzQ+0laDGbsWgrRkflI65sQeOgT9Q==", + "dev": true, + "requires": { + "is-docker": "^2.0.0", + "is-wsl": "^2.1.1" + } + }, "parse5": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/parse5/-/parse5-5.1.1.tgz", @@ -2850,12 +2897,13 @@ } }, "@open-wc/semantic-dom-diff": { - "version": "0.19.4", - "resolved": "https://registry.npmjs.org/@open-wc/semantic-dom-diff/-/semantic-dom-diff-0.19.4.tgz", - "integrity": "sha512-jiqM40e8WKOPIzf48lFlf+2eHhNiIeumprFQ05xCrktRQtvUlBpYNIQ0427z/aGr+56p8KIiWzx1K/0lbLWaqw==", + "version": "0.19.5", + "resolved": "https://registry.npmjs.org/@open-wc/semantic-dom-diff/-/semantic-dom-diff-0.19.5.tgz", + "integrity": "sha512-Wi0Fuj3dzqlWClU0y+J4k/nqTcH0uwgOWxZXPyeyG3DdvuyyjgiT4L4I/s6iVShWQvvEsyXnj7yVvixAo3CZvg==", "dev": true, "requires": { - "@types/chai": "^4.2.11" + "@types/chai": "^4.2.11", + "@web/test-runner-commands": "^0.5.7" } }, "@open-wc/testing": { @@ -2946,14 +2994,22 @@ } }, "@rollup/plugin-inject": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/@rollup/plugin-inject/-/plugin-inject-4.0.2.tgz", - "integrity": "sha512-TSLMA8waJ7Dmgmoc8JfPnwUwVZgLjjIAM6MqeIFqPO2ODK36JqE0Cf2F54UTgCUuW8da93Mvoj75a6KAVWgylw==", + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/@rollup/plugin-inject/-/plugin-inject-4.0.3.tgz", + "integrity": "sha512-lzMXmj0LZjd67MI+M8H9dk/oCxR0TYqYAdZ6ZOejWQLSUtud+FUPu4NCMAO8KyWWAalFo8ean7yFHCMvCNsCZw==", "dev": true, "requires": { - "@rollup/pluginutils": "^3.0.4", - "estree-walker": "^1.0.1", - "magic-string": "^0.25.5" + "@rollup/pluginutils": "^3.1.0", + "estree-walker": "^2.0.1", + "magic-string": "^0.25.7" + }, + "dependencies": { + "estree-walker": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", + "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", + "dev": true + } } }, "@rollup/plugin-json": { @@ -3084,10 +3140,16 @@ "@types/node": "*" } }, + "@types/babel__code-frame": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/@types/babel__code-frame/-/babel__code-frame-7.0.3.tgz", + "integrity": "sha512-2TN6oiwtNjOezilFVl77zwdNPwQWaDBBCCWWxyo1ctiO3vAtd7H/aB/CBJdw9+kqq3+latD0SXoedIuHySSZWw==", + "dev": true + }, "@types/babel__core": { - "version": "7.1.15", - "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.1.15.tgz", - "integrity": "sha512-bxlMKPDbY8x5h6HBwVzEOk2C8fb6SLfYQ5Jw3uBYuYF1lfWk/kbLd81la82vrIkBb0l+JdmrZaDikPrNxpS/Ew==", + "version": "7.1.16", + "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.1.16.tgz", + "integrity": "sha512-EAEHtisTMM+KaKwfWdC3oyllIqswlznXCIVCt7/oRNrh+DhgT4UEBNC/jlADNjvw7UnfbcdkGQcPVZ1xYiLcrQ==", "dev": true, "requires": { "@babel/parser": "^7.1.0", @@ -3169,9 +3231,9 @@ "dev": true }, "@types/chai": { - "version": "4.2.21", - "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.2.21.tgz", - "integrity": "sha512-yd+9qKmJxm496BOV9CMNaey8TWsikaZOwMRwPHQIjcOJM9oV+fi9ZMNw3JsVnbEEbo2gRTDnGEBv8pjyn67hNg==", + "version": "4.2.22", + "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.2.22.tgz", + "integrity": "sha512-tFfcE+DSTzWAgifkjik9AySNqIyNoYwmR+uecPwwD/XRNfvOjmC/FjCxpiUGDkDVDphPfCUecSQVFw+lN3M3kQ==", "dev": true }, "@types/chai-dom": { @@ -3183,6 +3245,16 @@ "@types/chai": "*" } }, + "@types/co-body": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/@types/co-body/-/co-body-6.1.0.tgz", + "integrity": "sha512-3e0q2jyDAnx/DSZi0z2H0yoZ2wt5yRDZ+P7ymcMObvq0ufWRT4tsajyO+Q1VwVWiv9PRR4W3YEjEzBjeZlhF+w==", + "dev": true, + "requires": { + "@types/node": "*", + "@types/qs": "*" + } + }, "@types/command-line-args": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/@types/command-line-args/-/command-line-args-5.2.0.tgz", @@ -3210,6 +3282,12 @@ "integrity": "sha512-0mPF08jn9zYI0n0Q/Pnz7C4kThdSt+6LD4amsrYDDpgBfrVWa3TcCOxKX1zkGgYniGagRv8heN2cbh+CAn+uuQ==", "dev": true }, + "@types/convert-source-map": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/@types/convert-source-map/-/convert-source-map-1.5.2.tgz", + "integrity": "sha512-tHs++ZeXer40kCF2JpE51Hg7t4HPa18B1b1Dzy96S0eCw8QKECNMYMfwa1edK/x8yCN0r4e6ewvLcc5CsVGkdg==", + "dev": true + }, "@types/cookies": { "version": "0.7.7", "resolved": "https://registry.npmjs.org/@types/cookies/-/cookies-0.7.7.tgz", @@ -3223,9 +3301,9 @@ } }, "@types/debounce": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@types/debounce/-/debounce-1.2.0.tgz", - "integrity": "sha512-bWG5wapaWgbss9E238T0R6bfo5Fh3OkeoSt245CM7JJwVwpw6MEBCbIxLq5z8KzsE3uJhzcIuQkyiZmzV3M/Dw==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@types/debounce/-/debounce-1.2.1.tgz", + "integrity": "sha512-epMsEE85fi4lfmJUH/89/iV/LI+F5CvNIvmgs5g5jYFPfhO2S/ae8WSsLOKWdwtoaZw9Q2IhJ4tQ5tFCcS/4HA==", "dev": true }, "@types/estree": { @@ -3267,9 +3345,9 @@ } }, "@types/http-assert": { - "version": "1.5.2", - "resolved": "https://registry.npmjs.org/@types/http-assert/-/http-assert-1.5.2.tgz", - "integrity": "sha512-Ddzuzv/bB2prZnJKlS1sEYhaeT50wfJjhcTTTQLjEsEZJlk3XB4Xohieyq+P4VXIzg7lrQ1Spd/PfRnBpQsdqA==", + "version": "1.5.3", + "resolved": "https://registry.npmjs.org/@types/http-assert/-/http-assert-1.5.3.tgz", + "integrity": "sha512-FyAOrDuQmBi8/or3ns4rwPno7/9tJTijVW6aQQjK02+kOQ8zmoNg2XJtAuQhvQcy1ASJq38wirX5//9J1EqoUA==", "dev": true }, "@types/http-cache-semantics": { @@ -3284,12 +3362,42 @@ "integrity": "sha512-e+2rjEwK6KDaNOm5Aa9wNGgyS9oSZU/4pfSMMPYNOfjvFI0WVXm29+ITRFr6aKDvvKo7uU1jV68MW4ScsfDi7Q==", "dev": true }, + "@types/istanbul-lib-coverage": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.3.tgz", + "integrity": "sha512-sz7iLqvVUg1gIedBOvlkxPlc8/uVzyS5OwGz1cKjXzkl3FpL3al0crU8YGU1WoHkxn0Wxbw5tyi6hvzJKNzFsw==", + "dev": true + }, + "@types/istanbul-lib-report": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", + "integrity": "sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg==", + "dev": true, + "requires": { + "@types/istanbul-lib-coverage": "*" + } + }, + "@types/istanbul-reports": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.1.tgz", + "integrity": "sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw==", + "dev": true, + "requires": { + "@types/istanbul-lib-report": "*" + } + }, "@types/json-schema": { "version": "7.0.9", "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.9.tgz", "integrity": "sha512-qcUXuemtEu+E5wZSJHNxUXeCZhAfXKQ41D+duX+VYPde7xyEVZci+/oXKJL13tnRs9lR2pr4fod59GT6/X1/yQ==", "dev": true }, + "@types/json5": { + "version": "0.0.29", + "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", + "integrity": "sha1-7ihweulOEdK4J7y+UnC86n8+ce4=", + "dev": true + }, "@types/karma": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/@types/karma/-/karma-5.0.1.tgz", @@ -3419,9 +3527,9 @@ "dev": true }, "@types/marked": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@types/marked/-/marked-2.0.4.tgz", - "integrity": "sha512-L9VRSe0Id8xbPL99mUo/4aKgD7ZoRwFZqUQScNKHi2pFjF9ZYSMNShUHD6VlMT6J/prQq0T1mxuU25m3R7dFzg==", + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@types/marked/-/marked-2.0.5.tgz", + "integrity": "sha512-shRZ7XnYFD/8n8zSjKvFdto1QNSf4tONZIlNEZGrJe8GsOE8DL/hG1Hbl8gZlfLnjS7+f5tZGIaTgfpyW38h4w==", "dev": true }, "@types/mime": { @@ -3455,9 +3563,9 @@ "dev": true }, "@types/node": { - "version": "16.6.1", - "resolved": "https://registry.npmjs.org/@types/node/-/node-16.6.1.tgz", - "integrity": "sha512-Sr7BhXEAer9xyGuCN3Ek9eg9xPviCF2gfu9kTfuU2HkTVAMYSDeX40fvpmo72n5nansg3nsBjuQBrsS28r+NUw==", + "version": "16.11.2", + "resolved": "https://registry.npmjs.org/@types/node/-/node-16.11.2.tgz", + "integrity": "sha512-w34LtBB0OkDTs19FQHXy4Ig/TOXI4zqvXS2Kk1PAsRKZ0I+nik7LlMYxckW0tSNGtvWmzB+mrCTbuEjuB9DVsw==", "dev": true }, "@types/normalize-package-data": { @@ -3528,9 +3636,9 @@ } }, "@types/sinon": { - "version": "10.0.2", - "resolved": "https://registry.npmjs.org/@types/sinon/-/sinon-10.0.2.tgz", - "integrity": "sha512-BHn8Bpkapj8Wdfxvh2jWIUoaYB/9/XhsL0oOvBfRagJtKlSl9NWPcFOz2lRukI9szwGxFtYZCTejJSqsGDbdmw==", + "version": "10.0.4", + "resolved": "https://registry.npmjs.org/@types/sinon/-/sinon-10.0.4.tgz", + "integrity": "sha512-fOYjrxQv8zJsqOY6V6ecP4eZhQBxtY80X0er1VVnUIAIZo74jHm8e1vguG5Yt4Iv8W2Wr7TgibB8MfRe32k9pA==", "dev": true, "requires": { "@sinonjs/fake-timers": "^7.1.0" @@ -3561,31 +3669,49 @@ "@types/node": "*" } }, + "@types/ws": { + "version": "7.4.7", + "resolved": "https://registry.npmjs.org/@types/ws/-/ws-7.4.7.tgz", + "integrity": "sha512-JQbbmxZTZehdc2iszGKs5oC3NFnjeay7mtAWrdt7qNtAVK0g19muApzAy4bm9byz79xa2ZnO/BOBC2R8RC5Lww==", + "dev": true, + "requires": { + "@types/node": "*" + } + }, "@typescript-eslint/eslint-plugin": { - "version": "4.29.2", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-4.29.2.tgz", - "integrity": "sha512-x4EMgn4BTfVd9+Z+r+6rmWxoAzBaapt4QFqE+d8L8sUtYZYLDTK6VG/y/SMMWA5t1/BVU5Kf+20rX4PtWzUYZg==", + "version": "4.33.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-4.33.0.tgz", + "integrity": "sha512-aINiAxGVdOl1eJyVjaWn/YcVAq4Gi/Yo35qHGCnqbWVz61g39D0h23veY/MA0rFFGfxK7TySg2uwDeNv+JgVpg==", "dev": true, "requires": { - "@typescript-eslint/experimental-utils": "4.29.2", - "@typescript-eslint/scope-manager": "4.29.2", + "@typescript-eslint/experimental-utils": "4.33.0", + "@typescript-eslint/scope-manager": "4.33.0", "debug": "^4.3.1", "functional-red-black-tree": "^1.0.1", + "ignore": "^5.1.8", "regexpp": "^3.1.0", "semver": "^7.3.5", "tsutils": "^3.21.0" + }, + "dependencies": { + "ignore": { + "version": "5.1.8", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.8.tgz", + "integrity": "sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw==", + "dev": true + } } }, "@typescript-eslint/experimental-utils": { - "version": "4.29.2", - "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-4.29.2.tgz", - "integrity": "sha512-P6mn4pqObhftBBPAv4GQtEK7Yos1fz/MlpT7+YjH9fTxZcALbiiPKuSIfYP/j13CeOjfq8/fr9Thr2glM9ub7A==", + "version": "4.33.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-4.33.0.tgz", + "integrity": "sha512-zeQjOoES5JFjTnAhI5QY7ZviczMzDptls15GFsI6jyUOq0kOf9+WonkhtlIhh0RgHRnqj5gdNxW5j1EvAyYg6Q==", "dev": true, "requires": { "@types/json-schema": "^7.0.7", - "@typescript-eslint/scope-manager": "4.29.2", - "@typescript-eslint/types": "4.29.2", - "@typescript-eslint/typescript-estree": "4.29.2", + "@typescript-eslint/scope-manager": "4.33.0", + "@typescript-eslint/types": "4.33.0", + "@typescript-eslint/typescript-estree": "4.33.0", "eslint-scope": "^5.1.1", "eslint-utils": "^3.0.0" }, @@ -3602,41 +3728,41 @@ } }, "@typescript-eslint/parser": { - "version": "4.29.2", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-4.29.2.tgz", - "integrity": "sha512-WQ6BPf+lNuwteUuyk1jD/aHKqMQ9jrdCn7Gxt9vvBnzbpj7aWEf+aZsJ1zvTjx5zFxGCt000lsbD9tQPEL8u6g==", + "version": "4.33.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-4.33.0.tgz", + "integrity": "sha512-ZohdsbXadjGBSK0/r+d87X0SBmKzOq4/S5nzK6SBgJspFo9/CUDJ7hjayuze+JK7CZQLDMroqytp7pOcFKTxZA==", "dev": true, "requires": { - "@typescript-eslint/scope-manager": "4.29.2", - "@typescript-eslint/types": "4.29.2", - "@typescript-eslint/typescript-estree": "4.29.2", + "@typescript-eslint/scope-manager": "4.33.0", + "@typescript-eslint/types": "4.33.0", + "@typescript-eslint/typescript-estree": "4.33.0", "debug": "^4.3.1" } }, "@typescript-eslint/scope-manager": { - "version": "4.29.2", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-4.29.2.tgz", - "integrity": "sha512-mfHmvlQxmfkU8D55CkZO2sQOueTxLqGvzV+mG6S/6fIunDiD2ouwsAoiYCZYDDK73QCibYjIZmGhpvKwAB5BOA==", + "version": "4.33.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-4.33.0.tgz", + "integrity": "sha512-5IfJHpgTsTZuONKbODctL4kKuQje/bzBRkwHE8UOZ4f89Zeddg+EGZs8PD8NcN4LdM3ygHWYB3ukPAYjvl/qbQ==", "dev": true, "requires": { - "@typescript-eslint/types": "4.29.2", - "@typescript-eslint/visitor-keys": "4.29.2" + "@typescript-eslint/types": "4.33.0", + "@typescript-eslint/visitor-keys": "4.33.0" } }, "@typescript-eslint/types": { - "version": "4.29.2", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-4.29.2.tgz", - "integrity": "sha512-K6ApnEXId+WTGxqnda8z4LhNMa/pZmbTFkDxEBLQAbhLZL50DjeY0VIDCml/0Y3FlcbqXZrABqrcKxq+n0LwzQ==", + "version": "4.33.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-4.33.0.tgz", + "integrity": "sha512-zKp7CjQzLQImXEpLt2BUw1tvOMPfNoTAfb8l51evhYbOEEzdWyQNmHWWGPR6hwKJDAi+1VXSBmnhL9kyVTTOuQ==", "dev": true }, "@typescript-eslint/typescript-estree": { - "version": "4.29.2", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-4.29.2.tgz", - "integrity": "sha512-TJ0/hEnYxapYn9SGn3dCnETO0r+MjaxtlWZ2xU+EvytF0g4CqTpZL48SqSNn2hXsPolnewF30pdzR9a5Lj3DNg==", + "version": "4.33.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-4.33.0.tgz", + "integrity": "sha512-rkWRY1MPFzjwnEVHsxGemDzqqddw2QbTJlICPD9p9I9LfsO8fdmfQPOX3uKfUaGRDFJbfrtm/sXhVXN4E+bzCA==", "dev": true, "requires": { - "@typescript-eslint/types": "4.29.2", - "@typescript-eslint/visitor-keys": "4.29.2", + "@typescript-eslint/types": "4.33.0", + "@typescript-eslint/visitor-keys": "4.33.0", "debug": "^4.3.1", "globby": "^11.0.3", "is-glob": "^4.0.1", @@ -3645,15 +3771,120 @@ } }, "@typescript-eslint/visitor-keys": { - "version": "4.29.2", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-4.29.2.tgz", - "integrity": "sha512-bDgJLQ86oWHJoZ1ai4TZdgXzJxsea3Ee9u9wsTAvjChdj2WLcVsgWYAPeY7RQMn16tKrlQaBnpKv7KBfs4EQag==", + "version": "4.33.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-4.33.0.tgz", + "integrity": "sha512-uqi/2aSz9g2ftcHWf8uLPJA70rUv6yuMW5Bohw+bwcuzaxQIHaKFZCKGoGXIrc9vkTJ3+0txM73K0Hq3d5wgIg==", "dev": true, "requires": { - "@typescript-eslint/types": "4.29.2", + "@typescript-eslint/types": "4.33.0", "eslint-visitor-keys": "^2.0.0" } }, + "@web/browser-logs": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/@web/browser-logs/-/browser-logs-0.2.5.tgz", + "integrity": "sha512-Qxo1wY/L7yILQqg0jjAaueh+tzdORXnZtxQgWH23SsTCunz9iq9FvsZa8Q5XlpjnZ3vLIsFEuEsCMqFeohJnEg==", + "dev": true, + "requires": { + "errorstacks": "^2.2.0" + } + }, + "@web/dev-server-core": { + "version": "0.3.16", + "resolved": "https://registry.npmjs.org/@web/dev-server-core/-/dev-server-core-0.3.16.tgz", + "integrity": "sha512-nj6liCErIGtpuZYPf6QaxGQ9nlaHd8Cf/NBcRhogskvjOVFkF3FS9xpjRw3WidkmOQnk+D0ZGCeXjtTibgy5CA==", + "dev": true, + "requires": { + "@types/koa": "^2.11.6", + "@types/ws": "^7.4.0", + "@web/parse5-utils": "^1.2.0", + "chokidar": "^3.4.3", + "clone": "^2.1.2", + "es-module-lexer": "^0.9.0", + "get-stream": "^6.0.0", + "is-stream": "^2.0.0", + "isbinaryfile": "^4.0.6", + "koa": "^2.13.0", + "koa-etag": "^4.0.0", + "koa-send": "^5.0.1", + "koa-static": "^5.0.0", + "lru-cache": "^6.0.0", + "mime-types": "^2.1.27", + "parse5": "^6.0.1", + "picomatch": "^2.2.2", + "ws": "^7.4.2" + } + }, + "@web/parse5-utils": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@web/parse5-utils/-/parse5-utils-1.3.0.tgz", + "integrity": "sha512-Pgkx3ECc8EgXSlS5EyrgzSOoUbM6P8OKS471HLAyvOBcP1NCBn0to4RN/OaKASGq8qa3j+lPX9H14uA5AHEnQg==", + "dev": true, + "requires": { + "@types/parse5": "^6.0.1", + "parse5": "^6.0.1" + }, + "dependencies": { + "@types/parse5": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/@types/parse5/-/parse5-6.0.1.tgz", + "integrity": "sha512-ARATsLdrGPUnaBvxLhUlnltcMgn7pQG312S8ccdYlnyijabrX9RN/KN/iGj9Am96CoW8e/K9628BA7Bv4XHdrA==", + "dev": true + } + } + }, + "@web/test-runner-commands": { + "version": "0.5.13", + "resolved": "https://registry.npmjs.org/@web/test-runner-commands/-/test-runner-commands-0.5.13.tgz", + "integrity": "sha512-FXnpUU89ALbRlh9mgBd7CbSn5uzNtr8gvnQZPOvGLDAJ7twGvZdUJEAisPygYx2BLPSFl3/Mre8pH8zshJb8UQ==", + "dev": true, + "requires": { + "@web/test-runner-core": "^0.10.20", + "mkdirp": "^1.0.4" + } + }, + "@web/test-runner-core": { + "version": "0.10.22", + "resolved": "https://registry.npmjs.org/@web/test-runner-core/-/test-runner-core-0.10.22.tgz", + "integrity": "sha512-0jzJIl/PTZa6PCG/noHAFZT2DTcp+OYGmYOnZ2wcHAO3KwtJKnBVSuxgdOzFdmfvoO7TYAXo5AH+MvTZXMWsZw==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.12.11", + "@types/babel__code-frame": "^7.0.2", + "@types/co-body": "^6.1.0", + "@types/convert-source-map": "^1.5.1", + "@types/debounce": "^1.2.0", + "@types/istanbul-lib-coverage": "^2.0.3", + "@types/istanbul-reports": "^3.0.0", + "@web/browser-logs": "^0.2.1", + "@web/dev-server-core": "^0.3.16", + "chokidar": "^3.4.3", + "cli-cursor": "^3.1.0", + "co-body": "^6.1.0", + "convert-source-map": "^1.7.0", + "debounce": "^1.2.0", + "dependency-graph": "^0.11.0", + "globby": "^11.0.1", + "ip": "^1.1.5", + "istanbul-lib-coverage": "^3.0.0", + "istanbul-lib-report": "^3.0.0", + "istanbul-reports": "^3.0.2", + "log-update": "^4.0.0", + "nanocolors": "^0.2.1", + "nanoid": "^3.1.25", + "open": "^8.0.2", + "picomatch": "^2.2.2", + "source-map": "^0.7.3" + }, + "dependencies": { + "source-map": { + "version": "0.7.3", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", + "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==", + "dev": true + } + } + }, "@webcomponents/shadycss": { "version": "1.11.0", "resolved": "https://registry.npmjs.org/@webcomponents/shadycss/-/shadycss-1.11.0.tgz", @@ -3783,68 +4014,36 @@ "uri-js": "^4.2.2" } }, + "amator": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/amator/-/amator-1.1.0.tgz", + "integrity": "sha1-CMa2C8k67Cthu/wMTWd9MDI8wPE=", + "requires": { + "bezier-easing": "^2.0.3" + } + }, "ansi-align": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-3.0.0.tgz", - "integrity": "sha512-ZpClVKqXN3RGBmKibdfWzqCY4lnjEuoNzU5T0oEFpfd/z5qJHVarukridD4juLO2FXMiwUQxr9WqQtaYa8XRYw==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-3.0.1.tgz", + "integrity": "sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w==", + "dev": true, + "requires": { + "string-width": "^4.1.0" + } + }, + "ansi-colors": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", + "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", + "dev": true + }, + "ansi-escapes": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", + "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", "dev": true, "requires": { - "string-width": "^3.0.0" - }, - "dependencies": { - "ansi-regex": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", - "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", - "dev": true - }, - "emoji-regex": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", - "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", - "dev": true - }, - "string-width": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", - "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", - "dev": true, - "requires": { - "emoji-regex": "^7.0.1", - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^5.1.0" - } - }, - "strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", - "dev": true, - "requires": { - "ansi-regex": "^4.1.0" - } - } - } - }, - "ansi-colors": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", - "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", - "dev": true - }, - "ansi-escapes": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", - "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", - "dev": true, - "requires": { - "type-fest": "^0.21.3" + "type-fest": "^0.21.3" }, "dependencies": { "type-fest": { @@ -3856,9 +4055,9 @@ } }, "ansi-regex": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", - "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", "dev": true }, "ansi-styles": { @@ -3940,6 +4139,12 @@ } } }, + "arg": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", + "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", + "dev": true + }, "argparse": { "version": "1.0.10", "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", @@ -3959,36 +4164,12 @@ "@babel/runtime-corejs3": "^7.10.2" } }, - "arr-diff": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", - "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=", - "dev": true - }, - "arr-flatten": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", - "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==", - "dev": true - }, - "arr-union": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", - "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=", - "dev": true - }, "array-back": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/array-back/-/array-back-3.1.0.tgz", "integrity": "sha512-TkuxA4UCOvxuDK6NZYXCalszEzj+TLszyASooky+i742l9TqsOdYCMJJupxRic61hwquNtppB3hgcuq9SVSH1Q==", "dev": true }, - "array-each": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/array-each/-/array-each-1.0.1.tgz", - "integrity": "sha1-p5SvDAWrF1KEbudTofIRoFugxE8=", - "dev": true - }, "array-ify": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/array-ify/-/array-ify-1.0.0.tgz", @@ -3996,45 +4177,33 @@ "dev": true }, "array-includes": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.3.tgz", - "integrity": "sha512-gcem1KlBU7c9rB+Rq8/3PPKsK2kjqeEBa3bD5kkQo4nYlOHQCJqIJFqBXDEfwaRuYTT4E+FxA9xez7Gf/e3Q7A==", + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.4.tgz", + "integrity": "sha512-ZTNSQkmWumEbiHO2GF4GmWxYVTiQyJy2XOTa15sdQSrvKn7l+180egQMqlrMOUMCyLMD7pmyQe4mMDUT6Behrw==", "dev": true, "requires": { "call-bind": "^1.0.2", "define-properties": "^1.1.3", - "es-abstract": "^1.18.0-next.2", + "es-abstract": "^1.19.1", "get-intrinsic": "^1.1.1", - "is-string": "^1.0.5" + "is-string": "^1.0.7" } }, - "array-slice": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/array-slice/-/array-slice-1.1.0.tgz", - "integrity": "sha512-B1qMD3RBP7O8o0H2KbrXDyB0IccejMF15+87Lvlor12ONPRHP6gTjXMNkt/d3ZuOGbAe66hFmaCfECI24Ufp6w==", - "dev": true - }, "array-union": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", "dev": true }, - "array-unique": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", - "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", - "dev": true - }, "array.prototype.flat": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.2.4.tgz", - "integrity": "sha512-4470Xi3GAPAjZqFcljX2xzckv1qeKPizoNkiS0+O4IoPR2ZNpcjE0pkhdihlDouK+x6QOast26B4Q/O9DJnwSg==", + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.2.5.tgz", + "integrity": "sha512-KaYU+S+ndVqyUnignHftkwc58o3uVU1jzczILJ1tN2YaIZpFIKBiP/x/j97E5MVPsaCloPbqWLB/8qCTVvT2qg==", "dev": true, "requires": { - "call-bind": "^1.0.0", + "call-bind": "^1.0.2", "define-properties": "^1.1.3", - "es-abstract": "^1.18.0-next.1" + "es-abstract": "^1.19.0" } }, "arraybuffer.slice": { @@ -4086,12 +4255,6 @@ "integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==", "dev": true }, - "assign-symbols": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", - "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=", - "dev": true - }, "astral-regex": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", @@ -4107,24 +4270,6 @@ "lodash": "^4.17.14" } }, - "async-done": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/async-done/-/async-done-1.3.2.tgz", - "integrity": "sha512-uYkTP8dw2og1tu1nmza1n1CMW0qb8gWWlwqMmLb7MhBVs4BXrFziT6HXUd+/RlRA/i4H9AkofYloUbs1fwMqlw==", - "dev": true, - "requires": { - "end-of-stream": "^1.1.0", - "once": "^1.3.2", - "process-nextick-args": "^2.0.0", - "stream-exhaust": "^1.0.1" - } - }, - "async-each": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.3.tgz", - "integrity": "sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ==", - "dev": true - }, "asynckit": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", @@ -4137,12 +4282,6 @@ "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==", "dev": true }, - "atob": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", - "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==", - "dev": true - }, "aws-sign2": { "version": "0.7.0", "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", @@ -4156,9 +4295,9 @@ "dev": true }, "axe-core": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.3.2.tgz", - "integrity": "sha512-5LMaDRWm8ZFPAEdzTYmgjjEdj1YnQcpfrVajO/sn/LhbpGp0Y0H64c2hLZI1gRMxfA+w1S71Uc/nHaOXgcCvGg==", + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.3.3.tgz", + "integrity": "sha512-/lqqLAmuIPi79WYfRpy2i8z+x+vxU3zX2uAm0gs1q52qTuKwolOj1P8XbufpXcsydrpKx2yGn2wzAnxCMV86QA==", "dev": true }, "axobject-query": { @@ -4244,13 +4383,13 @@ } }, "babel-plugin-polyfill-corejs3": { - "version": "0.2.4", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.2.4.tgz", - "integrity": "sha512-z3HnJE5TY/j4EFEa/qpQMSbcUJZ5JQi+3UFjXzn6pQCmIKc5Ug5j98SuYyH+m4xQnvKlMDIW4plLfgyVnd0IcQ==", + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.2.5.tgz", + "integrity": "sha512-ninF5MQNwAX9Z7c9ED+H2pGt1mXdP4TqzlHKyPIYmJIYz0N+++uwdM7RnJukklhzJ54Q84vA4ZJkgs7lu5vqcw==", "dev": true, "requires": { "@babel/helper-define-polyfill-provider": "^0.2.2", - "core-js-compat": "^3.14.0" + "core-js-compat": "^3.16.2" } }, "babel-plugin-polyfill-regenerator": { @@ -4280,61 +4419,6 @@ "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", "dev": true }, - "base": { - "version": "0.11.2", - "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz", - "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", - "dev": true, - "requires": { - "cache-base": "^1.0.1", - "class-utils": "^0.3.5", - "component-emitter": "^1.2.1", - "define-property": "^1.0.0", - "isobject": "^3.0.1", - "mixin-deep": "^1.2.0", - "pascalcase": "^0.1.1" - }, - "dependencies": { - "define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "dev": true, - "requires": { - "is-descriptor": "^1.0.0" - } - }, - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - } - } - }, "base64-arraybuffer": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/base64-arraybuffer/-/base64-arraybuffer-0.1.4.tgz", @@ -4362,6 +4446,11 @@ "tweetnacl": "^0.14.3" } }, + "bezier-easing": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/bezier-easing/-/bezier-easing-2.1.0.tgz", + "integrity": "sha1-wE3+i5JtbsrKGBPWn/F5t8ICXYY=" + }, "big-integer": { "version": "1.6.50", "resolved": "https://registry.npmjs.org/big-integer/-/big-integer-1.6.50.tgz", @@ -4479,6 +4568,24 @@ "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz", "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==", "dev": true + }, + "raw-body": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.0.tgz", + "integrity": "sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q==", + "dev": true, + "requires": { + "bytes": "3.1.0", + "http-errors": "1.7.2", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + } + }, + "setprototypeof": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz", + "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==", + "dev": true } } }, @@ -4557,16 +4664,16 @@ "dev": true }, "browserslist": { - "version": "4.16.7", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.16.7.tgz", - "integrity": "sha512-7I4qVwqZltJ7j37wObBe3SoTz+nS8APaNcrBOlgoirb6/HbEU2XxW/LpUDTCngM6iauwFqmRTuOMfyKnFGY5JA==", + "version": "4.17.4", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.17.4.tgz", + "integrity": "sha512-Zg7RpbZpIJRW3am9Lyckue7PLytvVxxhJj1CaJVlCWENsGEAOlnlt8X0ZxGRPp7Bt9o8tIRM5SEXy4BCPMJjLQ==", "dev": true, "requires": { - "caniuse-lite": "^1.0.30001248", - "colorette": "^1.2.2", - "electron-to-chromium": "^1.3.793", + "caniuse-lite": "^1.0.30001265", + "electron-to-chromium": "^1.3.867", "escalade": "^3.1.1", - "node-releases": "^1.1.73" + "node-releases": "^2.0.0", + "picocolors": "^1.0.0" } }, "browserslist-useragent": { @@ -4647,31 +4754,6 @@ "ssri": "^8.0.1", "tar": "^6.0.2", "unique-filename": "^1.1.1" - }, - "dependencies": { - "mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", - "dev": true - } - } - }, - "cache-base": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", - "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==", - "dev": true, - "requires": { - "collection-visit": "^1.0.0", - "component-emitter": "^1.2.1", - "get-value": "^2.0.6", - "has-value": "^1.0.0", - "isobject": "^3.0.1", - "set-value": "^2.0.0", - "to-object-path": "^0.3.0", - "union-value": "^1.0.0", - "unset-value": "^1.0.0" } }, "cache-content-type": { @@ -4778,9 +4860,9 @@ } }, "caniuse-lite": { - "version": "1.0.30001251", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001251.tgz", - "integrity": "sha512-HOe1r+9VkU4TFmnU70z+r7OLmtR+/chB1rdcJUeQlAinjEeb0cKL20tlAtOagNZhbrtLnCvV19B4FmF1rgzl6A==", + "version": "1.0.30001270", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001270.tgz", + "integrity": "sha512-TcIC7AyNWXhcOmv2KftOl1ShFAaHQYcB/EPL/hEyMrcS7ZX0/DvV1aoy6BzV0+16wTpoAyTMGDNAJfSqS/rz7A==", "dev": true }, "carehtml": { @@ -4809,18 +4891,18 @@ } }, "chai-a11y-axe": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/chai-a11y-axe/-/chai-a11y-axe-1.3.1.tgz", - "integrity": "sha512-O+JJ+fELEvK/5SwFe9ltIk+qYz9p+zjnw/iUC1qNrlpgEPvTxScvyvQSU7eP73ixxHkCH1oNFAqkiM+MopbCEw==", + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/chai-a11y-axe/-/chai-a11y-axe-1.3.2.tgz", + "integrity": "sha512-/jYczmhGUoCfEcsrkJwjecy3PJ31T9FxFdu2BDlAwR/sX1nN3L2XmuPP3tw8iYk6LPqdF7K11wwFr3yUZMv5MA==", "dev": true, "requires": { - "axe-core": "^4.0.2" + "axe-core": "^4.3.3" } }, "chai-dom": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/chai-dom/-/chai-dom-1.9.0.tgz", - "integrity": "sha512-UXSbhcGVBWv/5qVqbJY/giTDRyo3wKapUsWluEuVvxcJLFXkyf8l4D2PTd6trzrmca6WWnGdpaFkYdl1P0WjtA==", + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/chai-dom/-/chai-dom-1.10.0.tgz", + "integrity": "sha512-/FE0NvEGMXx1x1YQlc8ihLrEhH8JawflchuGe6ypIAX/4Zwmkr4cC3mfR9pDytbxsE/2LSm719TeU7VF/TCmtg==", "dev": true }, "chalk": { @@ -4876,6 +4958,26 @@ "parse5": "^6.0.1", "parse5-htmlparser2-tree-adapter": "^6.0.1", "tslib": "^2.2.0" + }, + "dependencies": { + "entities": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", + "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", + "dev": true + }, + "htmlparser2": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-6.1.0.tgz", + "integrity": "sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A==", + "dev": true, + "requires": { + "domelementtype": "^2.0.1", + "domhandler": "^4.0.0", + "domutils": "^2.5.2", + "entities": "^2.0.0" + } + } } }, "cheerio-select": { @@ -4925,44 +5027,13 @@ "integrity": "sha512-cOU9usZw8/dXIXKtwa8pM0OTJQuJkxMN6w30csNRUerHfeQ5R6U3kkU/FtJeIf3M202OHfY2U8ccInBG7/xogA==", "dev": true }, - "class-utils": { - "version": "0.3.6", - "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", - "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==", - "dev": true, - "requires": { - "arr-union": "^3.1.0", - "define-property": "^0.2.5", - "isobject": "^3.0.0", - "static-extend": "^0.1.1" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - } - } - }, "clean-css": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-4.2.3.tgz", - "integrity": "sha512-VcMWDN54ZN/DS+g58HYL5/n4Zrqe8vHJpGA8KdgUXFU4fuP/aHNw8eld9SyEIyabIMJX/0RaY/fplOo5hYLSFA==", + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-4.2.4.tgz", + "integrity": "sha512-EJUDT7nDVFDvaQgAo2G/PJvxmp1o/c6iXLbswsBbUFXi1Nr+AjA2cKmfbKDMjMvzEe75g3P6JkaDDAKk96A85A==", "dev": true, "requires": { "source-map": "~0.6.0" - }, - "dependencies": { - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - } } }, "clean-stack": { @@ -4987,9 +5058,9 @@ } }, "cli-spinners": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.6.0.tgz", - "integrity": "sha512-t+4/y50K/+4xcCRosKkA7W4gTr1MySvLV0q+PxmG7FJ5g+66ChKurYjxBCjHggHH3HA5Hh9cy+lcUGWDqVH+4Q==", + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.6.1.tgz", + "integrity": "sha512-x/5fWmGMnbKQAaNwN+UZlV79qBLM9JFnJuJ03gIi5whrob0xV0ofNVHy9DhwGdsMJQc2OKv0oGmLzvaqvAVv+g==", "dev": true }, "cli-truncate": { @@ -5062,6 +5133,18 @@ "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=", "dev": true }, + "co-body": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/co-body/-/co-body-6.1.0.tgz", + "integrity": "sha512-m7pOT6CdLN7FuXUcpuz/8lfQ/L77x8SchHCF4G0RBTJO20Wzmhn5Sp4/5WsKy8OSpifBSUrmg83qEqaDHdyFuQ==", + "dev": true, + "requires": { + "inflation": "^2.0.0", + "qs": "^6.5.2", + "raw-body": "^2.3.3", + "type-is": "^1.6.16" + } + }, "code-point-at": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", @@ -5074,16 +5157,6 @@ "integrity": "sha512-jEovNnrhMuqyCcjfEJA56v0Xq8SkIoPKDyaHahwo3POf4qcSXqMYuwNcOTzp74vTsR9Tn08z4MxWqAhcekogkQ==", "dev": true }, - "collection-visit": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", - "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=", - "dev": true, - "requires": { - "map-visit": "^1.0.0", - "object-visit": "^1.0.0" - } - }, "color-convert": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", @@ -5100,9 +5173,9 @@ "dev": true }, "colorette": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.3.0.tgz", - "integrity": "sha512-ecORCqbSFP7Wm8Y6lyqMJjexBQqXSF7SSeaTyGGphogUjBlFP9m9o08wy86HL2uB7fMTxtOUzLMk7ogKcxMg1w==", + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.4.0.tgz", + "integrity": "sha512-Y2oEozpomLn7Q3HFP7dpww7AtMJplbM9lGZP6RDfHqmbeRjiwRg4n6VM6j4KLmRke85uWEI7JqF17f3pqdRA0g==", "dev": true }, "colors": { @@ -5288,15 +5361,14 @@ } }, "concurrently": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/concurrently/-/concurrently-6.2.1.tgz", - "integrity": "sha512-emgwhH+ezkuYKSHZQ+AkgEpoUZZlbpPVYCVv7YZx0r+T7fny1H03r2nYRebpi2DudHR4n1Rgbo2YTxKOxVJ4+g==", + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/concurrently/-/concurrently-6.3.0.tgz", + "integrity": "sha512-k4k1jQGHHKsfbqzkUszVf29qECBrkvBKkcPJEUDTyVR7tZd1G/JOfnst4g1sYbFvJ4UjHZisj1aWQR8yLKpGPw==", "dev": true, "requires": { "chalk": "^4.1.0", "date-fns": "^2.16.1", "lodash": "^4.17.21", - "read-pkg": "^5.2.0", "rxjs": "^6.6.3", "spawn-command": "^0.0.2-1", "supports-color": "^8.1.0", @@ -5428,9 +5500,9 @@ } }, "conventional-changelog-angular": { - "version": "5.0.12", - "resolved": "https://registry.npmjs.org/conventional-changelog-angular/-/conventional-changelog-angular-5.0.12.tgz", - "integrity": "sha512-5GLsbnkR/7A89RyHLvvoExbiGbd9xKdKqDTrArnPbOqBqG/2wIosu0fHwpeIRI8Tl94MhVNBXcLJZl92ZQ5USw==", + "version": "5.0.13", + "resolved": "https://registry.npmjs.org/conventional-changelog-angular/-/conventional-changelog-angular-5.0.13.tgz", + "integrity": "sha512-i/gipMxs7s8L/QeuavPF2hLnJgH6pEZAttySB6aiQLWcX3puWDL3ACVmvBhJGxnAy52Qc15ua26BufY6KpmrVA==", "dev": true, "requires": { "compare-func": "^2.0.0", @@ -5462,9 +5534,9 @@ "dev": true }, "conventional-changelog-conventionalcommits": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/conventional-changelog-conventionalcommits/-/conventional-changelog-conventionalcommits-4.6.0.tgz", - "integrity": "sha512-sj9tj3z5cnHaSJCYObA9nISf7eq/YjscLPoq6nmew4SiOjxqL2KRpK20fjnjVbpNDjJ2HR3MoVcWKXwbVvzS0A==", + "version": "4.6.1", + "resolved": "https://registry.npmjs.org/conventional-changelog-conventionalcommits/-/conventional-changelog-conventionalcommits-4.6.1.tgz", + "integrity": "sha512-lzWJpPZhbM1R0PIzkwzGBCnAkH5RKJzJfFQZcl/D+2lsJxAwGnDKBqn/F4C1RD31GJNn8NuKWQzAZDAVXPp2Mw==", "dev": true, "requires": { "compare-func": "^2.0.0", @@ -5473,9 +5545,9 @@ } }, "conventional-changelog-core": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/conventional-changelog-core/-/conventional-changelog-core-4.2.3.tgz", - "integrity": "sha512-MwnZjIoMRL3jtPH5GywVNqetGILC7g6RQFvdb8LRU/fA/338JbeWAku3PZ8yQ+mtVRViiISqJlb0sOz0htBZig==", + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/conventional-changelog-core/-/conventional-changelog-core-4.2.4.tgz", + "integrity": "sha512-gDVS+zVJHE2v4SLc6B0sLsPiloR0ygU7HaDW14aNJE1v4SlqJPILPl/aJC7YdtRE4CybBf8gDwObBvKha8Xlyg==", "dev": true, "requires": { "add-stream": "^1.0.0", @@ -5689,9 +5761,9 @@ } }, "conventional-commits-parser": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/conventional-commits-parser/-/conventional-commits-parser-3.2.1.tgz", - "integrity": "sha512-OG9kQtmMZBJD/32NEw5IhN5+HnBqVjy03eC+I71I0oQRFA5rOgA4OtPOYG7mz1GkCfCNxn3gKIX8EiHJYuf1cA==", + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/conventional-commits-parser/-/conventional-commits-parser-3.2.2.tgz", + "integrity": "sha512-Jr9KAKgqAkwXMRHjxDwO/zOCDKod1XdAESHAGuJX38iZ7ZzVti/tvVoysO0suMsdAObp9NQ2rHSsSbnAqZ5f5g==", "dev": true, "requires": { "JSONStream": "^1.0.4", @@ -5699,8 +5771,7 @@ "lodash": "^4.17.15", "meow": "^8.0.0", "split2": "^3.0.0", - "through2": "^4.0.0", - "trim-off-newlines": "^1.0.0" + "through2": "^4.0.0" } }, "conventional-recommended-bump": { @@ -5752,25 +5823,19 @@ "keygrip": "~1.1.0" } }, - "copy-descriptor": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", - "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=", - "dev": true - }, "core-js-bundle": { - "version": "3.16.1", - "resolved": "https://registry.npmjs.org/core-js-bundle/-/core-js-bundle-3.16.1.tgz", - "integrity": "sha512-pPavAOLKXD2YXNBhS3jq4WMGJPeqgo4W9WZ7GebxXTZY/jvnD5ID+J3nUOCS7UXwCNsQKbbUg1+hp/4rmvzNeg==", + "version": "3.18.3", + "resolved": "https://registry.npmjs.org/core-js-bundle/-/core-js-bundle-3.18.3.tgz", + "integrity": "sha512-CF49ivLLZYIZxZ5l+0m59N1JYIoAJRb8O2FfkZqeoRHMVu6OqEvj9jXtTrdH4mOz5z4xJgujzmZwO6vs/uOEIg==", "dev": true }, "core-js-compat": { - "version": "3.16.1", - "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.16.1.tgz", - "integrity": "sha512-NHXQXvRbd4nxp9TEmooTJLUf94ySUG6+DSsscBpTftN1lQLQ4LjnWvc7AoIo4UjDsFF3hB8Uh5LLCRRdaiT5MQ==", + "version": "3.18.3", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.18.3.tgz", + "integrity": "sha512-4zP6/y0a2RTHN5bRGT7PTq9lVt3WzvffTNjqnTKsXhkAYNDTkdCLOIfAdOLcQ/7TDdyRj3c+NeHe1NmF1eDScw==", "dev": true, "requires": { - "browserslist": "^4.16.7", + "browserslist": "^4.17.3", "semver": "7.0.0" }, "dependencies": { @@ -5783,9 +5848,9 @@ } }, "core-js-pure": { - "version": "3.16.1", - "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.16.1.tgz", - "integrity": "sha512-TyofCdMzx0KMhi84mVRS8rL1XsRk2SPUNz2azmth53iRN0/08Uim9fdhQTaZTG1LqaXHYVci4RDHka6WrXfnvg==", + "version": "3.18.3", + "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.18.3.tgz", + "integrity": "sha512-qfskyO/KjtbYn09bn1IPkuhHl5PlJ6IzJ9s9sraJ1EqcuGyLGKzhSM1cY0zgyL9hx42eulQLZ6WaeK5ycJCkqw==", "dev": true }, "core-util-is": { @@ -5795,9 +5860,9 @@ "dev": true }, "cosmiconfig": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.0.0.tgz", - "integrity": "sha512-pondGvTuVYDk++upghXJabWzL6Kxu6f26ljFw64Swq9v6sQPUL3EUlVDV56diOjpCayKihL6hVe8exIACU4XcA==", + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.0.1.tgz", + "integrity": "sha512-a1YWNUV2HwGimB7dU2s1wUMurNKjpx60HxBB6xUM8Re+2s1g1IIfJvFR0/iCF+XHdE0GMTKTuLR32UQff4TEyQ==", "dev": true, "requires": { "@types/parse-json": "^4.0.0", @@ -5807,6 +5872,12 @@ "yaml": "^1.10.0" } }, + "create-require": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", + "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", + "dev": true + }, "cross-spawn": { "version": "7.0.3", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", @@ -5871,9 +5942,9 @@ } }, "date-fns": { - "version": "2.23.0", - "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-2.23.0.tgz", - "integrity": "sha512-5ycpauovVyAk0kXNZz6ZoB9AYMZB4DObse7P3BPWmyEjXNORTI8EJ6X0uaSAq4sCHzM1uajzrkr6HnsLQpxGXA==", + "version": "2.25.0", + "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-2.25.0.tgz", + "integrity": "sha512-ovYRFnTrbGPD4nqaEqescPEv1mNwvt+UTqI3Ay9SzNtey9NZnYu6E2qCcBBgJ6/2VF1zGGygpyTDITqpQQ5e+w==", "dev": true }, "date-format": { @@ -5933,12 +6004,6 @@ } } }, - "decode-uri-component": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", - "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=", - "dev": true - }, "decompress-response": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz", @@ -5978,9 +6043,9 @@ "dev": true }, "deep-is": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", - "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=", + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", "dev": true }, "deepmerge": { @@ -6046,47 +6111,6 @@ "object-keys": "^1.0.12" } }, - "define-property": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", - "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", - "dev": true, - "requires": { - "is-descriptor": "^1.0.2", - "isobject": "^3.0.1" - }, - "dependencies": { - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - } - } - }, "delayed-stream": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", @@ -6105,6 +6129,12 @@ "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", "dev": true }, + "dependency-graph": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/dependency-graph/-/dependency-graph-0.11.0.tgz", + "integrity": "sha512-JeMq7fEshyepOWDfcfHK06N3MhyPhz++vtqWhMT5O9A3K42rdsEDpfdVqjaqaAhsw6a+ZqeDvQVtD0hFHQWrzg==", + "dev": true + }, "destroy": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", @@ -6167,9 +6197,9 @@ "dev": true }, "diff": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/diff/-/diff-3.5.0.tgz", - "integrity": "sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==", + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", + "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", "dev": true }, "dir-glob": { @@ -6211,6 +6241,14 @@ "domelementtype": "^2.0.1", "domhandler": "^4.2.0", "entities": "^2.0.0" + }, + "dependencies": { + "entities": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", + "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", + "dev": true + } } }, "dom5": { @@ -6239,18 +6277,18 @@ "dev": true }, "domhandler": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.2.0.tgz", - "integrity": "sha512-zk7sgt970kzPks2Bf+dwT/PLzghLnsivb9CcxkvR8Mzr66Olr0Ofd8neSbglHJHaHa2MadfoSdNlKYAaafmWfA==", + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.2.2.tgz", + "integrity": "sha512-PzE9aBMsdZO8TK4BnuJwH0QT41wgMbRzuZrHUcpYncEjmQazq8QEaBWgLG7ZyC/DAZKEgglpIA6j4Qn/HmxS3w==", "dev": true, "requires": { "domelementtype": "^2.2.0" } }, "domutils": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.7.0.tgz", - "integrity": "sha512-8eaHa17IwJUPAiB+SoTYBo5mCdeMgdcAoXJ59m6DT1vw+5iLS3gNoqYaRowaBKtGVrOF1Jz4yDTgYKLK2kvfJg==", + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz", + "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==", "dev": true, "requires": { "dom-serializer": "^1.0.1", @@ -6358,9 +6396,9 @@ "dev": true }, "electron-to-chromium": { - "version": "1.3.806", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.806.tgz", - "integrity": "sha512-AH/otJLAAecgyrYp0XK1DPiGVWcOgwPeJBOLeuFQ5l//vhQhwC9u6d+GijClqJAmsHG4XDue81ndSQPohUu0xA==", + "version": "1.3.876", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.876.tgz", + "integrity": "sha512-a6LR4738psrubCtGx5HxM/gNlrIsh4eFTNnokgOqvQo81GWd07lLcOjITkAXn2y4lIp18vgS+DGnehj+/oEAxQ==", "dev": true }, "emoji-regex": { @@ -6434,6 +6472,12 @@ "requires": { "ms": "^2.1.1" } + }, + "ws": { + "version": "7.4.6", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.4.6.tgz", + "integrity": "sha512-YmhHDO4MzaDLB+M9ym/mDA5z0naX8j7SIlT8f8z+I0VtzsRbekxEutHSme7NPS2qE8StCYQNUnfWdXta/Yu85A==", + "dev": true } } }, @@ -6470,6 +6514,12 @@ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", "dev": true + }, + "ws": { + "version": "7.4.6", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.4.6.tgz", + "integrity": "sha512-YmhHDO4MzaDLB+M9ym/mDA5z0naX8j7SIlT8f8z+I0VtzsRbekxEutHSme7NPS2qE8StCYQNUnfWdXta/Yu85A==", + "dev": true } } }, @@ -6502,9 +6552,9 @@ "dev": true }, "entities": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", - "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/entities/-/entities-3.0.1.tgz", + "integrity": "sha512-WiyBqoomrwMdFG1e0kqvASYfnlb0lp8M5o5Fw2OFq1hNZxxcNk8Ik0Xm7LxzBhuidnZB/UtBqVCgUz3kBOP51Q==", "dev": true }, "env-paths": { @@ -6528,23 +6578,32 @@ "is-arrayish": "^0.2.1" } }, + "errorstacks": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/errorstacks/-/errorstacks-2.3.2.tgz", + "integrity": "sha512-cJp8qf5t2cXmVZJjZVrcU4ODFJeQOcUyjJEtPFtWO+3N6JPM6vCe4Sfv3cwIs/qS7gnUo/fvKX/mDCVQZq+P7A==", + "dev": true + }, "es-abstract": { - "version": "1.18.5", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.5.tgz", - "integrity": "sha512-DDggyJLoS91CkJjgauM5c0yZMjiD1uK3KcaCeAmffGwZ+ODWzOkPN4QwRbsK5DOFf06fywmyLci3ZD8jLGhVYA==", + "version": "1.19.1", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.19.1.tgz", + "integrity": "sha512-2vJ6tjA/UfqLm2MPs7jxVybLoB8i1t1Jd9R3kISld20sIxPcTbLuggQOUxeWeAvIUkduv/CfMjuh4WmiXr2v9w==", "dev": true, "requires": { "call-bind": "^1.0.2", "es-to-primitive": "^1.2.1", "function-bind": "^1.1.1", "get-intrinsic": "^1.1.1", + "get-symbol-description": "^1.0.0", "has": "^1.0.3", "has-symbols": "^1.0.2", "internal-slot": "^1.0.3", - "is-callable": "^1.2.3", + "is-callable": "^1.2.4", "is-negative-zero": "^2.0.1", - "is-regex": "^1.1.3", - "is-string": "^1.0.6", + "is-regex": "^1.1.4", + "is-shared-array-buffer": "^1.0.1", + "is-string": "^1.0.7", + "is-weakref": "^1.0.1", "object-inspect": "^1.11.0", "object-keys": "^1.1.1", "object.assign": "^4.1.2", @@ -6655,6 +6714,12 @@ "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", "dev": true }, + "es-module-lexer": { + "version": "0.3.26", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-0.3.26.tgz", + "integrity": "sha512-Va0Q/xqtrss45hWzP8CZJwzGSZJjDM5/MJRE3IXXnUCcVLElR9BRaE9F62BopysASyc4nM3uwhSW7FFB9nlWAA==", + "dev": true + }, "get-stream": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", @@ -6664,6 +6729,16 @@ "pump": "^3.0.0" } }, + "koa-etag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/koa-etag/-/koa-etag-3.0.0.tgz", + "integrity": "sha1-nvc4Ld1agqsN6xU0FckVg293HT8=", + "dev": true, + "requires": { + "etag": "^1.3.0", + "mz": "^2.1.0" + } + }, "lru-cache": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", @@ -6673,7 +6748,17 @@ "yallist": "^3.0.2" } }, - "parse5": { + "open": { + "version": "7.4.2", + "resolved": "https://registry.npmjs.org/open/-/open-7.4.2.tgz", + "integrity": "sha512-MVHddDVweXZF3awtlAS+6pgKLlm/JgxZ90+/NBurBoQctVOOB/zDdVjcyPzQ+0laDGbsWgrRkflI65sQeOgT9Q==", + "dev": true, + "requires": { + "is-docker": "^2.0.0", + "is-wsl": "^2.1.1" + } + }, + "parse5": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/parse5/-/parse5-5.1.1.tgz", "integrity": "sha512-ugq4DFI0Ptb+WWjAdOK16+u/nHfiIrcE+sh8kZMaM0WllQKLI9rOUq6c2b7cwPkXdzfQESqvoqK6ug7U/Yyzug==", @@ -6703,9 +6788,9 @@ } }, "es-module-lexer": { - "version": "0.3.26", - "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-0.3.26.tgz", - "integrity": "sha512-Va0Q/xqtrss45hWzP8CZJwzGSZJjDM5/MJRE3IXXnUCcVLElR9BRaE9F62BopysASyc4nM3uwhSW7FFB9nlWAA==", + "version": "0.9.3", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-0.9.3.tgz", + "integrity": "sha512-1HQ2M2sPtxwnvOvT1ZClHyQDiggdNjURWpY2we6aMKCQiUVxTmVs2UYPLIrD84sS+kMdUwfBSylbJPwNnBrnHQ==", "dev": true }, "es-module-shims": { @@ -6819,12 +6904,6 @@ "dev": true, "optional": true }, - "mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", - "dev": true - }, "rollup": { "version": "2.37.1", "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.37.1.tgz", @@ -6940,12 +7019,13 @@ } }, "eslint-module-utils": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.6.2.tgz", - "integrity": "sha512-QG8pcgThYOuqxupd06oYTZoNOGaUdTY1PqK+oS6ElF6vs4pBdk/aYxFVQQXzcrAqp9m7cl7lb2ubazX+g16k2Q==", + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.7.1.tgz", + "integrity": "sha512-fjoetBXQZq2tSTWZ9yWVl2KuFrTZZH3V+9iD1V1RfpDgxzJR+mPd/KZmMiA8gbPqdBzpNiEHOuT7IYEWxrH0zQ==", "dev": true, "requires": { "debug": "^3.2.7", + "find-up": "^2.1.0", "pkg-dir": "^2.0.0" }, "dependencies": { @@ -6957,67 +7037,6 @@ "requires": { "ms": "^2.1.1" } - } - } - }, - "eslint-plugin-babel": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-babel/-/eslint-plugin-babel-5.3.1.tgz", - "integrity": "sha512-VsQEr6NH3dj664+EyxJwO4FCYm/00JhYb3Sk3ft8o+fpKuIfQ9TaW6uVUfvwMXHcf/lsnRIoyFPsLMyiWCSL/g==", - "dev": true, - "requires": { - "eslint-rule-composer": "^0.3.0" - } - }, - "eslint-plugin-html": { - "version": "6.1.2", - "resolved": "https://registry.npmjs.org/eslint-plugin-html/-/eslint-plugin-html-6.1.2.tgz", - "integrity": "sha512-bhBIRyZFqI4EoF12lGDHAmgfff8eLXx6R52/K3ESQhsxzCzIE6hdebS7Py651f7U3RBotqroUnC3L29bR7qJWQ==", - "dev": true, - "requires": { - "htmlparser2": "^6.0.1" - } - }, - "eslint-plugin-import": { - "version": "2.24.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.24.0.tgz", - "integrity": "sha512-Kc6xqT9hiYi2cgybOc0I2vC9OgAYga5o/rAFinam/yF/t5uBqxQbauNPMC6fgb640T/89P0gFoO27FOilJ/Cqg==", - "dev": true, - "requires": { - "array-includes": "^3.1.3", - "array.prototype.flat": "^1.2.4", - "debug": "^2.6.9", - "doctrine": "^2.1.0", - "eslint-import-resolver-node": "^0.3.5", - "eslint-module-utils": "^2.6.2", - "find-up": "^2.0.0", - "has": "^1.0.3", - "is-core-module": "^2.4.0", - "minimatch": "^3.0.4", - "object.values": "^1.1.3", - "pkg-up": "^2.0.0", - "read-pkg-up": "^3.0.0", - "resolve": "^1.20.0", - "tsconfig-paths": "^3.9.0" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "doctrine": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", - "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", - "dev": true, - "requires": { - "esutils": "^2.0.2" - } }, "find-up": { "version": "2.1.0", @@ -7028,12 +7047,6 @@ "locate-path": "^2.0.0" } }, - "hosted-git-info": { - "version": "2.8.9", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", - "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", - "dev": true - }, "locate-path": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", @@ -7044,24 +7057,6 @@ "path-exists": "^3.0.0" } }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - }, - "normalize-package-data": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", - "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", - "dev": true, - "requires": { - "hosted-git-info": "^2.1.4", - "resolve": "^1.10.0", - "semver": "2 || 3 || 4 || 5", - "validate-npm-package-license": "^3.0.1" - } - }, "p-limit": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", @@ -7091,49 +7086,78 @@ "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", "dev": true - }, - "path-type": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz", - "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==", - "dev": true, - "requires": { - "pify": "^3.0.0" - } - }, - "read-pkg": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz", - "integrity": "sha1-nLxoaXj+5l0WwA4rGcI3/Pbjg4k=", + } + } + }, + "eslint-plugin-babel": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-babel/-/eslint-plugin-babel-5.3.1.tgz", + "integrity": "sha512-VsQEr6NH3dj664+EyxJwO4FCYm/00JhYb3Sk3ft8o+fpKuIfQ9TaW6uVUfvwMXHcf/lsnRIoyFPsLMyiWCSL/g==", + "dev": true, + "requires": { + "eslint-rule-composer": "^0.3.0" + } + }, + "eslint-plugin-html": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-html/-/eslint-plugin-html-6.2.0.tgz", + "integrity": "sha512-vi3NW0E8AJombTvt8beMwkL1R/fdRWl4QSNRNMhVQKWm36/X0KF0unGNAY4mqUF06mnwVWZcIcerrCnfn9025g==", + "dev": true, + "requires": { + "htmlparser2": "^7.1.2" + } + }, + "eslint-plugin-import": { + "version": "2.25.2", + "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.25.2.tgz", + "integrity": "sha512-qCwQr9TYfoBHOFcVGKY9C9unq05uOxxdklmBXLVvcwo68y5Hta6/GzCZEMx2zQiu0woKNEER0LE7ZgaOfBU14g==", + "dev": true, + "requires": { + "array-includes": "^3.1.4", + "array.prototype.flat": "^1.2.5", + "debug": "^2.6.9", + "doctrine": "^2.1.0", + "eslint-import-resolver-node": "^0.3.6", + "eslint-module-utils": "^2.7.0", + "has": "^1.0.3", + "is-core-module": "^2.7.0", + "is-glob": "^4.0.3", + "minimatch": "^3.0.4", + "object.values": "^1.1.5", + "resolve": "^1.20.0", + "tsconfig-paths": "^3.11.0" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "dev": true, "requires": { - "load-json-file": "^4.0.0", - "normalize-package-data": "^2.3.2", - "path-type": "^3.0.0" + "ms": "2.0.0" } }, - "read-pkg-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-3.0.0.tgz", - "integrity": "sha1-PtSWaF26D4/hGNBpHcUfSh/5bwc=", + "doctrine": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", + "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", "dev": true, "requires": { - "find-up": "^2.0.0", - "read-pkg": "^3.0.0" + "esutils": "^2.0.2" } }, - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", "dev": true } } }, "eslint-plugin-lit": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-lit/-/eslint-plugin-lit-1.5.1.tgz", - "integrity": "sha512-pYB0QM11uyOk5L55QfGhBmWi8a56PkNsnx+zVpY4bxz9YVquEo4BeRnFmf9AwFyT89rhGud9QruFhM2xJ4piwg==", + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-lit/-/eslint-plugin-lit-1.6.1.tgz", + "integrity": "sha512-BpPoWVhf8dQ/Sz5Pi9NlqbGoH5BcMcVyXhi2XTx2XGMAO9U2lS+GTSsqJjI5hL3OuxCicNiUEWXazAwi9cAGxQ==", "dev": true, "requires": { "parse5": "^6.0.1", @@ -7142,22 +7166,22 @@ } }, "eslint-plugin-lit-a11y": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-lit-a11y/-/eslint-plugin-lit-a11y-1.0.1.tgz", - "integrity": "sha512-c+GgGSXb9HMgbzJGp0yl+msHk2rBXcA7KwbobbLonSXdHm6ln7zRwAEj4i7527FOaCKkhxiN6RXfOJcZT1/Bow==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-lit-a11y/-/eslint-plugin-lit-a11y-1.1.0.tgz", + "integrity": "sha512-reJqT0UG/Y8OC2z7pfgm0ODK1D6o5TgQpGdlgN1ja0HjdREXLqFVoYiEv013oNx3kBhTUaLlic64rRNw+386xw==", "dev": true, "requires": { "aria-query": "^4.2.2", - "axe-core": "^4.0.2", + "axe-core": "^4.3.3", "axobject-query": "^2.2.0", "dom5": "^3.0.1", - "emoji-regex": "^9.0.0", + "emoji-regex": "^9.2.0", "eslint": "^7.6.0", "eslint-rule-extender": "0.0.1", "intl-list-format": "^1.0.3", "parse5": "^5.1.1", - "parse5-htmlparser2-tree-adapter": "^6.0.0", - "requireindex": "~1.1.0" + "parse5-htmlparser2-tree-adapter": "^6.0.1", + "requireindex": "~1.2.0" }, "dependencies": { "emoji-regex": { @@ -7171,12 +7195,6 @@ "resolved": "https://registry.npmjs.org/parse5/-/parse5-5.1.1.tgz", "integrity": "sha512-ugq4DFI0Ptb+WWjAdOK16+u/nHfiIrcE+sh8kZMaM0WllQKLI9rOUq6c2b7cwPkXdzfQESqvoqK6ug7U/Yyzug==", "dev": true - }, - "requireindex": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/requireindex/-/requireindex-1.1.0.tgz", - "integrity": "sha1-5UBLgVV+91225JxacgBIk/4D4WI=", - "dev": true } } }, @@ -7197,9 +7215,9 @@ } }, "eslint-plugin-wc": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-wc/-/eslint-plugin-wc-1.3.1.tgz", - "integrity": "sha512-2y+ezPwKFm470Pq2dvdkHXEjzCSqo6B2Iqh9gJQFGXs1kvvcYXR+gDvJNICI68utlszVUakt0DYG83uzJnfCKg==", + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/eslint-plugin-wc/-/eslint-plugin-wc-1.3.2.tgz", + "integrity": "sha512-/Tt3kIXBp1jh06xYtRqPwAvpNxVVk9YtbcFCKEgLa5l3GY+urZyn376pISaaZxkm9HVD3AIPOF5i9/uFwyF0Zw==", "dev": true, "requires": { "is-valid-element-name": "^1.0.0", @@ -7357,92 +7375,12 @@ "strip-final-newline": "^2.0.0" } }, - "expand-brackets": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", - "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", - "dev": true, - "requires": { - "debug": "^2.3.3", - "define-property": "^0.2.5", - "extend-shallow": "^2.0.1", - "posix-character-classes": "^0.1.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - } - } - }, "extend": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", "dev": true }, - "extend-shallow": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", - "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", - "dev": true, - "requires": { - "assign-symbols": "^1.0.0", - "is-extendable": "^1.0.1" - }, - "dependencies": { - "is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "dev": true, - "requires": { - "is-plain-object": "^2.0.4" - } - }, - "is-plain-object": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", - "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", - "dev": true, - "requires": { - "isobject": "^3.0.1" - } - } - } - }, "external-editor": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", @@ -7454,71 +7392,6 @@ "tmp": "^0.0.33" } }, - "extglob": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", - "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", - "dev": true, - "requires": { - "array-unique": "^0.3.2", - "define-property": "^1.0.0", - "expand-brackets": "^2.1.4", - "extend-shallow": "^2.0.1", - "fragment-cache": "^0.2.1", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "dependencies": { - "define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "dev": true, - "requires": { - "is-descriptor": "^1.0.0" - } - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - }, - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - } - } - }, "extsprintf": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", @@ -7526,9 +7399,9 @@ "dev": true }, "fast-check": { - "version": "2.17.0", - "resolved": "https://registry.npmjs.org/fast-check/-/fast-check-2.17.0.tgz", - "integrity": "sha512-fNNKkxNEJP+27QMcEzF6nbpOYoSZIS0p+TyB+xh/jXqRBxRhLkiZSREly4ruyV8uJi7nwH1YWAhi7OOK5TubRw==", + "version": "2.18.0", + "resolved": "https://registry.npmjs.org/fast-check/-/fast-check-2.18.0.tgz", + "integrity": "sha512-7KKUw0wtAJOVrJ1DgmFILd9EmeqMLGtfe5HoEtkYZfYIxohm6Zy7zPq1Zl8t6tPL8A3e86YZrheyGg2m5j8cLA==", "dev": true, "requires": { "pure-rand": "^5.0.0" @@ -7566,9 +7439,9 @@ "dev": true }, "fastq": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.11.1.tgz", - "integrity": "sha512-HOnr8Mc60eNYl1gzwp6r5RoUyAn5/glBolUzP/Ez6IFVPMPirxn/9phgL6zhOtaTy7ISwPvQ+wT+hfcRZh/bzw==", + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz", + "integrity": "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==", "dev": true, "requires": { "reusify": "^1.0.4" @@ -7706,26 +7579,11 @@ "dev": true }, "follow-redirects": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.14.1.tgz", - "integrity": "sha512-HWqDgT7ZEkqRzBvc2s64vSZ/hfOceEol3ac/7tKwzuvEyWx3/4UegXh5oBOIotkGsObyk3xznnSRVADBgWSQVg==", - "dev": true - }, - "for-in": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", - "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=", + "version": "1.14.4", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.14.4.tgz", + "integrity": "sha512-zwGkiSXC1MUJG/qmeIFH2HBJx9u0V46QGUe3YR1fXG8bXQxq7fLj0RjLZQ5nubr9qNJUZrH+xUcwXEoXNpfS+g==", "dev": true }, - "for-own": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/for-own/-/for-own-1.0.0.tgz", - "integrity": "sha1-xjMy9BXO3EsE2/5wz4NklMU8tEs=", - "dev": true, - "requires": { - "for-in": "^1.0.1" - } - }, "forever-agent": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", @@ -7743,15 +7601,6 @@ "mime-types": "^2.1.12" } }, - "fragment-cache": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", - "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=", - "dev": true, - "requires": { - "map-cache": "^0.2.2" - } - }, "fresh": { "version": "0.5.2", "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", @@ -7910,15 +7759,15 @@ "dev": true }, "get-pkg-repo": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/get-pkg-repo/-/get-pkg-repo-4.1.2.tgz", - "integrity": "sha512-/FjamZL9cBYllEbReZkxF2IMh80d8TJoC4e3bmLNif8ibHw95aj0N/tzqK0kZz9eU/3w3dL6lF4fnnX/sDdW3A==", + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/get-pkg-repo/-/get-pkg-repo-4.2.1.tgz", + "integrity": "sha512-2+QbHjFRfGB74v/pYWjd5OhU3TDIC2Gv/YKUTk/tCvAz0pkn/Mz6P3uByuBimLOcPvN2jYdScl3xGFSrx0jEcA==", "dev": true, "requires": { "@hutson/parse-repository-url": "^3.0.0", "hosted-git-info": "^4.0.0", - "meow": "^7.0.0", - "through2": "^2.0.0" + "through2": "^2.0.0", + "yargs": "^16.2.0" }, "dependencies": { "isarray": { @@ -7927,45 +7776,6 @@ "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", "dev": true }, - "meow": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/meow/-/meow-7.1.1.tgz", - "integrity": "sha512-GWHvA5QOcS412WCo8vwKDlTelGLsCGBVevQB5Kva961rmNfun0PCbv5+xta2kUMFJyR8/oWnn7ddeKdosbAPbA==", - "dev": true, - "requires": { - "@types/minimist": "^1.2.0", - "camelcase-keys": "^6.2.2", - "decamelize-keys": "^1.1.0", - "hard-rejection": "^2.1.0", - "minimist-options": "4.1.0", - "normalize-package-data": "^2.5.0", - "read-pkg-up": "^7.0.1", - "redent": "^3.0.0", - "trim-newlines": "^3.0.0", - "type-fest": "^0.13.1", - "yargs-parser": "^18.1.3" - } - }, - "normalize-package-data": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", - "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", - "dev": true, - "requires": { - "hosted-git-info": "^2.1.4", - "resolve": "^1.10.0", - "semver": "2 || 3 || 4 || 5", - "validate-npm-package-license": "^3.0.1" - }, - "dependencies": { - "hosted-git-info": { - "version": "2.8.9", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", - "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", - "dev": true - } - } - }, "readable-stream": { "version": "2.3.7", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", @@ -7987,12 +7797,6 @@ "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", "dev": true }, - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true - }, "string_decoder": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", @@ -8012,20 +7816,19 @@ "xtend": "~4.0.1" } }, - "type-fest": { - "version": "0.13.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.13.1.tgz", - "integrity": "sha512-34R7HTnG0XIJcBSn5XhDd7nNFPRcXYRZrBB2O2jdKqYODldSzBAqzsWoZYYvduky73toYS/ESqxPvkDf/F0XMg==", - "dev": true - }, - "yargs-parser": { - "version": "18.1.3", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", - "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", + "yargs": { + "version": "16.2.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", + "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", "dev": true, "requires": { - "camelcase": "^5.0.0", - "decamelize": "^1.2.0" + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.0", + "y18n": "^5.0.5", + "yargs-parser": "^20.2.2" } } } @@ -8036,11 +7839,15 @@ "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", "dev": true }, - "get-value": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", - "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=", - "dev": true + "get-symbol-description": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz", + "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.1" + } }, "getpass": { "version": "0.1.7", @@ -8095,300 +7902,43 @@ "semver": { "version": "6.3.0", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - } - } - }, - "gitconfiglocal": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/gitconfiglocal/-/gitconfiglocal-1.0.0.tgz", - "integrity": "sha1-QdBF84UaXqiPA/JMocYXgRRGS5s=", - "dev": true, - "requires": { - "ini": "^1.3.2" - } - }, - "glob": { - "version": "7.1.7", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz", - "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==", - "dev": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, - "requires": { - "is-glob": "^4.0.1" - } - }, - "glob-watcher": { - "version": "5.0.5", - "resolved": "https://registry.npmjs.org/glob-watcher/-/glob-watcher-5.0.5.tgz", - "integrity": "sha512-zOZgGGEHPklZNjZQaZ9f41i7F2YwE+tS5ZHrDhbBCk3stwahn5vQxnFmBJZHoYdusR6R1bLSXeGUy/BhctwKzw==", - "dev": true, - "requires": { - "anymatch": "^2.0.0", - "async-done": "^1.2.0", - "chokidar": "^2.0.0", - "is-negated-glob": "^1.0.0", - "just-debounce": "^1.0.0", - "normalize-path": "^3.0.0", - "object.defaults": "^1.1.0" - }, - "dependencies": { - "anymatch": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", - "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", - "dev": true, - "requires": { - "micromatch": "^3.1.4", - "normalize-path": "^2.1.1" - }, - "dependencies": { - "normalize-path": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", - "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", - "dev": true, - "requires": { - "remove-trailing-separator": "^1.0.1" - } - } - } - }, - "binary-extensions": { - "version": "1.13.1", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.1.tgz", - "integrity": "sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==", - "dev": true - }, - "braces": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", - "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", - "dev": true, - "requires": { - "arr-flatten": "^1.1.0", - "array-unique": "^0.3.2", - "extend-shallow": "^2.0.1", - "fill-range": "^4.0.0", - "isobject": "^3.0.1", - "repeat-element": "^1.1.2", - "snapdragon": "^0.8.1", - "snapdragon-node": "^2.0.1", - "split-string": "^3.0.2", - "to-regex": "^3.0.1" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "chokidar": { - "version": "2.1.8", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.8.tgz", - "integrity": "sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==", - "dev": true, - "requires": { - "anymatch": "^2.0.0", - "async-each": "^1.0.1", - "braces": "^2.3.2", - "fsevents": "^1.2.7", - "glob-parent": "^3.1.0", - "inherits": "^2.0.3", - "is-binary-path": "^1.0.0", - "is-glob": "^4.0.0", - "normalize-path": "^3.0.0", - "path-is-absolute": "^1.0.0", - "readdirp": "^2.2.1", - "upath": "^1.1.1" - } - }, - "fill-range": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", - "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", - "dev": true, - "requires": { - "extend-shallow": "^2.0.1", - "is-number": "^3.0.0", - "repeat-string": "^1.6.1", - "to-regex-range": "^2.1.0" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "fsevents": { - "version": "1.2.13", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.13.tgz", - "integrity": "sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw==", - "dev": true, - "optional": true - }, - "glob-parent": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", - "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", - "dev": true, - "requires": { - "is-glob": "^3.1.0", - "path-dirname": "^1.0.0" - }, - "dependencies": { - "is-glob": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", - "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", - "dev": true, - "requires": { - "is-extglob": "^2.1.0" - } - } - } - }, - "is-binary-path": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", - "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=", - "dev": true, - "requires": { - "binary-extensions": "^1.0.0" - } - }, - "is-buffer": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", - "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", - "dev": true - }, - "is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", - "dev": true - }, - "micromatch": { - "version": "3.1.10", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", - "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", - "dev": true, - "requires": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "braces": "^2.3.1", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "extglob": "^2.0.4", - "fragment-cache": "^0.2.1", - "kind-of": "^6.0.2", - "nanomatch": "^1.2.9", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.2" - } - }, - "readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "dev": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "readdirp": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz", - "integrity": "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.11", - "micromatch": "^3.1.10", - "readable-stream": "^2.0.2" - } - }, - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "requires": { - "safe-buffer": "~5.1.0" - } - }, - "to-regex-range": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", - "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", - "dev": true, - "requires": { - "is-number": "^3.0.0", - "repeat-string": "^1.6.1" - } + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true } } }, + "gitconfiglocal": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/gitconfiglocal/-/gitconfiglocal-1.0.0.tgz", + "integrity": "sha1-QdBF84UaXqiPA/JMocYXgRRGS5s=", + "dev": true, + "requires": { + "ini": "^1.3.2" + } + }, + "glob": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", + "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "requires": { + "is-glob": "^4.0.1" + } + }, "global-dirs": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-0.1.1.tgz", @@ -8479,14 +8029,6 @@ "source-map": "^0.6.1", "uglify-js": "^3.1.4", "wordwrap": "^1.0.0" - }, - "dependencies": { - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - } } }, "har-schema": { @@ -8568,64 +8110,6 @@ "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=", "dev": true }, - "has-value": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", - "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=", - "dev": true, - "requires": { - "get-value": "^2.0.6", - "has-values": "^1.0.0", - "isobject": "^3.0.0" - } - }, - "has-values": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz", - "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=", - "dev": true, - "requires": { - "is-number": "^3.0.0", - "kind-of": "^4.0.0" - }, - "dependencies": { - "is-buffer": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", - "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", - "dev": true - }, - "is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "kind-of": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", - "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, "has-yarn": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/has-yarn/-/has-yarn-2.1.0.tgz", @@ -8669,46 +8153,25 @@ } }, "htmlparser2": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-6.1.0.tgz", - "integrity": "sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A==", + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-7.1.2.tgz", + "integrity": "sha512-d6cqsbJba2nRdg8WW2okyD4ceonFHn9jLFxhwlNcLhQWcFPdxXeJulgOLjLKtAK9T6ahd+GQNZwG9fjmGW7lyg==", "dev": true, "requires": { "domelementtype": "^2.0.1", - "domhandler": "^4.0.0", - "domutils": "^2.5.2", - "entities": "^2.0.0" + "domhandler": "^4.2.2", + "domutils": "^2.8.0", + "entities": "^3.0.1" } }, "http-assert": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/http-assert/-/http-assert-1.4.1.tgz", - "integrity": "sha512-rdw7q6GTlibqVVbXr0CKelfV5iY8G2HqEUkhSk297BMbSpSL8crXC+9rjKoMcZZEsksX30le6f/4ul4E28gegw==", + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/http-assert/-/http-assert-1.5.0.tgz", + "integrity": "sha512-uPpH7OKX4H25hBmU6G1jWNaqJGpTXxey+YOUizJUAgu0AjLUeC8D73hTrhvDS5D+GJN1DN1+hhc/eF/wpxtp0w==", "dev": true, "requires": { "deep-equal": "~1.0.1", - "http-errors": "~1.7.2" - }, - "dependencies": { - "depd": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", - "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=", - "dev": true - }, - "http-errors": { - "version": "1.7.3", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.3.tgz", - "integrity": "sha512-ZTTX0MWrsQ2ZAhA1cejAwDLycFsd7I7nVtnkT3Ol0aqodaKW+0CTZDQ1uBv5whptCnc8e8HeRRJxRs0kmm/Qfw==", - "dev": true, - "requires": { - "depd": "~1.1.2", - "inherits": "2.0.4", - "setprototypeof": "1.1.1", - "statuses": ">= 1.5.0 < 2", - "toidentifier": "1.0.0" - } - } + "http-errors": "~1.8.0" } }, "http-cache-semantics": { @@ -8735,12 +8198,6 @@ "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=", "dev": true - }, - "setprototypeof": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", - "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", - "dev": true } } }, @@ -8827,9 +8284,9 @@ } }, "husky": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/husky/-/husky-7.0.1.tgz", - "integrity": "sha512-gceRaITVZ+cJH9sNHqx5tFwbzlLCVxtVZcusME8JYQ8Edy5mpGDOqD8QBCdMhpyo9a+JXddnujQ4rpY2Ff9SJA==", + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/husky/-/husky-7.0.4.tgz", + "integrity": "sha512-vbaCKN2QLtP/vD4yvs6iz6hBEo6wkSzs8HpRah1Z6aGmF2KW5PdYuAd7uX5a+OyBZHBhd+TFLqgjUgytQr4RvQ==", "dev": true }, "iconv-lite": { @@ -8854,9 +8311,9 @@ "dev": true }, "idb": { - "version": "6.1.2", - "resolved": "https://registry.npmjs.org/idb/-/idb-6.1.2.tgz", - "integrity": "sha512-1DNDVu3yDhAZkFDlJf0t7r+GLZ248F5pTAtA7V0oVG3yjmV125qZOx3g0XpAEkGZVYQiFDAsSOnGet2bhugc3w==", + "version": "6.1.5", + "resolved": "https://registry.npmjs.org/idb/-/idb-6.1.5.tgz", + "integrity": "sha512-IJtugpKkiVXQn5Y+LteyBCNk1N8xpGV3wWZk9EVtZWH8DYkjBn0bX1XnGP9RkyZF0sAcywa6unHqSWKe7q4LGw==", "dev": true }, "ieee754": { @@ -8928,6 +8385,12 @@ "integrity": "sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A==", "dev": true }, + "inflation": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/inflation/-/inflation-2.0.0.tgz", + "integrity": "sha1-i0F+R8KPklpFEz2RTKH9OJEH8w8=", + "dev": true + }, "inflight": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", @@ -9000,32 +8463,6 @@ "integrity": "sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo=", "dev": true }, - "is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "is-buffer": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", - "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", - "dev": true - }, - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, "is-alphabetical": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/is-alphabetical/-/is-alphabetical-1.0.4.tgz", @@ -9098,40 +8535,14 @@ } }, "is-core-module": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.5.0.tgz", - "integrity": "sha512-TXCMSDsEHMEEZ6eCA8rwRDbLu55MRGmrctljsBX/2v1d9/GzqHOxW5c5oPSgrUt2vBFXebu9rGqckXGPWOlYpg==", + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.8.0.tgz", + "integrity": "sha512-vd15qHsaqrRL7dtH6QNuy0ndJmRDrS9HAM1CAiSifNUFv4x1a0CCVsj18hJ1mShxIG6T2i1sO78MkP56r0nYRw==", "dev": true, "requires": { "has": "^1.0.3" } }, - "is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "is-buffer": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", - "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", - "dev": true - }, - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, "is-date-object": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", @@ -9147,37 +8558,12 @@ "integrity": "sha512-RGdriMmQQvZ2aqaQq3awNA6dCGtKpiDFcOzrTWrDAT2MiWrKQVPmxLGHl7Y2nNu6led0kEyoX0enY0qXYsv9zw==", "dev": true }, - "is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - }, - "dependencies": { - "kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", - "dev": true - } - } - }, "is-docker": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", "dev": true }, - "is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", - "dev": true - }, "is-extglob": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", @@ -9200,9 +8586,9 @@ } }, "is-glob": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", - "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", "dev": true, "requires": { "is-extglob": "^2.1.1" @@ -9259,12 +8645,6 @@ "integrity": "sha1-Mlj7afeMFNW4FdZkM2tM/7ZEFZE=", "dev": true }, - "is-negated-glob": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-negated-glob/-/is-negated-glob-1.0.0.tgz", - "integrity": "sha1-aRC8pdqMleeEtXUbl2z1oQ/uNtI=", - "dev": true - }, "is-negative-zero": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.1.tgz", @@ -9347,6 +8727,12 @@ "integrity": "sha1-/S2INUXEa6xaYz57mgnof6LLUGk=", "dev": true }, + "is-shared-array-buffer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.1.tgz", + "integrity": "sha512-IU0NmyknYZN0rChcKhRO1X8LYz5Isj/Fsqh8NJOSf+N/hCOTwy29F32Ik7a+QszE63IdvmwdTPDd6cZ5pg4cwA==", + "dev": true + }, "is-stream": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", @@ -9410,18 +8796,21 @@ "assert": "^1.4.1" } }, + "is-weakref": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.1.tgz", + "integrity": "sha512-b2jKc2pQZjaeFYWEf7ScFj+Be1I+PXmlu572Q8coTXZ+LD/QQZ7ShPMst8h16riVgyXTQwUsFEl74mDvc/3MHQ==", + "dev": true, + "requires": { + "call-bind": "^1.0.0" + } + }, "is-whitespace-character": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/is-whitespace-character/-/is-whitespace-character-1.0.4.tgz", "integrity": "sha512-SDweEzfIZM0SJV0EUga669UTKlmL0Pq8Lno0QDQsPnvECB3IM2aP0gdx5TrU0A01MAPfViaZiI2V1QMZLaKK5w==", "dev": true }, - "is-windows": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", - "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", - "dev": true - }, "is-word-character": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/is-word-character/-/is-word-character-1.0.4.tgz", @@ -9461,12 +8850,6 @@ "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", "dev": true }, - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true - }, "isstream": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", @@ -9474,9 +8857,9 @@ "dev": true }, "istanbul-lib-coverage": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.5.tgz", - "integrity": "sha512-8aXznuEPCJvGnMSRft4udDRDtb1V3pkQkMMI5LI+6HuQz5oQ4J2UFn1H82raA3qJtyOLkkwVqICBQkjnGtn5mA==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz", + "integrity": "sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==", "dev": true }, "istanbul-lib-instrument": { @@ -9494,6 +8877,12 @@ "semver": "^6.0.0" }, "dependencies": { + "istanbul-lib-coverage": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.5.tgz", + "integrity": "sha512-8aXznuEPCJvGnMSRft4udDRDtb1V3pkQkMMI5LI+6HuQz5oQ4J2UFn1H82raA3qJtyOLkkwVqICBQkjnGtn5mA==", + "dev": true + }, "semver": { "version": "6.3.0", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", @@ -9511,45 +8900,23 @@ "istanbul-lib-coverage": "^3.0.0", "make-dir": "^3.0.0", "supports-color": "^7.1.0" - }, - "dependencies": { - "istanbul-lib-coverage": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.0.0.tgz", - "integrity": "sha512-UiUIqxMgRDET6eR+o5HbfRYP1l0hqkWOs7vNxC/mggutCMUIhWMm8gAHb8tHlyfD3/l6rlgNA5cKdDzEAf6hEg==", - "dev": true - } } }, "istanbul-lib-source-maps": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.0.tgz", - "integrity": "sha512-c16LpFRkR8vQXyHZ5nLpY35JZtzj1PQY1iZmesUbf1FZHbIupcWfjgOXBY9YHkLEQ6puz1u4Dgj6qmU/DisrZg==", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz", + "integrity": "sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==", "dev": true, "requires": { "debug": "^4.1.1", "istanbul-lib-coverage": "^3.0.0", "source-map": "^0.6.1" - }, - "dependencies": { - "istanbul-lib-coverage": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.0.0.tgz", - "integrity": "sha512-UiUIqxMgRDET6eR+o5HbfRYP1l0hqkWOs7vNxC/mggutCMUIhWMm8gAHb8tHlyfD3/l6rlgNA5cKdDzEAf6hEg==", - "dev": true - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - } } }, "istanbul-reports": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.0.2.tgz", - "integrity": "sha512-9tZvz7AiR3PEDNGiV9vIouQ/EAcqMXFmkcA1CDFTwOB98OZVDL0PH9glHotf5Ugp6GCOTypfzGWI/OqjWNCRUw==", + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.0.5.tgz", + "integrity": "sha512-5+19PlhnGabNWB7kOFnuxT8H3T/iIyQzIbQMxXsURmmvKg86P2sbkrGOT77VnHw0Qr0gc2XzRaRfMZYYbSQCJQ==", "dev": true, "requires": { "html-escaper": "^2.0.0", @@ -9656,12 +9023,12 @@ "dev": true }, "json5": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.0.tgz", - "integrity": "sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", + "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", "dev": true, "requires": { - "minimist": "^1.2.5" + "minimist": "^1.2.0" } }, "jsonc-parser": { @@ -9710,12 +9077,6 @@ "verror": "1.10.0" } }, - "just-debounce": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/just-debounce/-/just-debounce-1.1.0.tgz", - "integrity": "sha512-qpcRocdkUmf+UTNBYx5w6dexX5J31AKK1OmPwH630a83DdVVUIngk55RSAiIGpQyoH0dlr872VHfPjnQnK1qDQ==", - "dev": true - }, "just-diff": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/just-diff/-/just-diff-3.1.1.tgz", @@ -9821,12 +9182,6 @@ "streamroller": "^2.2.4" } }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - }, "streamroller": { "version": "2.2.4", "resolved": "https://registry.npmjs.org/streamroller/-/streamroller-2.2.4.tgz", @@ -9943,12 +9298,6 @@ "minimatch": "^3.0.4" }, "dependencies": { - "istanbul-lib-coverage": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.0.0.tgz", - "integrity": "sha512-UiUIqxMgRDET6eR+o5HbfRYP1l0hqkWOs7vNxC/mggutCMUIhWMm8gAHb8tHlyfD3/l6rlgNA5cKdDzEAf6hEg==", - "dev": true - }, "istanbul-lib-instrument": { "version": "4.0.3", "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-4.0.3.tgz", @@ -10079,6 +9428,17 @@ "mkdirp": "^0.5.1", "remark-parse": "^4.0.0", "unified": "^6.1.5" + }, + "dependencies": { + "mkdirp": { + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", + "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", + "dev": true, + "requires": { + "minimist": "^1.2.5" + } + } } }, "karma-source-map-support": { @@ -10121,9 +9481,9 @@ "dev": true }, "koa": { - "version": "2.13.1", - "resolved": "https://registry.npmjs.org/koa/-/koa-2.13.1.tgz", - "integrity": "sha512-Lb2Dloc72auj5vK4X4qqL7B5jyDPQaZucc9sR/71byg7ryoD1NCaCm63CShk9ID9quQvDEi1bGR/iGjCG7As3w==", + "version": "2.13.4", + "resolved": "https://registry.npmjs.org/koa/-/koa-2.13.4.tgz", + "integrity": "sha512-43zkIKubNbnrULWlHdN5h1g3SEKXOEzoAlRsHOTFpnlDu8JlAOZSMJBLULusuXRequboiwJcj5vtYXKB3k7+2g==", "dev": true, "requires": { "accepts": "^1.3.5", @@ -10131,7 +9491,7 @@ "content-disposition": "~0.5.2", "content-type": "^1.0.4", "cookies": "~0.8.0", - "debug": "~3.1.0", + "debug": "^4.3.2", "delegates": "^1.0.0", "depd": "^2.0.0", "destroy": "^1.0.4", @@ -10142,30 +9502,13 @@ "http-errors": "^1.6.3", "is-generator-function": "^1.0.7", "koa-compose": "^4.1.0", - "koa-convert": "^1.2.0", + "koa-convert": "^2.0.0", "on-finished": "^2.3.0", "only": "~0.0.2", "parseurl": "^1.3.2", "statuses": "^1.5.0", "type-is": "^1.6.16", "vary": "^1.1.2" - }, - "dependencies": { - "debug": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", - "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - } } }, "koa-compose": { @@ -10187,34 +9530,22 @@ } }, "koa-convert": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/koa-convert/-/koa-convert-1.2.0.tgz", - "integrity": "sha1-2kCHXfSd4FOQmNFwC1CCDOvNIdA=", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/koa-convert/-/koa-convert-2.0.0.tgz", + "integrity": "sha512-asOvN6bFlSnxewce2e/DK3p4tltyfC4VM7ZwuTuepI7dEQVcvpyFuBcEARu1+Hxg8DIwytce2n7jrZtRlPrARA==", "dev": true, "requires": { "co": "^4.6.0", - "koa-compose": "^3.0.0" - }, - "dependencies": { - "koa-compose": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/koa-compose/-/koa-compose-3.2.1.tgz", - "integrity": "sha1-qFzLQLfZhtjlo0Wzoazo6rz1Tec=", - "dev": true, - "requires": { - "any-promise": "^1.1.0" - } - } + "koa-compose": "^4.1.0" } }, "koa-etag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/koa-etag/-/koa-etag-3.0.0.tgz", - "integrity": "sha1-nvc4Ld1agqsN6xU0FckVg293HT8=", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/koa-etag/-/koa-etag-4.0.0.tgz", + "integrity": "sha512-1cSdezCkBWlyuB9l6c/IFoe1ANCDdPBxkDkRiaIup40xpUub6U/wwRXoKBZw/O5BifX9OlqAjYnDyzM6+l+TAg==", "dev": true, "requires": { - "etag": "^1.3.0", - "mz": "^2.1.0" + "etag": "^1.8.1" } }, "koa-is-json": { @@ -10287,53 +9618,52 @@ "dev": true }, "lint-staged": { - "version": "11.1.2", - "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-11.1.2.tgz", - "integrity": "sha512-6lYpNoA9wGqkL6Hew/4n1H6lRqF3qCsujVT0Oq5Z4hiSAM7S6NksPJ3gnr7A7R52xCtiZMcEUNNQ6d6X5Bvh9w==", + "version": "11.2.3", + "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-11.2.3.tgz", + "integrity": "sha512-Tfmhk8O2XFMD25EswHPv+OYhUjsijy5D7liTdxeXvhG2rsadmOLFtyj8lmlfoFFXY8oXWAIOKpoI+lJe1DB1mw==", "dev": true, "requires": { - "chalk": "^4.1.1", - "cli-truncate": "^2.1.0", - "commander": "^7.2.0", - "cosmiconfig": "^7.0.0", - "debug": "^4.3.1", + "cli-truncate": "2.1.0", + "colorette": "^1.4.0", + "commander": "^8.2.0", + "cosmiconfig": "^7.0.1", + "debug": "^4.3.2", "enquirer": "^2.3.6", - "execa": "^5.0.0", - "listr2": "^3.8.2", - "log-symbols": "^4.1.0", + "execa": "^5.1.1", + "listr2": "^3.12.2", "micromatch": "^4.0.4", "normalize-path": "^3.0.0", "please-upgrade-node": "^3.2.0", "string-argv": "0.3.1", - "stringify-object": "^3.3.0" + "stringify-object": "3.3.0", + "supports-color": "8.1.1" }, "dependencies": { "commander": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", - "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-8.2.0.tgz", + "integrity": "sha512-LLKxDvHeL91/8MIyTAD5BFMNtoIwztGPMiM/7Bl8rIPmHCZXRxmSWr91h57dpOpnQ6jIUqEWdXE/uBYMfiVZDA==", "dev": true }, - "log-symbols": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", - "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", + "supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", "dev": true, "requires": { - "chalk": "^4.1.0", - "is-unicode-supported": "^0.1.0" + "has-flag": "^4.0.0" } } } }, "listr2": { - "version": "3.11.0", - "resolved": "https://registry.npmjs.org/listr2/-/listr2-3.11.0.tgz", - "integrity": "sha512-XLJVe2JgXCyQTa3FbSv11lkKExYmEyA4jltVo8z4FX10Vt1Yj8IMekBfwim0BSOM9uj1QMTJvDQQpHyuPbB/dQ==", + "version": "3.12.2", + "resolved": "https://registry.npmjs.org/listr2/-/listr2-3.12.2.tgz", + "integrity": "sha512-64xC2CJ/As/xgVI3wbhlPWVPx0wfTqbUAkpb7bjDi0thSWMqrf07UFhrfsGoo8YSXmF049Rp9C0cjLC8rZxK9A==", "dev": true, "requires": { "cli-truncate": "^2.1.0", - "colorette": "^1.2.2", + "colorette": "^1.4.0", "log-update": "^4.0.0", "p-map": "^4.0.0", "rxjs": "^6.6.7", @@ -10395,17 +9725,6 @@ "big.js": "^5.2.2", "emojis-list": "^3.0.0", "json5": "^1.0.1" - }, - "dependencies": { - "json5": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", - "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", - "dev": true, - "requires": { - "minimist": "^1.2.0" - } - } } }, "locate-path": { @@ -10646,6 +9965,12 @@ } } }, + "make-error": { + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", + "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", + "dev": true + }, "make-fetch-happen": { "version": "9.1.0", "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-9.1.0.tgz", @@ -10670,27 +9995,12 @@ "ssri": "^8.0.0" } }, - "map-cache": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", - "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=", - "dev": true - }, "map-obj": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-4.2.1.tgz", - "integrity": "sha512-+WA2/1sPmDj1dlvvJmB5G6JKfY9dpn7EVBUL06+y6PoljPkh+6V1QihwxNkbcGxCRjt2b0F9K0taiCuo7MbdFQ==", + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-4.3.0.tgz", + "integrity": "sha512-hdN1wVrZbb29eBGiGjJbeP8JbKjq1urkHJ/LIP/NY48MZ1QVXUsQBV1G1zvYFHn1XE06cwjBsOI2K3Ulnj1YXQ==", "dev": true }, - "map-visit": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", - "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=", - "dev": true, - "requires": { - "object-visit": "^1.0.0" - } - }, "markdown-escapes": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/markdown-escapes/-/markdown-escapes-1.0.4.tgz", @@ -10698,9 +10008,9 @@ "dev": true }, "marked": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/marked/-/marked-3.0.0.tgz", - "integrity": "sha512-IF2MYfFafPsLIhzLTu63secRBwOmIY+vwS+ei6qg8F+bTS+MxH6ONYRmuseGdZqF44qvoi3nP/rlpClBdgLbiQ==" + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/marked/-/marked-3.0.7.tgz", + "integrity": "sha512-ctKqbnLuNbsHbI26cfMyOlKgXGfl1orOv1AvWWDX7AkgfMOwCWvmuYc+mVLeWhQ9W6hdWVBynOs96VkcscKo0Q==" }, "media-typer": { "version": "0.3.0", @@ -10762,18 +10072,18 @@ "dev": true }, "mime-db": { - "version": "1.49.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.49.0.tgz", - "integrity": "sha512-CIc8j9URtOVApSFCQIF+VBkX1RwXp/oMMOrqdyXSBXq5RWNEsRfyj1kiRnQgmNXmHxPoFIxOroKA3zcU9P+nAA==", + "version": "1.50.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.50.0.tgz", + "integrity": "sha512-9tMZCDlYHqeERXEHO9f/hKfNXhre5dK2eE/krIvUjZbS2KPcqGDfNShIWS1uW9XOTKQKqK6qbeOci18rbfW77A==", "dev": true }, "mime-types": { - "version": "2.1.32", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.32.tgz", - "integrity": "sha512-hJGaVS4G4c9TSMYh2n6SQAGrC4RnfU+daP8G7cSCmaqNjiOoUY0VHCMS42pxnQmVF1GWwFhbHWn3RIxCqTmZ9A==", + "version": "2.1.33", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.33.tgz", + "integrity": "sha512-plLElXp7pRDd0bNZHw+nMd52vRYjLwQjygaNg7ddJ2uJtTlmnTCjWuPKxVu6//AdaRuME84SvLW91sIkBqGT0g==", "dev": true, "requires": { - "mime-db": "1.49.0" + "mime-db": "1.50.0" } }, "mimic-fn": { @@ -10897,44 +10207,11 @@ "yallist": "^4.0.0" } }, - "mixin-deep": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz", - "integrity": "sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==", - "dev": true, - "requires": { - "for-in": "^1.0.2", - "is-extendable": "^1.0.1" - }, - "dependencies": { - "is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "dev": true, - "requires": { - "is-plain-object": "^2.0.4" - } - }, - "is-plain-object": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", - "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", - "dev": true, - "requires": { - "isobject": "^3.0.1" - } - } - } - }, "mkdirp": { - "version": "0.5.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.4.tgz", - "integrity": "sha512-iG9AK/dJLtJ0XNgTuDbSyNS3zECqDlAhnQW4CsNxBG3LQJBbHmRX1egw39DmtOdCAqY+dKXV+sgPgilNWUKMVw==", - "dev": true, - "requires": { - "minimist": "^1.2.5" - } + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "dev": true }, "mkdirp-infer-owner": { "version": "2.0.0", @@ -10945,14 +10222,6 @@ "chownr": "^2.0.0", "infer-owner": "^1.0.4", "mkdirp": "^1.0.3" - }, - "dependencies": { - "mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", - "dev": true - } } }, "mocha": { @@ -11042,6 +10311,12 @@ "ms": "^2.1.1" } }, + "diff": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/diff/-/diff-3.5.0.tgz", + "integrity": "sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==", + "dev": true + }, "emoji-regex": { "version": "7.0.3", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", @@ -11103,6 +10378,15 @@ "path-exists": "^3.0.0" } }, + "mkdirp": { + "version": "0.5.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.4.tgz", + "integrity": "sha512-iG9AK/dJLtJ0XNgTuDbSyNS3zECqDlAhnQW4CsNxBG3LQJBbHmRX1egw39DmtOdCAqY+dKXV+sgPgilNWUKMVw==", + "dev": true, + "requires": { + "minimist": "^1.2.5" + } + }, "ms": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", @@ -11256,31 +10540,18 @@ "thenify-all": "^1.0.0" } }, + "nanocolors": { + "version": "0.2.13", + "resolved": "https://registry.npmjs.org/nanocolors/-/nanocolors-0.2.13.tgz", + "integrity": "sha512-0n3mSAQLPpGLV9ORXT5+C/D4mwew7Ebws69Hx4E2sgz2ZA5+32Q80B9tL8PbL7XHnRDiAxH/pnrUJ9a4fkTNTA==", + "dev": true + }, "nanoid": { "version": "3.1.30", "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.1.30.tgz", "integrity": "sha512-zJpuPDwOv8D2zq2WRoMe1HsfZthVewpel9CAvTfc/2mBD1uUT/agc5f7GHGWXlYkFvi1mVxe4IjvP2HNrop7nQ==", "dev": true }, - "nanomatch": { - "version": "1.2.13", - "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", - "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==", - "dev": true, - "requires": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "fragment-cache": "^0.2.1", - "is-windows": "^1.0.2", - "kind-of": "^6.0.2", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - } - }, "natural-compare": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", @@ -11299,6 +10570,11 @@ "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", "dev": true }, + "ngraph.events": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ngraph.events/-/ngraph.events-1.2.1.tgz", + "integrity": "sha512-D4C+nXH/RFxioGXQdHu8ELDtC6EaCiNsZtih0IvyGN81OZSUby4jXoJ5+RNWasfsd0FnKxxpAROyUMzw64QNsw==" + }, "nise": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/nise/-/nise-5.1.0.tgz", @@ -11341,10 +10617,37 @@ } }, "node-fetch": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.1.tgz", - "integrity": "sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw==", - "dev": true + "version": "2.6.5", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.5.tgz", + "integrity": "sha512-mmlIVHJEu5rnIxgEgez6b9GgWXbkZj5YZ7fx+2r94a2E+Uirsp6HsPTPlomfdHtpt/B0cdKviwkoaM6pyvUOpQ==", + "dev": true, + "requires": { + "whatwg-url": "^5.0.0" + }, + "dependencies": { + "tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha1-gYT9NH2snNwYWZLzpmIuFLnZq2o=", + "dev": true + }, + "webidl-conversions": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha1-JFNCdeKnvGvnvIZhHMFq4KVlSHE=", + "dev": true + }, + "whatwg-url": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha1-lmRU6HZUYuN2RNNib2dCzotwll0=", + "dev": true, + "requires": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } + } + } }, "node-gyp": { "version": "7.1.2", @@ -11371,9 +10674,9 @@ "dev": true }, "node-releases": { - "version": "1.1.74", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.74.tgz", - "integrity": "sha512-caJBVempXZPepZoZAPCWRTNxYQ+xtG/KAi4ozTA5A+nJ7IU+kLQCbqaUjb5Rwy14M9upBWiQ4NutcmW04LJSRw==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.1.tgz", + "integrity": "sha512-CqyzN6z7Q6aMeF/ktcMVTzhAHCEpf8SOarwpzpf8pNBY2k5/oM34UHldUwp8VKI7uxct2HxSRdJjBaZeESzcxA==", "dev": true }, "nopt": { @@ -11386,13 +10689,13 @@ } }, "normalize-package-data": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-3.0.2.tgz", - "integrity": "sha512-6CdZocmfGaKnIHPVFhJJZ3GuR8SsLKvDANFp47Jmy51aKIr8akjAWTSxtpI+MBgBFdSMRyo4hMpDlT6dTffgZg==", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-3.0.3.tgz", + "integrity": "sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA==", "dev": true, "requires": { "hosted-git-info": "^4.0.1", - "resolve": "^1.20.0", + "is-core-module": "^2.5.0", "semver": "^7.3.4", "validate-npm-package-license": "^3.0.1" } @@ -11536,43 +10839,6 @@ "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", "dev": true }, - "object-copy": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", - "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=", - "dev": true, - "requires": { - "copy-descriptor": "^0.1.0", - "define-property": "^0.2.5", - "kind-of": "^3.0.3" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - }, - "is-buffer": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", - "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", - "dev": true - }, - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, "object-inspect": { "version": "1.11.0", "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.11.0.tgz", @@ -11585,15 +10851,6 @@ "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", "dev": true }, - "object-visit": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", - "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=", - "dev": true, - "requires": { - "isobject": "^3.0.0" - } - }, "object.assign": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz", @@ -11606,58 +10863,37 @@ "object-keys": "^1.1.1" } }, - "object.defaults": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/object.defaults/-/object.defaults-1.1.0.tgz", - "integrity": "sha1-On+GgzS0B96gbaFtiNXNKeQ1/s8=", - "dev": true, - "requires": { - "array-each": "^1.0.1", - "array-slice": "^1.0.0", - "for-own": "^1.0.0", - "isobject": "^3.0.0" - } - }, "object.entries": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.4.tgz", - "integrity": "sha512-h4LWKWE+wKQGhtMjZEBud7uLGhqyLwj8fpHOarZhD2uY3C9cRtk57VQ89ke3moByLXMedqs3XCHzyb4AmA2DjA==", + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.5.tgz", + "integrity": "sha512-TyxmjUoZggd4OrrU1W66FMDG6CuqJxsFvymeyXI51+vQLN67zYfZseptRge703kKQdo4uccgAKebXFcRCzk4+g==", "dev": true, "requires": { "call-bind": "^1.0.2", "define-properties": "^1.1.3", - "es-abstract": "^1.18.2" + "es-abstract": "^1.19.1" } }, "object.getownpropertydescriptors": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.2.tgz", - "integrity": "sha512-WtxeKSzfBjlzL+F9b7M7hewDzMwy+C8NRssHd1YrNlzHzIDrXcXiNOMrezdAEM4UXixgV+vvnyBeN7Rygl2ttQ==", + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.3.tgz", + "integrity": "sha512-VdDoCwvJI4QdC6ndjpqFmoL3/+HxffFBbcJzKi5hwLLqqx3mdbedRpfZDdK0SrOSauj8X4GzBvnDZl4vTN7dOw==", "dev": true, "requires": { "call-bind": "^1.0.2", "define-properties": "^1.1.3", - "es-abstract": "^1.18.0-next.2" - } - }, - "object.pick": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", - "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=", - "dev": true, - "requires": { - "isobject": "^3.0.1" + "es-abstract": "^1.19.1" } }, "object.values": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.4.tgz", - "integrity": "sha512-TnGo7j4XSnKQoK3MfvkzqKCi0nVe/D9I9IjwTNYdb/fxYHpjrluHVOgw0AF6jrRFGMPHdfuidR09tIDiIvnaSg==", + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.5.tgz", + "integrity": "sha512-QUZRW0ilQ3PnPpbNtgdNV1PDbEqLIiSFB3l+EnGtBQ/8SUTLj1PZwtQHABZtLgwpJZTSZhuGLOGk57Drx2IvYg==", "dev": true, "requires": { "call-bind": "^1.0.2", "define-properties": "^1.1.3", - "es-abstract": "^1.18.2" + "es-abstract": "^1.19.1" } }, "on-finished": { @@ -11720,13 +10956,14 @@ "dev": true }, "open": { - "version": "7.4.2", - "resolved": "https://registry.npmjs.org/open/-/open-7.4.2.tgz", - "integrity": "sha512-MVHddDVweXZF3awtlAS+6pgKLlm/JgxZ90+/NBurBoQctVOOB/zDdVjcyPzQ+0laDGbsWgrRkflI65sQeOgT9Q==", + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/open/-/open-8.3.0.tgz", + "integrity": "sha512-7INcPWb1UcOwSQxAXTnBJ+FxVV4MPs/X++FWWBtgY69/J5lc+tCteMt/oFK1MnkyHC4VILLa9ntmwKTwDR4Q9w==", "dev": true, "requires": { - "is-docker": "^2.0.0", - "is-wsl": "^2.1.1" + "define-lazy-prop": "^2.0.0", + "is-docker": "^2.1.1", + "is-wsl": "^2.2.0" } }, "optionator": { @@ -12025,14 +11262,16 @@ "rimraf": "^3.0.2", "ssri": "^8.0.1", "tar": "^6.1.0" - }, - "dependencies": { - "mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", - "dev": true - } + } + }, + "panzoom": { + "version": "9.4.2", + "resolved": "https://registry.npmjs.org/panzoom/-/panzoom-9.4.2.tgz", + "integrity": "sha512-sQLr0t6EmNFXpZHag0HQVtOKqF9xjF7iZdgWg3Ss1o7uh2QZLvcrz7S0Cl8M0d2TkPZ69JfPJdknXN3I0e/2aQ==", + "requires": { + "amator": "^1.1.0", + "ngraph.events": "^1.2.1", + "wheel": "^1.0.0" } }, "param-case": { @@ -12134,18 +11373,6 @@ "tslib": "^2.0.3" } }, - "pascalcase": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", - "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=", - "dev": true - }, - "path-dirname": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz", - "integrity": "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=", - "dev": true - }, "path-exists": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", @@ -12230,9 +11457,9 @@ } }, "picocolors": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", - "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", "dev": true }, "picomatch": { @@ -12307,66 +11534,6 @@ } } }, - "pkg-up": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/pkg-up/-/pkg-up-2.0.0.tgz", - "integrity": "sha1-yBmscoBZpGHKscOImivjxJoATX8=", - "dev": true, - "requires": { - "find-up": "^2.1.0" - }, - "dependencies": { - "find-up": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", - "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", - "dev": true, - "requires": { - "locate-path": "^2.0.0" - } - }, - "locate-path": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", - "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", - "dev": true, - "requires": { - "p-locate": "^2.0.0", - "path-exists": "^3.0.0" - } - }, - "p-limit": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", - "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", - "dev": true, - "requires": { - "p-try": "^1.0.0" - } - }, - "p-locate": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", - "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", - "dev": true, - "requires": { - "p-limit": "^1.1.0" - } - }, - "p-try": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", - "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=", - "dev": true - }, - "path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", - "dev": true - } - } - }, "please-upgrade-node": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/please-upgrade-node/-/please-upgrade-node-3.2.0.tgz", @@ -12438,20 +11605,14 @@ } } }, - "posix-character-classes": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", - "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=", - "dev": true - }, "postcss": { - "version": "8.3.9", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.3.9.tgz", - "integrity": "sha512-f/ZFyAKh9Dnqytx5X62jgjhhzttjZS7hMsohcI7HEI5tjELX/HxCy3EFhsRxyzGvrzFF+82XPvCS8T9TFleVJw==", + "version": "8.3.11", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.3.11.tgz", + "integrity": "sha512-hCmlUAIlUiav8Xdqw3Io4LcpA1DOt7h3LSTAC4G6JGHFFaWzI6qvFt9oilvl8BmkbBRX1IhM90ZAmpk68zccQA==", "dev": true, "requires": { - "nanoid": "^3.1.28", - "picocolors": "^0.2.1", + "nanoid": "^3.1.30", + "picocolors": "^1.0.0", "source-map-js": "^0.6.2" } }, @@ -12535,9 +11696,9 @@ "dev": true }, "prettier": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.3.2.tgz", - "integrity": "sha512-lnJzDfJ66zkMy58OL5/NY5zp70S7Nz6KqcKkXYzn2tMVrNxvbqaBpg7H3qHaLxCJ5lNMsGuM8+ohS7cZrthdLQ==", + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.4.1.tgz", + "integrity": "sha512-9fbDAXSBcc6Bs1mZrDYb3XKzDLm4EXXL9sC1LqKP5rZkT6KRr/rf9amVUcODVXgguK/isJz0d0hP72WeaKWsvA==", "dev": true }, "pretty-bytes": { @@ -12648,10 +11809,13 @@ "dev": true }, "qs": { - "version": "6.5.2", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", - "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==", - "dev": true + "version": "6.10.1", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.10.1.tgz", + "integrity": "sha512-M528Hph6wsSVOBiYUnGf+K/7w0hNshs/duGsNXPUCLH5XAqjEtiPGwNONLV0tBH8NoGb0mvD5JubnUTrujKDTg==", + "dev": true, + "requires": { + "side-channel": "^1.0.4" + } }, "queue-microtask": { "version": "1.2.3", @@ -12681,13 +11845,13 @@ "dev": true }, "raw-body": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.0.tgz", - "integrity": "sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q==", + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.1.tgz", + "integrity": "sha512-9WmIKF6mkvA0SLmA2Knm9+qj89e+j1zqgyn8aXGd7+nAduPoqgI9lO57SAZNn/Byzo5P7JhXTyg9PzaJbH73bA==", "dev": true, "requires": { "bytes": "3.1.0", - "http-errors": "1.7.2", + "http-errors": "1.7.3", "iconv-lite": "0.4.24", "unpipe": "1.0.0" }, @@ -12699,22 +11863,22 @@ "dev": true }, "http-errors": { - "version": "1.7.2", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz", - "integrity": "sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg==", + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.3.tgz", + "integrity": "sha512-ZTTX0MWrsQ2ZAhA1cejAwDLycFsd7I7nVtnkT3Ol0aqodaKW+0CTZDQ1uBv5whptCnc8e8HeRRJxRs0kmm/Qfw==", "dev": true, "requires": { "depd": "~1.1.2", - "inherits": "2.0.3", + "inherits": "2.0.4", "setprototypeof": "1.1.1", "statuses": ">= 1.5.0 < 2", "toidentifier": "1.0.0" } }, - "inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", + "setprototypeof": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz", + "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==", "dev": true } } @@ -12873,12 +12037,12 @@ "dev": true }, "regenerate-unicode-properties": { - "version": "8.2.0", - "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-8.2.0.tgz", - "integrity": "sha512-F9DjY1vKLo/tPePDycuH3dn9H1OTPIkVD9Kz4LODu+F2C75mgjAJ7x/gwy6ZcSNRAAkhNlJSOHRe8k3p+K9WhA==", + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-9.0.0.tgz", + "integrity": "sha512-3E12UeNSPfjrgwjkR81m5J7Aw/T55Tu7nUyZVQYCKEOs+2dkxEY+DpPtZzO4YruuiPb7NkYLVcyJC4+zCbk5pA==", "dev": true, "requires": { - "regenerate": "^1.4.0" + "regenerate": "^1.4.2" } }, "regenerator-runtime": { @@ -12896,16 +12060,6 @@ "@babel/runtime": "^7.8.4" } }, - "regex-not": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", - "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==", - "dev": true, - "requires": { - "extend-shallow": "^3.0.2", - "safe-regex": "^1.1.0" - } - }, "regexpp": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", @@ -12913,17 +12067,17 @@ "dev": true }, "regexpu-core": { - "version": "4.7.1", - "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-4.7.1.tgz", - "integrity": "sha512-ywH2VUraA44DZQuRKzARmw6S66mr48pQVva4LBeRhcOltJ6hExvWly5ZjFLYo67xbIxb6W1q4bAGtgfEl20zfQ==", + "version": "4.8.0", + "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-4.8.0.tgz", + "integrity": "sha512-1F6bYsoYiz6is+oz70NWur2Vlh9KWtswuRuzJOfeYUrfPX2o8n74AnUVaOGDbUqVGO9fNHu48/pjJO4sNVwsOg==", "dev": true, "requires": { - "regenerate": "^1.4.0", - "regenerate-unicode-properties": "^8.2.0", - "regjsgen": "^0.5.1", - "regjsparser": "^0.6.4", - "unicode-match-property-ecmascript": "^1.0.4", - "unicode-match-property-value-ecmascript": "^1.2.0" + "regenerate": "^1.4.2", + "regenerate-unicode-properties": "^9.0.0", + "regjsgen": "^0.5.2", + "regjsparser": "^0.7.0", + "unicode-match-property-ecmascript": "^2.0.0", + "unicode-match-property-value-ecmascript": "^2.0.0" } }, "registry-auth-token": { @@ -12951,9 +12105,9 @@ "dev": true }, "regjsparser": { - "version": "0.6.9", - "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.6.9.tgz", - "integrity": "sha512-ZqbNRz1SNjLAiYuwY0zoXW8Ne675IX5q+YHioAGbCw4X96Mjl2+dcX9B2ciaeyYjViDAfvIjFpQjJgLttTEERQ==", + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.7.0.tgz", + "integrity": "sha512-A4pcaORqmNMDVwUjWoTzuhwMGpP+NykpfqAsEgI1FSH/EzC7lrN5TMd+kN8YCovX+jMpu8eaqXgXPCa0g8FQNQ==", "dev": true, "requires": { "jsesc": "~0.5.0" @@ -12996,18 +12150,6 @@ "xtend": "^4.0.1" } }, - "remove-trailing-separator": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", - "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=", - "dev": true - }, - "repeat-element": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.4.tgz", - "integrity": "sha512-LFiNfRcSu7KK3evMyYOuCzv3L10TW7yC1G2/+StMjK8Y6Vqd2MG7r/Qjw4ghtuCOjFvlnms/iMmLqpvW/ES/WQ==", - "dev": true - }, "repeat-string": { "version": "1.6.1", "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", @@ -13046,6 +12188,14 @@ "tough-cookie": "~2.5.0", "tunnel-agent": "^0.6.0", "uuid": "^3.3.2" + }, + "dependencies": { + "qs": { + "version": "6.5.2", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", + "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==", + "dev": true + } } }, "require-directory": { @@ -13157,12 +12307,6 @@ } } }, - "resolve-url": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", - "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=", - "dev": true - }, "responselike": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/responselike/-/responselike-2.0.0.tgz", @@ -13182,12 +12326,6 @@ "signal-exit": "^3.0.2" } }, - "ret": { - "version": "0.1.15", - "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", - "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==", - "dev": true - }, "retry": { "version": "0.12.0", "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", @@ -13216,9 +12354,9 @@ } }, "rollup": { - "version": "2.56.2", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.56.2.tgz", - "integrity": "sha512-s8H00ZsRi29M2/lGdm1u8DJpJ9ML8SUOpVVBd33XNeEeL3NVaTiUcSBHzBdF3eAyR0l7VSpsuoVUGrRHq7aPwQ==", + "version": "2.58.0", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.58.0.tgz", + "integrity": "sha512-NOXpusKnaRpbS7ZVSzcEXqxcLDOagN6iFS8p45RkoiMqPHDLwJm758UF05KlMoCRbLBTZsPOIa887gZJ1AiXvw==", "dev": true, "requires": { "fsevents": "~2.3.2" @@ -13258,14 +12396,14 @@ "dev": true }, "terser": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.7.1.tgz", - "integrity": "sha512-b3e+d5JbHAe/JSjwsC3Zn55wsBIM7AsHLjKxT31kGCldgbpFePaFo+PiddtO6uwRZWRw7sPXmAN8dTW61xmnSg==", + "version": "5.9.0", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.9.0.tgz", + "integrity": "sha512-h5hxa23sCdpzcye/7b8YqbE5OwKca/ni0RQz1uRX3tGh8haaGHqcuSqbGRybuAKNdntZ0mDgFNXPJ48xQ2RXKQ==", "dev": true, "requires": { "commander": "^2.20.0", "source-map": "~0.7.2", - "source-map-support": "~0.5.19" + "source-map-support": "~0.5.20" } } } @@ -13308,15 +12446,6 @@ "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", "dev": true }, - "safe-regex": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", - "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=", - "dev": true, - "requires": { - "ret": "~0.1.10" - } - }, "safer-buffer": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", @@ -13370,42 +12499,10 @@ "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", "dev": true }, - "set-value": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz", - "integrity": "sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==", - "dev": true, - "requires": { - "extend-shallow": "^2.0.1", - "is-extendable": "^0.1.1", - "is-plain-object": "^2.0.3", - "split-string": "^3.0.1" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - }, - "is-plain-object": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", - "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", - "dev": true, - "requires": { - "isobject": "^3.0.1" - } - } - } - }, "setprototypeof": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz", - "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", "dev": true }, "shady-css-scoped-element": { @@ -13452,9 +12549,9 @@ } }, "signal-exit": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz", - "integrity": "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==", + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.5.tgz", + "integrity": "sha512-KWcOiKeQj6ZyXx7zq4YxSMgHRlod4czeBQZrPb8OKcohcqAXShm7E20kEMle9WBt26hFcAf0qLOcp5zmY7kOqQ==", "dev": true }, "sinon": { @@ -13524,12 +12621,6 @@ "p-locate": "^5.0.0" } }, - "mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", - "dev": true - }, "p-limit": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", @@ -13573,134 +12664,6 @@ "integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==", "dev": true }, - "snapdragon": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", - "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==", - "dev": true, - "requires": { - "base": "^0.11.1", - "debug": "^2.2.0", - "define-property": "^0.2.5", - "extend-shallow": "^2.0.1", - "map-cache": "^0.2.2", - "source-map": "^0.5.6", - "source-map-resolve": "^0.5.0", - "use": "^3.1.0" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - } - } - }, - "snapdragon-node": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz", - "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==", - "dev": true, - "requires": { - "define-property": "^1.0.0", - "isobject": "^3.0.0", - "snapdragon-util": "^3.0.1" - }, - "dependencies": { - "define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "dev": true, - "requires": { - "is-descriptor": "^1.0.0" - } - }, - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - } - } - }, - "snapdragon-util": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz", - "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==", - "dev": true, - "requires": { - "kind-of": "^3.2.0" - }, - "dependencies": { - "is-buffer": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", - "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", - "dev": true - }, - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, "snowpack": { "version": "3.8.6", "resolved": "https://registry.npmjs.org/snowpack/-/snowpack-3.8.6.tgz", @@ -13760,6 +12723,12 @@ "yargs-parser": "^20.0.0" }, "dependencies": { + "es-module-lexer": { + "version": "0.3.26", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-0.3.26.tgz", + "integrity": "sha512-Va0Q/xqtrss45hWzP8CZJwzGSZJjDM5/MJRE3IXXnUCcVLElR9BRaE9F62BopysASyc4nM3uwhSW7FFB9nlWAA==", + "dev": true + }, "estree-walker": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", @@ -13785,23 +12754,6 @@ "p-locate": "^5.0.0" } }, - "mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", - "dev": true - }, - "open": { - "version": "8.3.0", - "resolved": "https://registry.npmjs.org/open/-/open-8.3.0.tgz", - "integrity": "sha512-7INcPWb1UcOwSQxAXTnBJ+FxVV4MPs/X++FWWBtgY69/J5lc+tCteMt/oFK1MnkyHC4VILLa9ntmwKTwDR4Q9w==", - "dev": true, - "requires": { - "define-lazy-prop": "^2.0.0", - "is-docker": "^2.1.1", - "is-wsl": "^2.2.0" - } - }, "p-limit": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", @@ -13974,9 +12926,9 @@ } }, "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true }, "source-map-js": { @@ -13985,35 +12937,14 @@ "integrity": "sha512-/3GptzWzu0+0MBQFrDKzw/DvvMTUORvgY6k6jd/VS6iCR4RDTKWH6v6WPwQoUO8667uQEf9Oe38DxAYWY5F/Ug==", "dev": true }, - "source-map-resolve": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.3.tgz", - "integrity": "sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==", - "dev": true, - "requires": { - "atob": "^2.1.2", - "decode-uri-component": "^0.2.0", - "resolve-url": "^0.2.1", - "source-map-url": "^0.4.0", - "urix": "^0.1.0" - } - }, "source-map-support": { - "version": "0.5.19", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.19.tgz", - "integrity": "sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw==", + "version": "0.5.20", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.20.tgz", + "integrity": "sha512-n1lZZ8Ve4ksRqizaBQgxXDgKwttHDhyfQjA6YZZn8+AroHbsIz+JjwxQDxbp+7y5OYCI8t1Yk7etjD9CRd2hIw==", "dev": true, "requires": { "buffer-from": "^1.0.0", "source-map": "^0.6.0" - }, - "dependencies": { - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - } } }, "source-map-url": { @@ -14075,15 +13006,6 @@ "through": "2" } }, - "split-string": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", - "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==", - "dev": true, - "requires": { - "extend-shallow": "^3.0.0" - } - }, "split2": { "version": "3.2.2", "resolved": "https://registry.npmjs.org/split2/-/split2-3.2.2.tgz", @@ -14126,15 +13048,15 @@ } }, "standard-version": { - "version": "9.3.1", - "resolved": "https://registry.npmjs.org/standard-version/-/standard-version-9.3.1.tgz", - "integrity": "sha512-5qMxXw/FxLouC5nANyx/5RY1kiorJx9BppUso8gN07MG64q2uLRmrPb4KfXp3Ql4s/gxjZwZ89e0FwxeLubGww==", + "version": "9.3.2", + "resolved": "https://registry.npmjs.org/standard-version/-/standard-version-9.3.2.tgz", + "integrity": "sha512-u1rfKP4o4ew7Yjbfycv80aNMN2feTiqseAhUhrrx2XtdQGmu7gucpziXe68Z4YfHVqlxVEzo4aUA0Iu3VQOTgQ==", "dev": true, "requires": { "chalk": "^2.4.2", "conventional-changelog": "3.1.24", "conventional-changelog-config-spec": "2.1.0", - "conventional-changelog-conventionalcommits": "4.5.0", + "conventional-changelog-conventionalcommits": "4.6.1", "conventional-recommended-bump": "6.1.0", "detect-indent": "^6.0.0", "detect-newline": "^3.1.0", @@ -14183,17 +13105,6 @@ "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", "dev": true }, - "conventional-changelog-conventionalcommits": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/conventional-changelog-conventionalcommits/-/conventional-changelog-conventionalcommits-4.5.0.tgz", - "integrity": "sha512-buge9xDvjjOxJlyxUnar/+6i/aVEVGA7EEh4OafBCXPlLUQPGbRUBhBUveWRxzvR8TEjhKEP4BdepnpG2FSZXw==", - "dev": true, - "requires": { - "compare-func": "^2.0.0", - "lodash": "^4.17.15", - "q": "^1.5.1" - } - }, "find-up": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", @@ -14269,39 +13180,12 @@ "integrity": "sha512-d/5Z4/2iiCnHw6Xzghyhb+GcmF89bxwgXG60wjIiZaxnymbyOmI8Hk4VqHXiVVp6u2ysaskFfXg3ekCj4WNftQ==", "dev": true }, - "static-extend": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", - "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=", - "dev": true, - "requires": { - "define-property": "^0.2.5", - "object-copy": "^0.1.0" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - } - } - }, "statuses": { "version": "1.5.0", "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=", "dev": true }, - "stream-exhaust": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/stream-exhaust/-/stream-exhaust-1.0.2.tgz", - "integrity": "sha512-b/qaq/GlBK5xaq1yrK9/zFcyRSTNxmcZwFLGSTG0mXgZl/4Z6GgiyYOXOvY7N3eEvFRAG1bkDRz5EPGSvPYQlw==", - "dev": true - }, "streamroller": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/streamroller/-/streamroller-1.0.6.tgz", @@ -14365,14 +13249,14 @@ "dev": true }, "string-width": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.2.tgz", - "integrity": "sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA==", + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", "dev": true, "requires": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.0" + "strip-ansi": "^6.0.1" } }, "string.prototype.trimend": { @@ -14430,12 +13314,12 @@ "dev": true }, "strip-ansi": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", - "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "dev": true, "requires": { - "ansi-regex": "^5.0.0" + "ansi-regex": "^5.0.1" } }, "strip-bom": { @@ -14481,29 +13365,29 @@ } }, "systemjs": { - "version": "6.10.2", - "resolved": "https://registry.npmjs.org/systemjs/-/systemjs-6.10.2.tgz", - "integrity": "sha512-PwaC0Z6Y1E6gFekY2u38EC5+5w2M65jYVrD1aAcOptpHVhCwPIwPFJvYJyryQKUyeuQ5bKKI3PBHWNjdE9aizg==", + "version": "6.11.0", + "resolved": "https://registry.npmjs.org/systemjs/-/systemjs-6.11.0.tgz", + "integrity": "sha512-7YPIY44j+BoY+E6cGBSw0oCU8SNTTIHKZgftcBdwWkDzs/M86Fdlr21FrzAyph7Zo8r3CFGscyFe4rrBtixrBg==", "dev": true }, "table": { - "version": "6.7.1", - "resolved": "https://registry.npmjs.org/table/-/table-6.7.1.tgz", - "integrity": "sha512-ZGum47Yi6KOOFDE8m223td53ath2enHcYLgOCjGr5ngu8bdIARQk6mN/wRMv4yMRcHnCSnHbCEha4sobQx5yWg==", + "version": "6.7.2", + "resolved": "https://registry.npmjs.org/table/-/table-6.7.2.tgz", + "integrity": "sha512-UFZK67uvyNivLeQbVtkiUs8Uuuxv24aSL4/Vil2PJVtMgU8Lx0CYkP12uCGa3kjyQzOSgV1+z9Wkb82fCGsO0g==", "dev": true, "requires": { "ajv": "^8.0.1", "lodash.clonedeep": "^4.5.0", "lodash.truncate": "^4.4.2", "slice-ansi": "^4.0.0", - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0" + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1" }, "dependencies": { "ajv": { - "version": "8.6.2", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.6.2.tgz", - "integrity": "sha512-9807RlWAgT564wT+DjeyU5OFMPjmzxVobvDFmNAhY+5zD6A2ly3jDp6sgnfyDtlIQ+7H97oc/DGCzzfu9rjw9w==", + "version": "8.6.3", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.6.3.tgz", + "integrity": "sha512-SMJOdDP6LqTkD0Uq8qLi+gMwSt0imXLSV080qFVwJCpH9U6Mb+SUGHAXM0KNbcBPguytWyvFxcHgMLe2D2XSpw==", "dev": true, "requires": { "fast-deep-equal": "^3.1.1", @@ -14558,14 +13442,6 @@ "minizlib": "^2.1.1", "mkdirp": "^1.0.3", "yallist": "^4.0.0" - }, - "dependencies": { - "mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", - "dev": true - } } }, "temp-dir": { @@ -14616,12 +13492,6 @@ "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", "dev": true - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true } } }, @@ -14793,50 +13663,12 @@ "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=", "dev": true }, - "to-object-path": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz", - "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "is-buffer": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", - "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", - "dev": true - }, - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, "to-readable-stream": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/to-readable-stream/-/to-readable-stream-1.0.0.tgz", "integrity": "sha512-Iq25XBt6zD5npPhlLVXGFN3/gyR2/qODcKNNyTMd4vbm39HUaOiAM4PMq0eMVC/Tkxz+Zjdsc55g9yyz+Yq00Q==", "dev": true }, - "to-regex": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz", - "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==", - "dev": true, - "requires": { - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "regex-not": "^1.0.2", - "safe-regex": "^1.1.0" - } - }, "to-regex-range": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", @@ -14895,12 +13727,6 @@ "integrity": "sha512-c1PTsA3tYrIsLGkJkzHF+w9F2EyxfXGo4UyJc4pFL++FMjnq0HJS69T3M7d//gKrFKwy429bouPescbjecU+Zw==", "dev": true }, - "trim-off-newlines": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/trim-off-newlines/-/trim-off-newlines-1.0.1.tgz", - "integrity": "sha1-n5up2e+odkw4dpi8v+sshI8RrbM=", - "dev": true - }, "trim-trailing-lines": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/trim-trailing-lines/-/trim-trailing-lines-1.1.4.tgz", @@ -14913,6 +13739,20 @@ "integrity": "sha512-rvuRbTarPXmMb79SmzEp8aqXNKcK+y0XaB298IXueQ8I2PsrATcPBCSPyK/dDNa2iWOhKlfNnOjdAOTBU/nkFA==", "dev": true }, + "ts-node": { + "version": "9.1.1", + "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-9.1.1.tgz", + "integrity": "sha512-hPlt7ZACERQGf03M253ytLY3dHbGNGrAq9qIHWUY9XHYl1z7wYngSr3OQ5xmui8o2AaxsONxIzjafLUiWBo1Fg==", + "dev": true, + "requires": { + "arg": "^4.1.0", + "create-require": "^1.1.0", + "diff": "^4.0.1", + "make-error": "^1.1.1", + "source-map-support": "^0.5.17", + "yn": "3.1.1" + } + }, "ts-simple-type": { "version": "1.0.7", "resolved": "https://registry.npmjs.org/ts-simple-type/-/ts-simple-type-1.0.7.tgz", @@ -14920,12 +13760,13 @@ "dev": true }, "tsconfig-paths": { - "version": "3.10.1", - "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.10.1.tgz", - "integrity": "sha512-rETidPDgCpltxF7MjBZlAFPUHv5aHH2MymyPvh+vEyWAED4Eb/WeMbsnD/JDr4OKPOA1TssDHgIcpTN5Kh0p6Q==", + "version": "3.11.0", + "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.11.0.tgz", + "integrity": "sha512-7ecdYDnIdmv639mmDwslG6KQg1Z9STTz1j7Gcz0xa+nshh/gKDAHcPxRbWOsA3SPp0tXP2leTcY9Kw+NAkfZzA==", "dev": true, "requires": { - "json5": "^2.2.0", + "@types/json5": "^0.0.29", + "json5": "^1.0.1", "minimist": "^1.2.0", "strip-bom": "^3.0.0" } @@ -15077,9 +13918,9 @@ "dev": true }, "uglify-js": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.14.1.tgz", - "integrity": "sha512-JhS3hmcVaXlp/xSo3PKY5R0JqKs5M3IV+exdLHW99qKvKivPO4Z8qbej6mte17SOPqAOVMjt/XGgWacnFSzM3g==", + "version": "3.14.2", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.14.2.tgz", + "integrity": "sha512-rtPMlmcO4agTUfz10CbgJ1k6UAoXM2gWb3GoMPPZB/+/Ackf8lNWk11K4rYi2D0apgoFRLtQOZhb+/iGNJq26A==", "dev": true, "optional": true }, @@ -15106,31 +13947,31 @@ } }, "unicode-canonical-property-names-ecmascript": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-1.0.4.tgz", - "integrity": "sha512-jDrNnXWHd4oHiTZnx/ZG7gtUTVp+gCcTTKr8L0HjlwphROEW3+Him+IpvC+xcJEFegapiMZyZe02CyuOnRmbnQ==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz", + "integrity": "sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ==", "dev": true }, "unicode-match-property-ecmascript": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-1.0.4.tgz", - "integrity": "sha512-L4Qoh15vTfntsn4P1zqnHulG0LdXgjSO035fEpdtp6YxXhMT51Q6vgM5lYdG/5X3MjS+k/Y9Xw4SFCY9IkR0rg==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz", + "integrity": "sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==", "dev": true, "requires": { - "unicode-canonical-property-names-ecmascript": "^1.0.4", - "unicode-property-aliases-ecmascript": "^1.0.4" + "unicode-canonical-property-names-ecmascript": "^2.0.0", + "unicode-property-aliases-ecmascript": "^2.0.0" } }, "unicode-match-property-value-ecmascript": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-1.2.0.tgz", - "integrity": "sha512-wjuQHGQVofmSJv1uVISKLE5zO2rNGzM/KCYZch/QQvez7C1hUhBIuZ701fYXExuufJFMPhv2SyL8CyoIfMLbIQ==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.0.0.tgz", + "integrity": "sha512-7Yhkc0Ye+t4PNYzOGKedDhXbYIBe1XEQYQxOPyhcXNMJ0WCABqqj6ckydd6pWRZTHV4GuCPKdBAUiMc60tsKVw==", "dev": true }, "unicode-property-aliases-ecmascript": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-1.1.0.tgz", - "integrity": "sha512-PqSoPh/pWetQ2phoj5RLiaqIk4kCNwoV3CI+LfGmWLKI3rE3kl1h59XpX2BjgDrmbxD9ARtQobPGU1SguCYuQg==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.0.0.tgz", + "integrity": "sha512-5Zfuy9q/DFr4tfO7ZPeVXb1aPoeQSdeFMLpYuFebehDAhbuevLs5yxSZmIFN1tP5F9Wl4IpJrYojg85/zgyZHQ==", "dev": true }, "unified": { @@ -15147,18 +13988,6 @@ "x-is-string": "^0.1.0" } }, - "union-value": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz", - "integrity": "sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==", - "dev": true, - "requires": { - "arr-union": "^3.1.0", - "get-value": "^2.0.6", - "is-extendable": "^0.1.1", - "set-value": "^2.0.1" - } - }, "unique-filename": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-1.1.1.tgz", @@ -15237,52 +14066,6 @@ "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=", "dev": true }, - "unset-value": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz", - "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=", - "dev": true, - "requires": { - "has-value": "^0.3.1", - "isobject": "^3.0.0" - }, - "dependencies": { - "has-value": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz", - "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=", - "dev": true, - "requires": { - "get-value": "^2.0.3", - "has-values": "^0.1.4", - "isobject": "^2.0.0" - }, - "dependencies": { - "isobject": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", - "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", - "dev": true, - "requires": { - "isarray": "1.0.0" - } - } - } - }, - "has-values": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz", - "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=", - "dev": true - }, - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", - "dev": true - } - } - }, "untildify": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/untildify/-/untildify-2.1.0.tgz", @@ -15340,12 +14123,6 @@ "punycode": "^2.1.0" } }, - "urix": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", - "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=", - "dev": true - }, "url-parse-lax": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-3.0.0.tgz", @@ -15355,12 +14132,6 @@ "prepend-http": "^2.0.0" } }, - "use": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz", - "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==", - "dev": true - }, "useragent": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/useragent/-/useragent-2.3.0.tgz", @@ -15517,9 +14288,9 @@ } }, "vm2": { - "version": "3.9.4", - "resolved": "https://registry.npmjs.org/vm2/-/vm2-3.9.4.tgz", - "integrity": "sha512-sOdharrJ7KEePIpHekiWaY1DwgueuiBeX/ZBJUPgETsVlJsXuEx0K0/naATq2haFvJrvZnRiORQRubR0b7Ye6g==", + "version": "3.9.5", + "resolved": "https://registry.npmjs.org/vm2/-/vm2-3.9.5.tgz", + "integrity": "sha512-LuCAHZN75H9tdrAiLFf030oW7nJV5xwNMuk1ymOZwopmuK3d2H4L1Kv4+GFHgarKiLfXXLFU+7LDABHnwOkWng==", "dev": true }, "void-elements": { @@ -15649,6 +14420,11 @@ "webidl-conversions": "^4.0.2" } }, + "wheel": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/wheel/-/wheel-1.0.0.tgz", + "integrity": "sha512-XiCMHibOiqalCQ+BaNSwRoZ9FDTAvOsXxGHXChBugewDj7HC8VBIER71dEOiRH1fSdLbRCQzngKTSiZ06ZQzeA==" + }, "which": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", @@ -15764,28 +14540,28 @@ } }, "workbox-background-sync": { - "version": "6.2.4", - "resolved": "https://registry.npmjs.org/workbox-background-sync/-/workbox-background-sync-6.2.4.tgz", - "integrity": "sha512-uoGgm1PZU6THRzXKlMEntrdA4Xkp6SCfxI7re4heN+yGrtAZq6zMKYhZmsdeW+YGnXS3y5xj7WV03b5TDgLh6A==", + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/workbox-background-sync/-/workbox-background-sync-6.3.0.tgz", + "integrity": "sha512-79Wznt6oO8xMmLiErRS4zENUEldFHj1/5IiuHsY3NgGRN5rJdvGW6hz+RERhWzoB7rd/vXyAQdKYahGdsiYG1A==", "dev": true, "requires": { "idb": "^6.0.0", - "workbox-core": "6.2.4" + "workbox-core": "6.3.0" } }, "workbox-broadcast-update": { - "version": "6.2.4", - "resolved": "https://registry.npmjs.org/workbox-broadcast-update/-/workbox-broadcast-update-6.2.4.tgz", - "integrity": "sha512-0EpML2lbxNkiZUoap4BJDA0Hfz36MhtUd/rRhFvF6YWoRbTQ8tc6tMaRgM1EBIUmIN2OX9qQlkqe5SGGt4lfXQ==", + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/workbox-broadcast-update/-/workbox-broadcast-update-6.3.0.tgz", + "integrity": "sha512-hp7Du6GJzK99wak5cQFhcSBxvcS+2fkFcxiMmz/RsQ5GQNxVcbiovq74w5aNCzuv3muQvICyC1XELZhZ4GYRTQ==", "dev": true, "requires": { - "workbox-core": "6.2.4" + "workbox-core": "6.3.0" } }, "workbox-build": { - "version": "6.2.4", - "resolved": "https://registry.npmjs.org/workbox-build/-/workbox-build-6.2.4.tgz", - "integrity": "sha512-01ZbY1BHi+yYvu4yDGZBw9xm1bWyZW0QGWPxiksvSPAsNH/z/NwgtWW14YEroFyG98mmXb7pufWlwl40zE1KTw==", + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/workbox-build/-/workbox-build-6.3.0.tgz", + "integrity": "sha512-Th93AaC+88ZvJje0acTjCCCvU3tGenxJht5xUALXHW+Mzk3I5SMzTFwKn5F3e1iZ+M7U2jjfpMXe/sJ4UMx46A==", "dev": true, "requires": { "@apideck/better-ajv-errors": "^0.2.4", @@ -15811,21 +14587,21 @@ "strip-comments": "^2.0.1", "tempy": "^0.6.0", "upath": "^1.2.0", - "workbox-background-sync": "6.2.4", - "workbox-broadcast-update": "6.2.4", - "workbox-cacheable-response": "6.2.4", - "workbox-core": "6.2.4", - "workbox-expiration": "6.2.4", - "workbox-google-analytics": "6.2.4", - "workbox-navigation-preload": "6.2.4", - "workbox-precaching": "6.2.4", - "workbox-range-requests": "6.2.4", - "workbox-recipes": "6.2.4", - "workbox-routing": "6.2.4", - "workbox-strategies": "6.2.4", - "workbox-streams": "6.2.4", - "workbox-sw": "6.2.4", - "workbox-window": "6.2.4" + "workbox-background-sync": "6.3.0", + "workbox-broadcast-update": "6.3.0", + "workbox-cacheable-response": "6.3.0", + "workbox-core": "6.3.0", + "workbox-expiration": "6.3.0", + "workbox-google-analytics": "6.3.0", + "workbox-navigation-preload": "6.3.0", + "workbox-precaching": "6.3.0", + "workbox-range-requests": "6.3.0", + "workbox-recipes": "6.3.0", + "workbox-routing": "6.3.0", + "workbox-strategies": "6.3.0", + "workbox-streams": "6.3.0", + "workbox-sw": "6.3.0", + "workbox-window": "6.3.0" }, "dependencies": { "@rollup/plugin-node-resolve": { @@ -15852,9 +14628,9 @@ } }, "ajv": { - "version": "8.6.2", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.6.2.tgz", - "integrity": "sha512-9807RlWAgT564wT+DjeyU5OFMPjmzxVobvDFmNAhY+5zD6A2ly3jDp6sgnfyDtlIQ+7H97oc/DGCzzfu9rjw9w==", + "version": "8.6.3", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.6.3.tgz", + "integrity": "sha512-SMJOdDP6LqTkD0Uq8qLi+gMwSt0imXLSV080qFVwJCpH9U6Mb+SUGHAXM0KNbcBPguytWyvFxcHgMLe2D2XSpw==", "dev": true, "requires": { "fast-deep-equal": "^3.1.1", @@ -15893,25 +14669,25 @@ } }, "workbox-cacheable-response": { - "version": "6.2.4", - "resolved": "https://registry.npmjs.org/workbox-cacheable-response/-/workbox-cacheable-response-6.2.4.tgz", - "integrity": "sha512-KZSzAOmgWsrk15Wu+geCUSGLIyyzHaORKjH5JnR6qcVZAsm0JXUu2m2OZGqjQ+/eyQwrGdXXqAMW+4wQvTXccg==", + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/workbox-cacheable-response/-/workbox-cacheable-response-6.3.0.tgz", + "integrity": "sha512-oYCRGF6PFEmJJkktdxYw/tcrU8N5u/2ihxVSHd+9sNqjNMDiXLqsewcEG544f1yx7gq5/u6VcvUA5N62KzN1GQ==", "dev": true, "requires": { - "workbox-core": "6.2.4" + "workbox-core": "6.3.0" } }, "workbox-cli": { - "version": "6.2.4", - "resolved": "https://registry.npmjs.org/workbox-cli/-/workbox-cli-6.2.4.tgz", - "integrity": "sha512-7B9j7T6RUbCM71533Q0xeBlYI2Nw6E4x1GUSH1407UXeEX9AAenFRWNmzQmCuSl2ndfQylkqe+JEh49F2FVjnw==", + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/workbox-cli/-/workbox-cli-6.3.0.tgz", + "integrity": "sha512-N0d+bkNLC7J1ZTugMSbmSvldv/IzDbLrnxQoNwv3O3Ql/oooJIWSLsdAnqb52K5uZYgMDMXbgmZ0D0XQcIUgIg==", "dev": true, "requires": { "chalk": "^4.1.0", + "chokidar": "^3.5.2", "common-tags": "^1.8.0", "fs-extra": "^9.0.1", "glob": "^7.1.6", - "glob-watcher": "^5.0.5", "inquirer": "^7.3.3", "meow": "^7.1.0", "ora": "^5.0.0", @@ -15919,7 +14695,7 @@ "stringify-object": "^3.3.0", "upath": "^1.2.0", "update-notifier": "^4.1.0", - "workbox-build": "6.2.4" + "workbox-build": "6.3.0" }, "dependencies": { "fs-extra": { @@ -15996,118 +14772,118 @@ } }, "workbox-core": { - "version": "6.2.4", - "resolved": "https://registry.npmjs.org/workbox-core/-/workbox-core-6.2.4.tgz", - "integrity": "sha512-Nu8X4R4Is3g8uzEJ6qwbW2CGVpzntW/cSf8OfsQGIKQR0nt84FAKzP2cLDaNLp3L/iV9TuhZgCTZzkMiap5/OQ==", + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/workbox-core/-/workbox-core-6.3.0.tgz", + "integrity": "sha512-SufToEV3SOLwwz3j+P4pgkfpzLRUlR17sX3p/LrMHP/brYKvJQqjTwtSvaCkkAX0RPHX2TFHmN8xhPP1bpmomg==", "dev": true }, "workbox-expiration": { - "version": "6.2.4", - "resolved": "https://registry.npmjs.org/workbox-expiration/-/workbox-expiration-6.2.4.tgz", - "integrity": "sha512-EdOBLunrE3+Ff50y7AYDbiwtiLDvB+oEIkL1Wd9G5d176YVqFfgPfMRzJQ7fN+Yy2NfmsFME0Bw+dQruYekWsQ==", + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/workbox-expiration/-/workbox-expiration-6.3.0.tgz", + "integrity": "sha512-teYuYfM3HFbwAD/nlZDw/dCMOrCKjsAiMRhz0uOy9IkfBb7vBynO3xf118lY62X6BfqjZdeahiHh10N0/aYICg==", "dev": true, "requires": { "idb": "^6.0.0", - "workbox-core": "6.2.4" + "workbox-core": "6.3.0" } }, "workbox-google-analytics": { - "version": "6.2.4", - "resolved": "https://registry.npmjs.org/workbox-google-analytics/-/workbox-google-analytics-6.2.4.tgz", - "integrity": "sha512-+PWmTouoGGcDupaxM193F2NmgrF597Pyt9eHIDxfed+x+JSSeUkETlbAKwB8rnBHkAjs8JQcvStEP/IpueNKpQ==", + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/workbox-google-analytics/-/workbox-google-analytics-6.3.0.tgz", + "integrity": "sha512-6u0y21rtimnrCKpvayTkwh9y4Y5Xdn6X87x895WzwcOcWA2j/Nl7nmCpB0wjjhqU9pMj7B2lChqfypP+xUs5IA==", "dev": true, "requires": { - "workbox-background-sync": "6.2.4", - "workbox-core": "6.2.4", - "workbox-routing": "6.2.4", - "workbox-strategies": "6.2.4" + "workbox-background-sync": "6.3.0", + "workbox-core": "6.3.0", + "workbox-routing": "6.3.0", + "workbox-strategies": "6.3.0" } }, "workbox-navigation-preload": { - "version": "6.2.4", - "resolved": "https://registry.npmjs.org/workbox-navigation-preload/-/workbox-navigation-preload-6.2.4.tgz", - "integrity": "sha512-y2dOSsaSdEimqhCmBIFR6kBp+GZbtNtWCBaMFwfKxTAul2uyllKcTKBHnZ9IzxULue6o6voV+I2U8Y8tO8n+eA==", + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/workbox-navigation-preload/-/workbox-navigation-preload-6.3.0.tgz", + "integrity": "sha512-D7bomh9SCn1u6n32FqAWfyHe2dkK6mWbwcTsoeBnFSD0p8Gr9Zq1Mpt/DitEfGIQHck90Zd024xcTFLkjczS/Q==", "dev": true, "requires": { - "workbox-core": "6.2.4" + "workbox-core": "6.3.0" } }, "workbox-precaching": { - "version": "6.2.4", - "resolved": "https://registry.npmjs.org/workbox-precaching/-/workbox-precaching-6.2.4.tgz", - "integrity": "sha512-7POznbVc8EG/mkbXzeb94x3B1VJruPgXvXFgS0NJ3GRugkO4ULs/DpIIb+ycs7uJIKY9EzLS7VXvElr3rMSozQ==", + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/workbox-precaching/-/workbox-precaching-6.3.0.tgz", + "integrity": "sha512-bND3rUxiuzFmDfeKywdvOqK0LQ5LLbOPk0eX22PlMQNOOduHRxzglMpgHo/MR6h+8cPJ3GpxT8hZ895/7bHMqQ==", "dev": true, "requires": { - "workbox-core": "6.2.4", - "workbox-routing": "6.2.4", - "workbox-strategies": "6.2.4" + "workbox-core": "6.3.0", + "workbox-routing": "6.3.0", + "workbox-strategies": "6.3.0" } }, "workbox-range-requests": { - "version": "6.2.4", - "resolved": "https://registry.npmjs.org/workbox-range-requests/-/workbox-range-requests-6.2.4.tgz", - "integrity": "sha512-q4jjTXD1QOKbrHnzV3nxdZtIpOiVoIP5QyVmjuJrybVnAZurtyKcqirTQcAcT/zlTvgwm07zcTTk9o/zIB6DmA==", + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/workbox-range-requests/-/workbox-range-requests-6.3.0.tgz", + "integrity": "sha512-AHnGtfSvc/fBt+8NCVT6jVcshv7oFkiuS94YsedQu2sIN1jKHkxLaj7qMBl818FoY6x7r0jw1WLmG/QDmI1/oA==", "dev": true, "requires": { - "workbox-core": "6.2.4" + "workbox-core": "6.3.0" } }, "workbox-recipes": { - "version": "6.2.4", - "resolved": "https://registry.npmjs.org/workbox-recipes/-/workbox-recipes-6.2.4.tgz", - "integrity": "sha512-z7oECGrt940dw1Bv0xIDJEXY1xARiaxsIedeJOutZFkbgaC/yWG61VTr/hmkeJ8Nx6jnY6W7Rc0iOUvg4sePag==", + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/workbox-recipes/-/workbox-recipes-6.3.0.tgz", + "integrity": "sha512-f0AZyxd48E4t+PV+ifgIf8WodfJqRj8/E0t+PwppDIdTPyD59cIh0HZBtgPKFdIMVnltodpMz4zioxym1H3GjQ==", "dev": true, "requires": { - "workbox-cacheable-response": "6.2.4", - "workbox-core": "6.2.4", - "workbox-expiration": "6.2.4", - "workbox-precaching": "6.2.4", - "workbox-routing": "6.2.4", - "workbox-strategies": "6.2.4" + "workbox-cacheable-response": "6.3.0", + "workbox-core": "6.3.0", + "workbox-expiration": "6.3.0", + "workbox-precaching": "6.3.0", + "workbox-routing": "6.3.0", + "workbox-strategies": "6.3.0" } }, "workbox-routing": { - "version": "6.2.4", - "resolved": "https://registry.npmjs.org/workbox-routing/-/workbox-routing-6.2.4.tgz", - "integrity": "sha512-jHnOmpeH4MOWR4eXv6l608npD2y6IFv7yFJ1bT9/RbB8wq2vXHXJQ0ExTZRTWGbVltSG22wEU+MQ8VebDDwDeg==", + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/workbox-routing/-/workbox-routing-6.3.0.tgz", + "integrity": "sha512-asajX5UPkaoU4PB9pEpxKWKkcpA+KJQUEeYU6NlK0rXTCpdWQ6iieMRDoBTZBjTzUdL3j3s1Zo2qCOSvtXSYGg==", "dev": true, "requires": { - "workbox-core": "6.2.4" + "workbox-core": "6.3.0" } }, "workbox-strategies": { - "version": "6.2.4", - "resolved": "https://registry.npmjs.org/workbox-strategies/-/workbox-strategies-6.2.4.tgz", - "integrity": "sha512-DKgGC3ruceDuu2o+Ae5qmJy0p0q21mFP+RrkdqKrjyf2u8cJvvtvt1eIt4nevKc5BESiKxmhC2h+TZpOSzUDvA==", + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/workbox-strategies/-/workbox-strategies-6.3.0.tgz", + "integrity": "sha512-SYZt40y+Iu5nA+UEPQOrAuAMMNTxtUBPLCIaMMb4lcADpBYrNP1CD+/s2QsrxzS651a8hfi06REKt+uTp1tqfw==", "dev": true, "requires": { - "workbox-core": "6.2.4" + "workbox-core": "6.3.0" } }, "workbox-streams": { - "version": "6.2.4", - "resolved": "https://registry.npmjs.org/workbox-streams/-/workbox-streams-6.2.4.tgz", - "integrity": "sha512-yG6zV7S2NmYT6koyb7/DoPsyUAat9kD+rOmjP2SbBCtJdLu6ZIi1lgN4/rOkxEby/+Xb4OE4RmCSIZdMyjEmhQ==", + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/workbox-streams/-/workbox-streams-6.3.0.tgz", + "integrity": "sha512-CiRsuoXJOytA7IQriRu6kVCa0L4OdNi0DdniiSageu/EZuxTswNXpgVzkGE4IDArU/5jlzgRtwqrqIWCJX+OMA==", "dev": true, "requires": { - "workbox-core": "6.2.4", - "workbox-routing": "6.2.4" + "workbox-core": "6.3.0", + "workbox-routing": "6.3.0" } }, "workbox-sw": { - "version": "6.2.4", - "resolved": "https://registry.npmjs.org/workbox-sw/-/workbox-sw-6.2.4.tgz", - "integrity": "sha512-OlWLHNNM+j44sN2OaVXnVcf2wwhJUzcHlXrTrbWDu1JWnrQJ/rLicdc/sbxkZoyE0EbQm7Xr1BXcOjsB7PNlXQ==", + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/workbox-sw/-/workbox-sw-6.3.0.tgz", + "integrity": "sha512-xwrXRBzw5jwJ7VdAQkTSNTbNZ4S6VhXtbZZ0vY6XKNQARO5nuGphNdif+hJFIejHUgtV6ESpQnixPj5hYB2jKQ==", "dev": true }, "workbox-window": { - "version": "6.2.4", - "resolved": "https://registry.npmjs.org/workbox-window/-/workbox-window-6.2.4.tgz", - "integrity": "sha512-9jD6THkwGEASj1YP56ZBHYJ147733FoGpJlMamYk38k/EBFE75oc6K3Vs2tGOBx5ZGq54+mHSStnlrtFG3IiOg==", + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/workbox-window/-/workbox-window-6.3.0.tgz", + "integrity": "sha512-CFP84assX9srH/TOx4OD8z4EBPO/Cq4WKdV2YLcJIFJmVTS/cB63XKeidKl2KJk8qOOLVIKnaO7BLmb0MxGFtA==", "dev": true, "requires": { "@types/trusted-types": "^2.0.2", - "workbox-core": "6.2.4" + "workbox-core": "6.3.0" } }, "wrap-ansi": { @@ -16140,9 +14916,9 @@ } }, "ws": { - "version": "7.4.6", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.4.6.tgz", - "integrity": "sha512-YmhHDO4MzaDLB+M9ym/mDA5z0naX8j7SIlT8f8z+I0VtzsRbekxEutHSme7NPS2qE8StCYQNUnfWdXta/Yu85A==", + "version": "7.5.5", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.5.tgz", + "integrity": "sha512-BAkMFcAzl8as1G/hArkxOxq3G7pjUqQ3gzYbLL0/5zNkph70e+lCoxBGnm6AW1+/aiNeV4fnKqZ8m4GZewmH2w==", "dev": true }, "x-is-string": { @@ -16188,9 +14964,9 @@ "dev": true }, "yargs": { - "version": "17.1.1", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.1.1.tgz", - "integrity": "sha512-c2k48R0PwKIqKhPMWjeiF6y2xY/gPMUlro0sgxqXpbOIohWiLNXWslsootttv7E1e73QPAMQSg5FeySbVcpsPQ==", + "version": "17.2.1", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.2.1.tgz", + "integrity": "sha512-XfR8du6ua4K6uLGm5S6fA+FIJom/MdJcFNVY8geLlp2v8GYbOXD4EB1tPNZsRn4vBzKGMgb5DRZMeWuFc2GO8Q==", "dev": true, "requires": { "cliui": "^7.0.2", @@ -16385,6 +15161,12 @@ "integrity": "sha512-faQrqNMzcPCHGVC2aaOINk13K+aaBDUPjGWl0teOXywElLjyVAB6Oe2jj62jHYtwsU49jXhScYbvPENK+6zAvQ==", "dev": true }, + "yn": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", + "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", + "dev": true + }, "yocto-queue": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", diff --git a/package.json b/package.json index 98e54606bd..9e9bdc506f 100644 --- a/package.json +++ b/package.json @@ -40,7 +40,8 @@ "lit-element": "2.5.1", "lit-html": "1.4.1", "lit-translate": "^1.2.1", - "marked": "^3.0.0" + "marked": "^3.0.0", + "panzoom": "^9.4.2" }, "scripts": { "lint:eslint": "eslint --ext .ts,.html . --ignore-path .gitignore", diff --git a/src/editors/SLD/bay-sld.ts b/src/editors/SLD/bay-sld.ts new file mode 100644 index 0000000000..572f68d945 --- /dev/null +++ b/src/editors/SLD/bay-sld.ts @@ -0,0 +1,205 @@ +import { + css, + customElement, + html, + LitElement, + property, + query, + TemplateResult, +} from 'lit-element'; + +import { getChildElementsByTagName } from '../../foundation.js'; +import { getPosition, SldElement } from './foundation.js'; +import { OrthogonalConnector } from './ortho-connector.js'; + +@customElement('bay-sld') +export class BaySld extends LitElement { + @property() + element!: Element; + @property({ type: Boolean }) + downer = false; + + @property() + get unconnectedElements(): Element[] { + return getChildElementsByTagName( + this.element, + 'ConductingEquipment' + ).filter( + child => + Array.from(child.querySelectorAll('Terminal')).filter( + terminal => terminal.getAttribute('cNodeName') !== 'grounded' + ).length === 0 + ); + } + + get xMax(): number { + const posXx = ( + this.sldelements + .filter(sldelement => sldelement.pos.x) + .map(sldelement => sldelement.pos.x) + ); + return Math.max(...posXx, 2); + } + + get yMax(): number { + const posYs = ( + this.sldelements + .filter(sldelement => sldelement.pos.y) + .map(sldelement => sldelement.pos.y) + ); + return Math.max(...posYs, 2); + } + + @property() + get sldelements(): SldElement[] { + const sldelements: SldElement[] = []; + + Array.from(this.element.children) + .filter( + child => + Array.from(child.querySelectorAll('Terminal')).filter( + terminal => terminal.getAttribute('cNodeName') !== 'grounded' + ).length !== 0 + ) + .filter(child => { + const [x, y] = getPosition(child); + return x && y; + }) + .forEach(child => { + const [x, y] = getPosition(child); + sldelements.push({ element: child, pos: { x, y } }); + }); + + return sldelements; + } + + @query('#svg') svg!: HTMLElement; + + firstUpdated(): void { + this.drawConnection(this.sldelements[0], this.sldelements[1]); + } + + drawConnection(e1: SldElement, e2: SldElement): void { + const shapeA = { + left: (2 * e1.pos.x! - 2) * 50, + top: (2 * e1.pos.y! - 2) * 50, + width: 50, + height: 50, + }; + const shapeB = { + left: (2 * e2.pos.x! - 2) * 50, + top: (2 * e2.pos.y! - 2) * 50, + width: 50, + height: 50, + }; + + const path = OrthogonalConnector.route({ + pointA: { shape: shapeA, side: 'bottom', distance: 0.5 }, + pointB: { shape: shapeB, side: 'bottom', distance: 0.5 }, + shapeMargin: 10, + globalBoundsMargin: 25, + globalBounds: { + left: 0, + top: 0, + width: 10000, + height: 10000, + }, + }); + + const line = document.createElement('path'); + let d = ''; + path.forEach(({ x, y }, index) => { + if (index === 0) { + d = d + `M ${x} ${y}`; + } else { + d = d + ` L ${x} ${y}`; + } + }); + + line.setAttribute('d', d); + line.setAttribute('fill', 'transparent'); + line.setAttribute('stroke', 'currentColor'); + line.setAttribute('stroke-width', '1.5'); + + this.svg.appendChild(line); + } + + render(): TemplateResult { + return html`
+
+ ${this.unconnectedElements.map( + element => + html`
${element.getAttribute('name')}
` + )} +
+
+ ${this.sldelements.map( + sldelement => + html` + ` + )} + +
+
`; + } + + static styles = css` + .container { + display: grid; + grid-gap: 50px; + padding: 50px; + } + + .container:hover { + outline: 2px dashed var(--mdc-theme-primary); + transition: transform 200ms linear, box-shadow 250ms linear; + } + + .container:focus-within { + outline: 2px solid var(--mdc-theme-primary); + transition: transform 200ms linear, box-shadow 250ms linear; + } + + .unconnectedcontainer { + display: grid; + grid-gap: 50px; + box-sizing: border-box; + grid-template-columns: repeat(auto-fit, minmax(50px, 50px)); + } + + .sldcontainer { + display: grid; + grid-gap: 50px; + } + + .element { + width: 50px; + height: 50px; + outline: solid; + } + .element:hover { + outline: 2px dashed var(--mdc-theme-primary); + transition: transform 200ms linear, box-shadow 250ms linear; + } + + #canvas { + position: absolute; + } + `; +} diff --git a/src/editors/SLD/foundation.ts b/src/editors/SLD/foundation.ts index 6034554600..c557b36ed0 100644 --- a/src/editors/SLD/foundation.ts +++ b/src/editors/SLD/foundation.ts @@ -21,6 +21,32 @@ export type GraphEdge = { yEnd?: number; }; +export interface Point { + x: number | undefined; + y: number | undefined; +} + +export interface SldElement { + element: Element; + pos: Point; +} + +export function getPosition(element: Element): (number | undefined)[] { + const xAttr = element.getAttributeNS( + 'http://www.iec.ch/61850/2003/SCLcoordinates', + 'x' + ); + const yAttr = element.getAttributeNS( + 'http://www.iec.ch/61850/2003/SCLcoordinates', + 'y' + ); + + return [ + xAttr ? parseInt(xAttr) : undefined, + yAttr ? parseInt(yAttr) : undefined, + ]; +} + function getTerminals(connectivityNode: Element): Element[] { const substation = connectivityNode.closest('Substation'); if (!substation) return []; diff --git a/src/editors/SLD/ortho-connector.ts b/src/editors/SLD/ortho-connector.ts new file mode 100644 index 0000000000..a6098fe37b --- /dev/null +++ b/src/editors/SLD/ortho-connector.ts @@ -0,0 +1,885 @@ +/** + * Orthogonal Connector Router + * - Given two rectangles and their connection points, + * returns the path for an orthogonal connector. + * + * https://jose.page + * 2020 + */ + +type BasicCardinalPoint = 'n' | 'e' | 's' | 'w'; +type Direction = 'v' | 'h'; +type Side = 'top' | 'right' | 'bottom' | 'left'; +type BendDirection = BasicCardinalPoint | 'unknown' | 'none'; + +/** + * A point in space + */ +export interface Point { + x: number; + y: number; +} + +/** + * A size tuple + */ +interface Size { + width: number; + height: number; +} + +/** + * A line between two points + */ +interface Line { + a: Point; + b: Point; +} + +/** + * Represents a Rectangle by location and size + */ +interface Rect extends Size { + left: number; + top: number; +} + +/** + * Represents a connection point on a routing request + */ +interface ConnectorPoint { + shape: Rect; + side: Side; + distance: number; +} + +/** + * Byproduct data emitted by the routing algorithm + */ +interface OrthogonalConnectorByproduct { + hRulers: number[]; + vRulers: number[]; + spots: Point[]; + grid: Rectangle[]; + connections: Line[]; +} + +/** + * Routing request data + */ +interface OrthogonalConnectorOpts { + pointA: ConnectorPoint; + pointB: ConnectorPoint; + shapeMargin: number; + globalBoundsMargin: number; + globalBounds: Rect; +} + +/** + * Utility Point creator + * @param x + * @param y + */ +function makePt(x: number, y: number): Point { + return { x, y }; +} + +/** + * Computes distance between two points + * @param a + * @param b + */ +function distance(a: Point, b: Point): number { + return Math.sqrt(Math.pow(b.x - a.x, 2) + Math.pow(b.y - a.y, 2)); +} + +/** + * Abstracts a Rectangle and adds geometric utilities + */ +class Rectangle { + static get empty(): Rectangle { + return new Rectangle(0, 0, 0, 0); + } + + static fromRect(r: Rect): Rectangle { + return new Rectangle(r.left, r.top, r.width, r.height); + } + + static fromLTRB( + left: number, + top: number, + right: number, + bottom: number + ): Rectangle { + return new Rectangle(left, top, right - left, bottom - top); + } + + constructor( + readonly left: number, + readonly top: number, + readonly width: number, + readonly height: number + ) {} + + contains(p: Point): boolean { + return ( + p.x >= this.left && + p.x <= this.right && + p.y >= this.top && + p.y <= this.bottom + ); + } + + inflate(horizontal: number, vertical: number): Rectangle { + return Rectangle.fromLTRB( + this.left - horizontal, + this.top - vertical, + this.right + horizontal, + this.bottom + vertical + ); + } + + intersects(rectangle: Rectangle): boolean { + const thisX = this.left; + const thisY = this.top; + const thisW = this.width; + const thisH = this.height; + const rectX = rectangle.left; + const rectY = rectangle.top; + const rectW = rectangle.width; + const rectH = rectangle.height; + return ( + rectX < thisX + thisW && + thisX < rectX + rectW && + rectY < thisY + thisH && + thisY < rectY + rectH + ); + } + + union(r: Rectangle): Rectangle { + const x = [this.left, this.right, r.left, r.right]; + const y = [this.top, this.bottom, r.top, r.bottom]; + return Rectangle.fromLTRB( + Math.min(...x), + Math.min(...y), + Math.max(...x), + Math.max(...y) + ); + } + + get center(): Point { + return { + x: this.left + this.width / 2, + y: this.top + this.height / 2, + }; + } + + get right(): number { + return this.left + this.width; + } + + get bottom(): number { + return this.top + this.height; + } + + get location(): Point { + return makePt(this.left, this.top); + } + + get northEast(): Point { + return { x: this.right, y: this.top }; + } + + get southEast(): Point { + return { x: this.right, y: this.bottom }; + } + + get southWest(): Point { + return { x: this.left, y: this.bottom }; + } + + get northWest(): Point { + return { x: this.left, y: this.top }; + } + + get east(): Point { + return makePt(this.right, this.center.y); + } + + get north(): Point { + return makePt(this.center.x, this.top); + } + + get south(): Point { + return makePt(this.center.x, this.bottom); + } + + get west(): Point { + return makePt(this.left, this.center.y); + } + + get size(): Size { + return { width: this.width, height: this.height }; + } +} + +/** + * Represents a node in a graph, whose data is a Point + */ +class PointNode { + public distance = Number.MAX_SAFE_INTEGER; + public shortestPath: PointNode[] = []; + public adjacentNodes: Map = new Map(); + constructor(public data: Point) {} +} + +/*** + * Represents a Graph of Point nodes + */ +class PointGraph { + private index: { [x: string]: { [y: string]: PointNode } } = {}; + + add(p: Point) { + const { x, y } = p; + const xs = x.toString(), + ys = y.toString(); + + if (!(xs in this.index)) { + this.index[xs] = {}; + } + if (!(ys in this.index[xs])) { + this.index[xs][ys] = new PointNode(p); + } + } + + private getLowestDistanceNode(unsettledNodes: Set): PointNode { + let lowestDistanceNode: PointNode | null = null; + let lowestDistance = Number.MAX_SAFE_INTEGER; + for (const node of unsettledNodes) { + const nodeDistance = node.distance; + if (nodeDistance < lowestDistance) { + lowestDistance = nodeDistance; + lowestDistanceNode = node; + } + } + return lowestDistanceNode!; + } + + private inferPathDirection(node: PointNode): Direction | null { + if (node.shortestPath.length == 0) { + return null; + } + + return this.directionOfNodes( + node.shortestPath[node.shortestPath.length - 1], + node + ); + } + + calculateShortestPathFromSource( + graph: PointGraph, + source: PointNode + ): PointGraph { + source.distance = 0; + + const settledNodes: Set = new Set(); + const unsettledNodes: Set = new Set(); + + unsettledNodes.add(source); + + while (unsettledNodes.size != 0) { + const currentNode = this.getLowestDistanceNode(unsettledNodes); + unsettledNodes.delete(currentNode); + + for (const [adjacentNode, edgeWeight] of currentNode.adjacentNodes) { + if (!settledNodes.has(adjacentNode)) { + this.calculateMinimumDistance(adjacentNode, edgeWeight, currentNode); + unsettledNodes.add(adjacentNode); + } + } + settledNodes.add(currentNode); + } + + return graph; + } + + private calculateMinimumDistance( + evaluationNode: PointNode, + edgeWeigh: number, + sourceNode: PointNode + ) { + const sourceDistance = sourceNode.distance; + const comingDirection = this.inferPathDirection(sourceNode); + const goingDirection = this.directionOfNodes(sourceNode, evaluationNode); + const changingDirection = + comingDirection && goingDirection && comingDirection != goingDirection; + const extraWeigh = changingDirection ? Math.pow(edgeWeigh + 1, 2) : 0; + + if (sourceDistance + edgeWeigh + extraWeigh < evaluationNode.distance) { + evaluationNode.distance = sourceDistance + edgeWeigh + extraWeigh; + const shortestPath: PointNode[] = [...sourceNode.shortestPath]; + shortestPath.push(sourceNode); + evaluationNode.shortestPath = shortestPath; + } + } + + private directionOf(a: Point, b: Point): Direction | null { + if (a.x === b.x) { + return 'h'; + } else if (a.y === b.y) { + return 'v'; + } else { + return null; + } + } + + private directionOfNodes(a: PointNode, b: PointNode): Direction | null { + return this.directionOf(a.data, b.data); + } + + connect(a: Point, b: Point) { + const nodeA = this.get(a); + const nodeB = this.get(b); + + if (!nodeA || !nodeB) { + throw new Error(`A point was not found`); + } + + nodeA.adjacentNodes.set(nodeB, distance(a, b)); + } + + has(p: Point): boolean { + const { x, y } = p; + const xs = x.toString(), + ys = y.toString(); + return xs in this.index && ys in this.index[xs]; + } + + get(p: Point): PointNode | null { + const { x, y } = p; + const xs = x.toString(), + ys = y.toString(); + + if (xs in this.index && ys in this.index[xs]) { + return this.index[xs][ys]; + } + + return null; + } +} + +/** + * Gets the actual point of the connector based on the distance parameter + * @param p + */ +function computePt(p: ConnectorPoint): Point { + const b = Rectangle.fromRect(p.shape); + switch (p.side) { + case 'bottom': + return makePt(b.left + b.width * p.distance, b.bottom); + case 'top': + return makePt(b.left + b.width * p.distance, b.top); + case 'left': + return makePt(b.left, b.top + b.height * p.distance); + case 'right': + return makePt(b.right, b.top + b.height * p.distance); + } +} + +/** + * Extrudes the connector point by margin depending on it's side + * @param cp + * @param margin + */ +function extrudeCp(cp: ConnectorPoint, margin: number): Point { + const { x, y } = computePt(cp); + switch (cp.side) { + case 'top': + return makePt(x, y - margin); + case 'right': + return makePt(x + margin, y); + case 'bottom': + return makePt(x, y + margin); + case 'left': + return makePt(x - margin, y); + } +} + +/** + * Returns flag indicating if the side belongs on a vertical axis + * @param side + */ +function isVerticalSide(side: Side): boolean { + return side == 'top' || side == 'bottom'; +} + +/** + * Creates a grid of rectangles from the specified set of rulers, contained on the specified bounds + * @param verticals + * @param horizontals + * @param bounds + */ +function rulersToGrid( + verticals: number[], + horizontals: number[], + bounds: Rectangle +): Grid { + const result: Grid = new Grid(); + + verticals.sort((a, b) => a - b); + horizontals.sort((a, b) => a - b); + + let lastX = bounds.left; + let lastY = bounds.top; + let column = 0; + let row = 0; + + for (const y of horizontals) { + for (const x of verticals) { + result.set(row, column++, Rectangle.fromLTRB(lastX, lastY, x, y)); + lastX = x; + } + + // Last cell of the row + result.set(row, column, Rectangle.fromLTRB(lastX, lastY, bounds.right, y)); + lastX = bounds.left; + lastY = y; + column = 0; + row++; + } + + lastX = bounds.left; + + // Last fow of cells + for (const x of verticals) { + result.set( + row, + column++, + Rectangle.fromLTRB(lastX, lastY, x, bounds.bottom) + ); + lastX = x; + } + + // Last cell of last row + result.set( + row, + column, + Rectangle.fromLTRB(lastX, lastY, bounds.right, bounds.bottom) + ); + + return result; +} + +/** + * Returns an array without repeated points + * @param points + */ +function reducePoints(points: Point[]): Point[] { + const result: Point[] = []; + const map = new Map(); + + points.forEach(p => { + const { x, y } = p; + const arr: number[] = map.get(y) || map.set(y, []).get(y)!; + + if (arr.indexOf(x) < 0) { + arr.push(x); + } + }); + + for (const [y, xs] of map) { + for (const x of xs) { + result.push(makePt(x, y)); + } + } + + return result; +} + +/** + * Returns a set of spots generated from the grid, avoiding colliding spots with specified obstacles + * @param grid + * @param obstacles + */ +function gridToSpots(grid: Grid, obstacles: Rectangle[]): Point[] { + const obstacleCollision = (p: Point) => + obstacles.filter(o => o.contains(p)).length > 0; + + const gridPoints: Point[] = []; + + for (const [row, data] of grid.data) { + const firstRow = row == 0; + const lastRow = row == grid.rows - 1; + + for (const [col, r] of data) { + const firstCol = col == 0; + const lastCol = col == grid.columns - 1; + const nw = firstCol && firstRow; + const ne = firstRow && lastCol; + const se = lastRow && lastCol; + const sw = lastRow && firstCol; + + if (nw || ne || se || sw) { + gridPoints.push(r.northWest, r.northEast, r.southWest, r.southEast); + } else if (firstRow) { + gridPoints.push(r.northWest, r.north, r.northEast); + } else if (lastRow) { + gridPoints.push(r.southEast, r.south, r.southWest); + } else if (firstCol) { + gridPoints.push(r.northWest, r.west, r.southWest); + } else if (lastCol) { + gridPoints.push(r.northEast, r.east, r.southEast); + } else { + gridPoints.push( + r.northWest, + r.north, + r.northEast, + r.east, + r.southEast, + r.south, + r.southWest, + r.west, + r.center + ); + } + } + } + + // for(const r of grid) { + // gridPoints.push( + // r.northWest, r.north, r.northEast, r.east, + // r.southEast, r.south, r.southWest, r.west, r.center); + // } + + // Reduce repeated points and filter out those who touch shapes + return reducePoints(gridPoints).filter(p => !obstacleCollision(p)); +} + +/** + * Creates a graph connecting the specified points orthogonally + * @param spots + */ +function createGraph(spots: Point[]): { + graph: PointGraph; + connections: Line[]; +} { + const hotXs: number[] = []; + const hotYs: number[] = []; + const graph = new PointGraph(); + const connections: Line[] = []; + + spots.forEach(p => { + const { x, y } = p; + if (hotXs.indexOf(x) < 0) hotXs.push(x); + if (hotYs.indexOf(y) < 0) hotYs.push(y); + graph.add(p); + }); + + hotXs.sort((a, b) => a - b); + hotYs.sort((a, b) => a - b); + + const inHotIndex = (p: Point): boolean => graph.has(p); + + for (let i = 0; i < hotYs.length; i++) { + for (let j = 0; j < hotXs.length; j++) { + const b = makePt(hotXs[j], hotYs[i]); + + if (!inHotIndex(b)) continue; + + if (j > 0) { + const a = makePt(hotXs[j - 1], hotYs[i]); + + if (inHotIndex(a)) { + graph.connect(a, b); + graph.connect(b, a); + connections.push({ a, b }); + } + } + + if (i > 0) { + const a = makePt(hotXs[j], hotYs[i - 1]); + + if (inHotIndex(a)) { + graph.connect(a, b); + graph.connect(b, a); + connections.push({ a, b }); + } + } + } + } + + return { graph, connections }; +} + +/** + * Solves the shotest path for the origin-destination path of the graph + * @param graph + * @param origin + * @param destination + */ +function shortestPath( + graph: PointGraph, + origin: Point, + destination: Point +): Point[] { + const originNode = graph.get(origin); + const destinationNode = graph.get(destination); + + if (!originNode) { + throw new Error(`Origin node {${origin.x},${origin.y}} not found`); + } + + if (!destinationNode) { + throw new Error(`Origin node {${origin.x},${origin.y}} not found`); + } + + graph.calculateShortestPathFromSource(graph, originNode); + + return destinationNode.shortestPath.map(n => n.data); +} + +/** + * Given two segments represented by 3 points, + * determines if the second segment bends on an orthogonal direction or not, and which. + * + * @param a + * @param b + * @param c + * @return Bend direction, unknown if not orthogonal or 'none' if straight line + */ +function getBend(a: Point, b: Point, c: Point): BendDirection { + const equalX = a.x === b.x && b.x === c.x; + const equalY = a.y === b.y && b.y === c.y; + const segment1Horizontal = a.y === b.y; + const segment1Vertical = a.x === b.x; + const segment2Horizontal = b.y === c.y; + const segment2Vertical = b.x === c.x; + + if (equalX || equalY) { + return 'none'; + } + + if ( + !(segment1Vertical || segment1Horizontal) || + !(segment2Vertical || segment2Horizontal) + ) { + return 'unknown'; + } + + if (segment1Horizontal && segment2Vertical) { + return c.y > b.y ? 's' : 'n'; + } else if (segment1Vertical && segment2Horizontal) { + return c.x > b.x ? 'e' : 'w'; + } + + throw new Error('Nope'); +} + +/** + * Simplifies the path by removing unnecessary points, based on orthogonal pathways + * @param points + */ +function simplifyPath(points: Point[]): Point[] { + if (points.length <= 2) { + return points; + } + + const r: Point[] = [points[0]]; + for (let i = 1; i < points.length; i++) { + const cur = points[i]; + + if (i === points.length - 1) { + r.push(cur); + break; + } + + const prev = points[i - 1]; + const next = points[i + 1]; + const bend = getBend(prev, cur, next); + + if (bend !== 'none') { + r.push(cur); + } + } + return r; +} + +/** + * Helps create the grid portion of the algorithm + */ +class Grid { + private _rows = 0; + private _cols = 0; + + readonly data: Map> = new Map(); + + //constructor() {} + + set(row: number, column: number, rectangle: Rectangle) { + this._rows = Math.max(this.rows, row + 1); + this._cols = Math.max(this.columns, column + 1); + + const rowMap: Map = + this.data.get(row) || this.data.set(row, new Map()).get(row)!; + + rowMap.set(column, rectangle); + } + + get(row: number, column: number): Rectangle | null { + const rowMap = this.data.get(row); + + if (rowMap) { + return rowMap.get(column) || null; + } + + return null; + } + + rectangles(): Rectangle[] { + const r: Rectangle[] = []; + + for (const [_, data] of this.data) { + for (const [_, rect] of data) { + r.push(rect); + } + } + + return r; + } + + get columns(): number { + return this._cols; + } + + get rows(): number { + return this._rows; + } +} + +/** + * Main logic wrapped in a class to hold a space for potential future functionallity + */ +export class OrthogonalConnector { + static readonly byproduct: OrthogonalConnectorByproduct = { + hRulers: [], + vRulers: [], + spots: [], + grid: [], + connections: [], + }; + + static route(opts: OrthogonalConnectorOpts): Point[] { + const { pointA, pointB, globalBoundsMargin } = opts; + const spots: Point[] = []; + const verticals: number[] = []; + const horizontals: number[] = []; + const sideA = pointA.side, + sideAVertical = isVerticalSide(sideA); + const sideB = pointB.side, + sideBVertical = isVerticalSide(sideB); + const originA = computePt(pointA); + const originB = computePt(pointB); + const shapeA = Rectangle.fromRect(pointA.shape); + const shapeB = Rectangle.fromRect(pointB.shape); + const bigBounds = Rectangle.fromRect(opts.globalBounds); + let shapeMargin = opts.shapeMargin; + let inflatedA = shapeA.inflate(shapeMargin, shapeMargin); + let inflatedB = shapeB.inflate(shapeMargin, shapeMargin); + + // Check bounding boxes collision + if (inflatedA.intersects(inflatedB)) { + shapeMargin = 0; + inflatedA = shapeA; + inflatedB = shapeB; + } + + const inflatedBounds = inflatedA + .union(inflatedB) + .inflate(globalBoundsMargin, globalBoundsMargin); + + // Curated bounds to stick to + const bounds = Rectangle.fromLTRB( + Math.max(inflatedBounds.left, bigBounds.left), + Math.max(inflatedBounds.top, bigBounds.top), + Math.min(inflatedBounds.right, bigBounds.right), + Math.min(inflatedBounds.bottom, bigBounds.bottom) + ); + + // Add edges to rulers + for (const b of [inflatedA, inflatedB]) { + verticals.push(b.left); + verticals.push(b.right); + horizontals.push(b.top); + horizontals.push(b.bottom); + } + + // Rulers at origins of shapes + (sideAVertical ? verticals : horizontals).push( + sideAVertical ? originA.x : originA.y + ); + (sideBVertical ? verticals : horizontals).push( + sideBVertical ? originB.x : originB.y + ); + + // Points of shape antennas + for (const connectorPt of [pointA, pointB]) { + const p = computePt(connectorPt); + const add = (dx: number, dy: number) => + spots.push(makePt(p.x + dx, p.y + dy)); + + switch (connectorPt.side) { + case 'top': + add(0, -shapeMargin); + break; + case 'right': + add(shapeMargin, 0); + break; + case 'bottom': + add(0, shapeMargin); + break; + case 'left': + add(-shapeMargin, 0); + break; + } + } + + // Sort rulers + verticals.sort((a, b) => a - b); + horizontals.sort((a, b) => a - b); + + // Create grid + const grid = rulersToGrid(verticals, horizontals, bounds); + const gridPoints = gridToSpots(grid, [inflatedA, inflatedB]); + + // Add to spots + spots.push(...gridPoints); + + // Create graph + const { graph, connections } = createGraph(spots); + + // Origin and destination by extruding antennas + const origin = extrudeCp(pointA, shapeMargin); + const destination = extrudeCp(pointB, shapeMargin); + + const start = computePt(pointA); + const end = computePt(pointB); + + this.byproduct.spots = spots; + this.byproduct.vRulers = verticals; + this.byproduct.hRulers = horizontals; + this.byproduct.grid = grid.rectangles(); + this.byproduct.connections = connections; + + const path = shortestPath(graph, origin, destination); + + if (path.length > 0) { + return simplifyPath([ + start, + ...shortestPath(graph, origin, destination), + end, + ]); + } else { + return []; + } + } +} diff --git a/src/editors/SLD/springembeded.ts b/src/editors/SLD/springembeded.ts index 438d754263..d527f4b35c 100644 --- a/src/editors/SLD/springembeded.ts +++ b/src/editors/SLD/springembeded.ts @@ -21,11 +21,11 @@ function applyCoulombsLaw(nodes: GraphNode[]): void { const xforce = (xe * n2.r) / (magnitude * magnitude * 0.5); const yforce = (ye * n2.r) / (magnitude * magnitude * 0.5); - n1.xAcceleration = n1.xAcceleration - xforce / n1.mass; - n2.xAcceleration = n2.xAcceleration + xforce / n2.mass; + n1.xAcceleration = n1.xAcceleration - (xforce / n1.mass) * 0.9; + n2.xAcceleration = n2.xAcceleration + (xforce / n2.mass) * 0.9; - n1.yAcceleration = n1.yAcceleration - yforce / n1.mass; - n2.yAcceleration = n2.yAcceleration + yforce / n2.mass; + n1.yAcceleration = n1.yAcceleration - (yforce / n1.mass) * 0.9; + n2.yAcceleration = n2.yAcceleration + (yforce / n2.mass) * 0.9; } } } @@ -47,11 +47,11 @@ function applyHookesLaw(nodes: GraphNode[], edges: GraphEdge[]): void { const xforce = xe * (edge.stiffness * displacement * 0.5); const yforce = ye * (edge.stiffness * displacement * 0.5); - n1.xAcceleration = n1.xAcceleration - xforce / n1.mass; - n2.xAcceleration = n2.xAcceleration + xforce / n2.mass; + n1.xAcceleration = n1.xAcceleration - (xforce / n1.mass) * 0.9; + n2.xAcceleration = n2.xAcceleration + (xforce / n2.mass) * 0.9; - n1.yAcceleration = n1.yAcceleration - yforce / n1.mass; - n2.yAcceleration = n2.yAcceleration + yforce / n2.mass; + n1.yAcceleration = n1.yAcceleration - (yforce / n1.mass) * 0.9; + n2.yAcceleration = n2.yAcceleration + (yforce / n2.mass) * 0.9; } } @@ -144,8 +144,8 @@ function isStable(nodes: GraphNode[]): boolean { export function doSpringy(nodes: GraphNode[], edges: GraphEdge[]): void { let i; - for (i = 0; i < 500; i++) { - const e = 0.1 * Math.exp(-i / 10); + for (i = 0; i < 2000; i++) { + const e = 0.05; applyCoulombsLaw(nodes); applyHookesLaw(nodes, edges); adjustRotation(nodes, edges); diff --git a/src/editors/SLD/substation-sld.ts b/src/editors/SLD/substation-sld.ts new file mode 100644 index 0000000000..4d42ef2046 --- /dev/null +++ b/src/editors/SLD/substation-sld.ts @@ -0,0 +1,45 @@ +import { + css, + customElement, + html, + LitElement, + property, + TemplateResult, +} from 'lit-element'; + +@customElement('substation-sld') +export class SubstationSld extends LitElement { + @property() + element!: Element; + @property() + get voltagelevels(): Element[] { + return Array.from(this.element.getElementsByTagName('VoltageLevel')); + } + + render(): TemplateResult { + return html`
+
+ ${this.voltagelevels.map( + voltagelevel => + html`` + )} +
+
`; + } + + static styles = css` + .container:hover { + outline: 2px dashed var(--mdc-theme-primary); + transition: transform 200ms linear, box-shadow 250ms linear; + } + + .container:focus-within { + outline: 2px solid var(--mdc-theme-primary); + transition: transform 200ms linear, box-shadow 250ms linear; + } + + div { + display: flex; + } + `; +} diff --git a/src/editors/SLD/voltagelevel-sld.ts b/src/editors/SLD/voltagelevel-sld.ts new file mode 100644 index 0000000000..2460933fa6 --- /dev/null +++ b/src/editors/SLD/voltagelevel-sld.ts @@ -0,0 +1,91 @@ +import { + css, + customElement, + html, + LitElement, + property, + TemplateResult, +} from 'lit-element'; + +import { getChildElementsByTagName } from '../../foundation.js'; +import { getPosition, SldElement } from './foundation.js'; + +function isBusBar(bay: Element): boolean { + return ( + bay.children.length === 1 && bay.children[0].tagName === 'ConnectivityNode' + ); +} + +@customElement('voltagelevel-sld') +export class SubstationSld extends LitElement { + @property() + element!: Element; + @property() + @property() + get busbars(): SldElement[] { + return getChildElementsByTagName(this.element, 'Bay') + .filter(bay => isBusBar(bay)) + .map(bay => { + const [x, y] = getPosition(bay); + return { element: bay, pos: { x, y } }; + }); + } + + @property() + get feeders(): SldElement[] { + return getChildElementsByTagName(this.element, 'Bay') + .filter(bay => !isBusBar(bay)) + .map(bay => { + const [x, y] = getPosition(bay); + return { element: bay, pos: { x, y } }; + }); + } + + render(): TemplateResult { + return html`
+
+
+ ${this.busbars.map( + busbar => + html`
+ ${busbar.element.getAttribute('name')} +
` + )} +
+
+ ${this.feeders.map( + feeder => html`` + )} +
+
`; + } + + static styles = css` + .container { + display: grid; + grip-gap: 50px; + padding: 50px; + } + + .container:hover { + outline: 2px dashed var(--mdc-theme-primary); + transition: transform 200ms linear, box-shadow 250ms linear; + } + + .container:focus-within { + outline: 2px solid var(--mdc-theme-primary); + transition: transform 200ms linear, box-shadow 250ms linear; + } + + .busbar { + grid-template-columns: repeat(1, 1fr); + } + + .container.bay { + display: flex; + } + `; +} diff --git a/src/editors/Sld.ts b/src/editors/Sld.ts index 7ab095a732..10458a8a45 100644 --- a/src/editors/Sld.ts +++ b/src/editors/Sld.ts @@ -1,13 +1,19 @@ import {} from 'fast-check'; -import { html, LitElement, TemplateResult, property, css } from 'lit-element'; import { - getEdges, - getNodes, - GraphEdge, - GraphNode, - updateEdges, -} from './SLD/foundation.js'; -import { doSpringy } from './SLD/springembeded.js'; + html, + LitElement, + TemplateResult, + property, + css, + query, +} from 'lit-element'; +import { GraphEdge, GraphNode } from './SLD/foundation.js'; + +import panzoom from 'panzoom'; + +import './SLD/substation-sld.js'; +import './SLD/voltagelevel-sld.js'; +import './SLD/bay-sld.js'; export default class SldPlugin extends LitElement { @property() @@ -19,64 +25,25 @@ export default class SldPlugin extends LitElement { nodes: GraphNode[] = []; edges: GraphEdge[] = []; + @query('#panzoomcontainer') container!: HTMLElement; + firstUpdated(): void { - this.nodes = this.doc - ? getNodes(this.doc.querySelector('Substation')!) - : []; - this.edges = this.doc - ? getEdges(this.doc.querySelector('Substation')!) - : []; - //doSpringEmbedded(this.nodes, this.edges); - updateEdges(this.nodes, this.edges); - this.requestUpdate(); + panzoom(this.container); } - doIteration(): void { - this.iterations++; - doSpringy(this.nodes, this.edges); - updateEdges(this.nodes, this.edges); - this.requestUpdate(); + constructor() { + super(); } render(): TemplateResult { - return html`
- - ${this.nodes.map( - node => - html`
- ${node.element.getAttribute('name')} -
` - )}${this.edges.map( - edge => html` - - ` - )} -
C
- this.doIteration()} style="z-index:1" - >${this.iterations}`; + return html`
+
+ +
+
`; } - static styles = css` - div { - outline: solid; - position: absolute; - width: 50px; - height: 50px; - } - - svg { - top: 0px; - left: 0px; - position: absolute; - width: 5000px; - height: 5000px; - } - `; + static styles = css``; } diff --git a/src/open-scd.ts b/src/open-scd.ts index c5733f5b13..faf632b1bd 100644 --- a/src/open-scd.ts +++ b/src/open-scd.ts @@ -50,6 +50,8 @@ import { Wizarding } from './Wizarding.js'; import { ListItem } from '@material/mwc-list/mwc-list-item'; +import './zeroline/conducting-equipment-editor.js'; + /** The `` custom element is the main entry point of the * Open Substation Configuration Designer. */ @customElement('open-scd') diff --git a/src/zeroline/bay-editor.ts b/src/zeroline/bay-editor.ts index 5eb0cb8bb3..8193cd3551 100644 --- a/src/zeroline/bay-editor.ts +++ b/src/zeroline/bay-editor.ts @@ -18,7 +18,6 @@ import { import { wizards } from '../wizards/wizard-library.js'; import { VoltageLevelEditor } from './voltage-level-editor.js'; -import './conducting-equipment-editor.js'; /** [[`SubstationEditor`]] subeditor for a `Bay` element. */ @customElement('bay-editor') From 4ec3a6d3251b403f5b6513914e4d987331054be6 Mon Sep 17 00:00:00 2001 From: Rob Tjalma Date: Tue, 26 Oct 2021 13:03:17 +0200 Subject: [PATCH 04/33] Added BusBar line --- src/editors/SLD/voltagelevel-sld.ts | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/editors/SLD/voltagelevel-sld.ts b/src/editors/SLD/voltagelevel-sld.ts index 2460933fa6..b7c2d78a25 100644 --- a/src/editors/SLD/voltagelevel-sld.ts +++ b/src/editors/SLD/voltagelevel-sld.ts @@ -51,7 +51,10 @@ export class SubstationSld extends LitElement { ${this.busbars.map( busbar => html`
- ${busbar.element.getAttribute('name')} + + ${busbar.element.getAttribute('name')} + +
` )} From 927f1e7bc791376f6da3bed33530736f6474a4ba Mon Sep 17 00:00:00 2001 From: Rob Tjalma Date: Tue, 26 Oct 2021 13:14:51 +0200 Subject: [PATCH 05/33] Added separate CSS --- src/editors/SLD/voltagelevel-sld.ts | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/src/editors/SLD/voltagelevel-sld.ts b/src/editors/SLD/voltagelevel-sld.ts index b7c2d78a25..791047fe1a 100644 --- a/src/editors/SLD/voltagelevel-sld.ts +++ b/src/editors/SLD/voltagelevel-sld.ts @@ -51,9 +51,9 @@ export class SubstationSld extends LitElement { ${this.busbars.map( busbar => html`
- + ${busbar.element.getAttribute('name')} - +
` )} @@ -87,6 +87,15 @@ export class SubstationSld extends LitElement { grid-template-columns: repeat(1, 1fr); } + .busbar svg { + width: 100%; + } + + .busbar svg line { + stroke: black; + stroke-width: 5; + } + .container.bay { display: flex; } From f783bf5aa4278350858e4ebb6099ab43653a73ac Mon Sep 17 00:00:00 2001 From: Rob Tjalma Date: Tue, 26 Oct 2021 13:34:26 +0200 Subject: [PATCH 06/33] Fixing build --- __snapshots__/open-scd.md | 16 ++++++++++++++++ src/editors/SLD/foundation.ts | 12 ++++++------ test/unit/Plugging.test.ts | 10 +++++----- 3 files changed, 27 insertions(+), 11 deletions(-) diff --git a/__snapshots__/open-scd.md b/__snapshots__/open-scd.md index 655ad15a62..ce36838509 100644 --- a/__snapshots__/open-scd.md +++ b/__snapshots__/open-scd.md @@ -575,6 +575,22 @@ Substation + + + edit + + SLD + terminal.getAttribute('cNodeName') !== 'grounded') .forEach(terminal => { - const destination = getDesitantion(terminal); + const destination = getDestination(terminal); const source = terminal.parentElement; if (destination && source) edges.push({ diff --git a/test/unit/Plugging.test.ts b/test/unit/Plugging.test.ts index 5e2c6a3ae3..d5dd997ce7 100644 --- a/test/unit/Plugging.test.ts +++ b/test/unit/Plugging.test.ts @@ -22,7 +22,7 @@ describe('PluggingElement', () => { }); it('stores default plugins on load', () => - expect(element).property('editors').to.have.lengthOf(3)); + expect(element).property('editors').to.have.lengthOf(4)); describe('plugin manager dialog', () => { let firstEditorPlugin: HTMLElement; @@ -49,7 +49,7 @@ describe('PluggingElement', () => { it('disables deselected plugins', async () => { firstEditorPlugin.click(); await element.updateComplete; - expect(element).property('editors').to.have.lengthOf(2); + expect(element).property('editors').to.have.lengthOf(3); }); it('enables selected plugins', async () => { @@ -57,7 +57,7 @@ describe('PluggingElement', () => { await element.updateComplete; (element.pluginList.firstElementChild).click(); await element.updateComplete; - expect(element).property('editors').to.have.lengthOf(3); + expect(element).property('editors').to.have.lengthOf(4); }); it('resets plugins to default on reset button click', async () => { @@ -65,7 +65,7 @@ describe('PluggingElement', () => { await element.updateComplete; resetAction.click(); await element.updateComplete; - expect(element).property('editors').to.have.lengthOf(3); + expect(element).property('editors').to.have.lengthOf(4); }); it('opens the custom plugin dialog on add button click', async () => { @@ -139,7 +139,7 @@ describe('PluggingElement', () => { await name.updateComplete; primaryAction.click(); await element.updateComplete; - expect(element.editors).to.have.lengthOf(4); + expect(element.editors).to.have.lengthOf(5); }); it('adds a new menu kind plugin on add button click', async () => { const lengthMenuKindPlugins = element.menuEntries.length; From 8696cef88b97a4e2a568cc70a1d36c34efe90632 Mon Sep 17 00:00:00 2001 From: Rob Tjalma Date: Wed, 27 Oct 2021 22:44:49 +0200 Subject: [PATCH 07/33] Added busbar-sld --- src/editors/SLD/bay-sld.ts | 18 +++++++++++--- src/editors/SLD/busbar-sld.ts | 38 +++++++++++++++++++++++++++++ src/editors/SLD/voltagelevel-sld.ts | 25 ++----------------- src/editors/Sld.ts | 1 + 4 files changed, 55 insertions(+), 27 deletions(-) create mode 100644 src/editors/SLD/busbar-sld.ts diff --git a/src/editors/SLD/bay-sld.ts b/src/editors/SLD/bay-sld.ts index 572f68d945..1a5dd7c94f 100644 --- a/src/editors/SLD/bay-sld.ts +++ b/src/editors/SLD/bay-sld.ts @@ -76,7 +76,11 @@ export class BaySld extends LitElement { @query('#svg') svg!: HTMLElement; firstUpdated(): void { - this.drawConnection(this.sldelements[0], this.sldelements[1]); + this.drawConnection(this.sldelements[0], this.sldelements[2]); + this.drawConnection(this.sldelements[1], this.sldelements[2]); + this.drawConnection(this.sldelements[2], this.sldelements[3]); + this.drawConnection(this.sldelements[3], this.sldelements[4]); + this.drawConnection(this.sldelements[3], this.sldelements[5]); } drawConnection(e1: SldElement, e2: SldElement): void { @@ -95,7 +99,7 @@ export class BaySld extends LitElement { const path = OrthogonalConnector.route({ pointA: { shape: shapeA, side: 'bottom', distance: 0.5 }, - pointB: { shape: shapeB, side: 'bottom', distance: 0.5 }, + pointB: { shape: shapeB, side: 'top', distance: 0.5 }, shapeMargin: 10, globalBoundsMargin: 25, globalBounds: { @@ -106,7 +110,7 @@ export class BaySld extends LitElement { }, }); - const line = document.createElement('path'); + const line = document.createElementNS('http://www.w3.org/2000/svg', 'path'); let d = ''; path.forEach(({ x, y }, index) => { if (index === 0) { @@ -153,7 +157,9 @@ export class BaySld extends LitElement { `; @@ -201,5 +207,9 @@ export class BaySld extends LitElement { #canvas { position: absolute; } + + #svg { + position: absolute; + } `; } diff --git a/src/editors/SLD/busbar-sld.ts b/src/editors/SLD/busbar-sld.ts new file mode 100644 index 0000000000..45ccf2fd73 --- /dev/null +++ b/src/editors/SLD/busbar-sld.ts @@ -0,0 +1,38 @@ +import { + css, + customElement, + html, + LitElement, + property, + TemplateResult, +} from 'lit-element'; + +@customElement('busbar-sld') +export class BusBasSld extends LitElement { + @property() + busBarName!: String; + + render(): TemplateResult { + return html`
+ + ${this.busBarName} + + +
`; + } + + static styles = css` + .busbar { + grid-template-columns: repeat(1, 1fr); + } + + .busbar svg { + width: 100%; + } + + .busbar svg line { + stroke: black; + stroke-width: 5; + } + `; +} diff --git a/src/editors/SLD/voltagelevel-sld.ts b/src/editors/SLD/voltagelevel-sld.ts index 791047fe1a..cf99ee3d3f 100644 --- a/src/editors/SLD/voltagelevel-sld.ts +++ b/src/editors/SLD/voltagelevel-sld.ts @@ -45,18 +45,10 @@ export class SubstationSld extends LitElement { return html`
- ${this.busbars.map( - busbar => - html`
- - ${busbar.element.getAttribute('name')} - - -
` - )} + ${this.busbars.map(busbar => html``)}
${this.feeders.map( @@ -83,19 +75,6 @@ export class SubstationSld extends LitElement { transition: transform 200ms linear, box-shadow 250ms linear; } - .busbar { - grid-template-columns: repeat(1, 1fr); - } - - .busbar svg { - width: 100%; - } - - .busbar svg line { - stroke: black; - stroke-width: 5; - } - .container.bay { display: flex; } diff --git a/src/editors/Sld.ts b/src/editors/Sld.ts index 10458a8a45..2541e48c94 100644 --- a/src/editors/Sld.ts +++ b/src/editors/Sld.ts @@ -14,6 +14,7 @@ import panzoom from 'panzoom'; import './SLD/substation-sld.js'; import './SLD/voltagelevel-sld.js'; import './SLD/bay-sld.js'; +import './SLD/busbar-sld.js'; export default class SldPlugin extends LitElement { @property() From b92a18f6ec1183374b5338473f5402b3ddf0be0d Mon Sep 17 00:00:00 2001 From: Rob Tjalma Date: Fri, 29 Oct 2021 16:13:20 +0200 Subject: [PATCH 08/33] Added Connectivity Nodes --- src/editors/SLD/bay-sld.ts | 136 ++++++++++++++++------- src/editors/SLD/connectivity-node-sld.ts | 56 ++++++++++ src/editors/Sld.ts | 1 + 3 files changed, 150 insertions(+), 43 deletions(-) create mode 100644 src/editors/SLD/connectivity-node-sld.ts diff --git a/src/editors/SLD/bay-sld.ts b/src/editors/SLD/bay-sld.ts index 1a5dd7c94f..b6f92ac89b 100644 --- a/src/editors/SLD/bay-sld.ts +++ b/src/editors/SLD/bay-sld.ts @@ -9,16 +9,23 @@ import { } from 'lit-element'; import { getChildElementsByTagName } from '../../foundation.js'; -import { getPosition, SldElement } from './foundation.js'; +import { getPosition, Point, SldElement } from './foundation.js'; import { OrthogonalConnector } from './ortho-connector.js'; @customElement('bay-sld') export class BaySld extends LitElement { @property() element!: Element; + + // Is this Bay builded down or up? @property({ type: Boolean }) downer = false; + @query('#svg') svg!: HTMLElement; + + /* + * Get all the unconnected Nodes of this particular Bay. + */ @property() get unconnectedElements(): Element[] { return getChildElementsByTagName( @@ -32,27 +39,12 @@ export class BaySld extends LitElement { ); } - get xMax(): number { - const posXx = ( - this.sldelements - .filter(sldelement => sldelement.pos.x) - .map(sldelement => sldelement.pos.x) - ); - return Math.max(...posXx, 2); - } - - get yMax(): number { - const posYs = ( - this.sldelements - .filter(sldelement => sldelement.pos.y) - .map(sldelement => sldelement.pos.y) - ); - return Math.max(...posYs, 2); - } - + /* + * Get all the Equipment Nodes of this particular Bay. + */ @property() - get sldelements(): SldElement[] { - const sldelements: SldElement[] = []; + get equipmentElements(): SldElement[] { + const elements: SldElement[] = []; Array.from(this.element.children) .filter( @@ -61,38 +53,86 @@ export class BaySld extends LitElement { terminal => terminal.getAttribute('cNodeName') !== 'grounded' ).length !== 0 ) - .filter(child => { - const [x, y] = getPosition(child); - return x && y; - }) .forEach(child => { const [x, y] = getPosition(child); - sldelements.push({ element: child, pos: { x, y } }); + elements.push({ element: child, pos: { x, y } }); + }); + + return elements; + } + + /* + * Get all the Connectivity Nodes of this particular Bay. + */ + @property() + get connectivityNodeElements(): SldElement[] { + const sldelements: SldElement[] = []; + + Array.from(getChildElementsByTagName(this.element, 'ConnectivityNode')) + .forEach(child => { + const pathName = child.getAttribute('pathName'); + let nrOfConnections = 0; + let totalX = 0; + let totalY = 0; + + getChildElementsByTagName(this.element, 'ConductingEquipment') + .filter(equipment => equipment.querySelector(`Terminal[connectivityNode="${pathName}"]`) != null) + .forEach(equipment => { + nrOfConnections++; + const x = equipment?.getAttribute('sxy:x'); + const y = equipment?.getAttribute('sxy:y'); + + if (x != null && y != null) { + totalX += parseInt(x); + totalY += parseInt(y); + } + }) + + const [x, y] = [Math.round(totalX / nrOfConnections), Math.round(totalY / nrOfConnections)]; + sldelements.push({ element: child, pos: {x, y} }); }); return sldelements; } - @query('#svg') svg!: HTMLElement; + /* + * The max x and y of this particular bay. + */ + get xMax(): number { + const posXx = ( + this.equipmentElements + .filter(sldelement => sldelement.pos.x) + .map(sldelement => sldelement.pos.x) + ); + return Math.max(...posXx, 2); + } + + get yMax(): number { + const posYs = ( + this.equipmentElements + .filter(sldelement => sldelement.pos.y) + .map(sldelement => sldelement.pos.y) + ); + return Math.max(...posYs, 2); + } firstUpdated(): void { - this.drawConnection(this.sldelements[0], this.sldelements[2]); - this.drawConnection(this.sldelements[1], this.sldelements[2]); - this.drawConnection(this.sldelements[2], this.sldelements[3]); - this.drawConnection(this.sldelements[3], this.sldelements[4]); - this.drawConnection(this.sldelements[3], this.sldelements[5]); + // this.drawConnection(this.sldelements[0], this.sldelements[2]); } - drawConnection(e1: SldElement, e2: SldElement): void { + /* + * Draw an auto-route from 1 Point to another. + */ + drawConnection(e1: Point, e2: Point): void { const shapeA = { - left: (2 * e1.pos.x! - 2) * 50, - top: (2 * e1.pos.y! - 2) * 50, + left: (2 * e1.x! - 2) * 50, + top: (2 * e1.y! - 2) * 50, width: 50, height: 50, }; const shapeB = { - left: (2 * e2.pos.x! - 2) * 50, - top: (2 * e2.pos.y! - 2) * 50, + left: (2 * e2.x! - 2) * 50, + top: (2 * e2.y! - 2) * 50, width: 50, height: 50, }; @@ -143,17 +183,27 @@ export class BaySld extends LitElement { ? this.yMax : -this.yMax}, 50px)" > - ${this.sldelements.map( - sldelement => + ${this.equipmentElements.map( + element => html` ` )} + ${this.connectivityNodeElements.map( + element => + html` + ` + )} CN
+

${this.name}

`; + } + + static styles = css` + .busbar { + grid-template-columns: repeat(1, 1fr); + } + + .busbar svg { + width: 100%; + } + + .busbar svg line { + stroke: black; + stroke-width: 5; + } + + h4 { + color: var(--mdc-theme-on-surface); + font-family: 'Roboto', sans-serif; + font-weight: 300; + overflow: hidden; + white-space: nowrap; + text-overflow: ellipsis; + margin: 0px; + opacity: 1; + transition: opacity 200ms linear; + text-align: center; + } + + #svg { + position: absolute; + } + `; +} diff --git a/src/editors/Sld.ts b/src/editors/Sld.ts index 2541e48c94..ac79223ddd 100644 --- a/src/editors/Sld.ts +++ b/src/editors/Sld.ts @@ -15,6 +15,7 @@ import './SLD/substation-sld.js'; import './SLD/voltagelevel-sld.js'; import './SLD/bay-sld.js'; import './SLD/busbar-sld.js'; +import './SLD/connectivity-node-sld.js'; export default class SldPlugin extends LitElement { @property() From 6a0f637920d32131e0c6f63ddb3e0880bf7c6c01 Mon Sep 17 00:00:00 2001 From: Rob Tjalma Date: Fri, 29 Oct 2021 17:19:00 +0200 Subject: [PATCH 09/33] Implemented routing between CN/Terminals --- src/editors/SLD/bay-sld.ts | 14 +++++++++++++- src/editors/SLD/connectivity-node-sld.ts | 2 +- 2 files changed, 14 insertions(+), 2 deletions(-) diff --git a/src/editors/SLD/bay-sld.ts b/src/editors/SLD/bay-sld.ts index b6f92ac89b..0c63fbb9e4 100644 --- a/src/editors/SLD/bay-sld.ts +++ b/src/editors/SLD/bay-sld.ts @@ -117,7 +117,19 @@ export class BaySld extends LitElement { } firstUpdated(): void { - // this.drawConnection(this.sldelements[0], this.sldelements[2]); + this.connectivityNodeElements.forEach(cn => { + const pathName = cn.element.getAttribute('pathName'); + this.equipmentElements + .filter(element => element.element.querySelector(`Terminal[connectivityNode="${pathName}"]`)) + .forEach(element => { + // All connected Conducting Equipments are here + if (element.pos.y != null && cn.pos.y != null && (element.pos.y > cn.pos.y)) { + this.drawConnection(cn.pos, element.pos) + } else { + this.drawConnection(element.pos, cn.pos) + } + }); + }); } /* diff --git a/src/editors/SLD/connectivity-node-sld.ts b/src/editors/SLD/connectivity-node-sld.ts index 771ed7ac2d..82ee896e59 100644 --- a/src/editors/SLD/connectivity-node-sld.ts +++ b/src/editors/SLD/connectivity-node-sld.ts @@ -18,7 +18,7 @@ export class ConnectivityNodeSld extends LitElement { } render(): TemplateResult { - return html`
CN
+ return html`

${this.name}

`; } From 88bbd0e92712de18653e9f455ca2e98d21284a95 Mon Sep 17 00:00:00 2001 From: Rob Tjalma Date: Sat, 30 Oct 2021 00:15:19 +0200 Subject: [PATCH 10/33] Added Connectivity Node icon --- src/editors/SLD/bay-sld.ts | 2 +- src/editors/SLD/connectivity-node-sld.ts | 56 --------------------- src/editors/Sld.ts | 1 - src/icons.ts | 11 ++++ src/zeroline/conducting-equipment-editor.ts | 22 +++++--- 5 files changed, 28 insertions(+), 64 deletions(-) delete mode 100644 src/editors/SLD/connectivity-node-sld.ts diff --git a/src/editors/SLD/bay-sld.ts b/src/editors/SLD/bay-sld.ts index 0c63fbb9e4..ba7b0941a7 100644 --- a/src/editors/SLD/bay-sld.ts +++ b/src/editors/SLD/bay-sld.ts @@ -208,7 +208,7 @@ export class BaySld extends LitElement { )} ${this.connectivityNodeElements.map( element => - html` + +`; + export const earthSwitchIcon = html`> = { @@ -35,10 +44,11 @@ const typeIcons: Partial> = { CTR: currentTransformerIcon, VTR: voltageTransformerIcon, ERS: earthSwitchIcon, + CN: connectivityNodeIcon }; export function typeIcon(condEq: Element): TemplateResult { - return typeIcons[typeStr(condEq)] ?? generalConductingEquipmentIcon; + return typeIcons[getType(condEq)] ?? generalConductingEquipmentIcon; } /** [[`SubstationEditor`]] subeditor for a `ConductingEquipment` element. */ From 490ed9cb30667f27e6697cc3ca78aeb72d960e3c Mon Sep 17 00:00:00 2001 From: Rob Tjalma Date: Sat, 30 Oct 2021 20:44:54 +0200 Subject: [PATCH 11/33] Small fixes --- src/editors/SLD/bay-sld.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/editors/SLD/bay-sld.ts b/src/editors/SLD/bay-sld.ts index ba7b0941a7..3ddfc3edfe 100644 --- a/src/editors/SLD/bay-sld.ts +++ b/src/editors/SLD/bay-sld.ts @@ -214,7 +214,7 @@ export class BaySld extends LitElement { ? element.pos.y : -element.pos.y!};" > - ` + ` )} Date: Sun, 31 Oct 2021 22:19:03 +0100 Subject: [PATCH 12/33] Added ConnectivityNode editor --- src/editors/SLD/bay-sld.ts | 4 +- src/open-scd.ts | 1 + src/zeroline/connectivity-node-editor.ts | 194 +++++++++++++++++++++++ 3 files changed, 197 insertions(+), 2 deletions(-) create mode 100644 src/zeroline/connectivity-node-editor.ts diff --git a/src/editors/SLD/bay-sld.ts b/src/editors/SLD/bay-sld.ts index 3ddfc3edfe..36cb59a65d 100644 --- a/src/editors/SLD/bay-sld.ts +++ b/src/editors/SLD/bay-sld.ts @@ -208,13 +208,13 @@ export class BaySld extends LitElement { )} ${this.connectivityNodeElements.map( element => - html` - ` + ` )} ` custom element is the main entry point of the * Open Substation Configuration Designer. */ diff --git a/src/zeroline/connectivity-node-editor.ts b/src/zeroline/connectivity-node-editor.ts new file mode 100644 index 0000000000..198f5d191b --- /dev/null +++ b/src/zeroline/connectivity-node-editor.ts @@ -0,0 +1,194 @@ +import { + css, + customElement, + html, + LitElement, + property, + TemplateResult, +} from 'lit-element'; + +import { startMove } from './foundation.js'; +import { newActionEvent, newWizardEvent } from '../foundation.js'; + +import { + circuitBreakerIcon, + connectivityNodeIcon, + currentTransformerIcon, + disconnectorIcon, + earthSwitchIcon, + generalConductingEquipmentIcon, + voltageTransformerIcon, +} from '../icons.js'; + +import { BayEditor } from './bay-editor.js'; +import { wizards } from '../wizards/wizard-library.js'; + +/** [[`SubstationEditor`]] subeditor for a `ConnectivityNode` element. */ +@customElement('connectivity-node-editor') +export class ConnectivityNodeEditor extends LitElement { + @property({ type: Element }) + element!: Element; + + @property({ type: Boolean }) + readonly = false; + + @property({ type: String }) + get name(): string { + return this.element.getAttribute('name') ?? ''; + } + + openEditWizard(): void { + const wizard = wizards['ConductingEquipment'].edit(this.element); + if (wizard) this.dispatchEvent(newWizardEvent(wizard)); + } + + /** Opens a [[`WizardDialog`]] for editing `LNode` connections. */ + openLNodeWizard(): void { + const wizard = wizards['LNode'].edit(this.element); + if (wizard) this.dispatchEvent(newWizardEvent(wizard)); + } + + remove(): void { + if (this.element) + this.dispatchEvent( + newActionEvent({ + old: { + parent: this.element.parentElement!, + element: this.element, + reference: this.element.nextSibling, + }, + }) + ); + } + + render(): TemplateResult { + return html` +
+ ${connectivityNodeIcon} + ${this.readonly + ? html`` + : html` + + + `} +
+

${this.name}

+ `; + } + + static styles = css` + #container { + color: var(--mdc-theme-on-surface); + width: 64px; + height: 64px; + margin: auto; + position: relative; + transition: all 200ms linear; + } + + #container:focus { + outline: none; + } + + #container > svg { + color: var(--mdc-theme-on-surface); + width: 64px; + height: 64px; + transition: transform 150ms linear, box-shadow 200ms linear; + outline-color: var(--mdc-theme-primary); + outline-style: solid; + outline-width: 0px; + } + + #container:focus > svg { + box-shadow: 0 8px 10px 1px rgba(0, 0, 0, 0.14), + 0 3px 14px 2px rgba(0, 0, 0, 0.12), 0 5px 5px -3px rgba(0, 0, 0, 0.2); + } + + #container:hover > svg { + outline: 2px dashed var(--mdc-theme-primary); + transition: transform 200ms linear, box-shadow 250ms linear; + } + + #container:focus-within > svg { + outline: 2px solid var(--mdc-theme-primary); + background: var(--mdc-theme-on-primary); + transform: scale(0.8); + transition: transform 200ms linear, box-shadow 250ms linear; + } + + .menu-item { + color: var(--mdc-theme-on-surface); + transition: transform 200ms cubic-bezier(0.4, 0, 0.2, 1), + opacity 200ms linear; + position: absolute; + top: 8px; + left: 8px; + pointer-events: none; + z-index: 1; + opacity: 0; + } + + #container:focus-within > .menu-item { + transition: transform 250ms cubic-bezier(0.4, 0, 0.2, 1), + opacity 250ms linear; + pointer-events: auto; + opacity: 1; + } + + #container:focus-within > .menu-item.up { + transform: translate(0px, -52px); + } + + #container:focus-within > .menu-item.down { + transform: translate(0px, 52px); + } + + #container:focus-within > .menu-item.right { + transform: translate(52px, 0px); + } + + #container:focus-within > .menu-item.left { + transform: translate(-52px, 0px); + } + + h4 { + color: var(--mdc-theme-on-surface); + font-family: 'Roboto', sans-serif; + font-weight: 300; + overflow: hidden; + white-space: nowrap; + text-overflow: ellipsis; + margin: 0px; + opacity: 1; + transition: opacity 200ms linear; + text-align: center; + } + + :host(.moving) #container, + :host(.moving) h4 { + opacity: 0.3; + } + `; +} From 6f27ed4e3d8c0e71021da7207de8a70da18f0f46 Mon Sep 17 00:00:00 2001 From: Rob Tjalma Date: Sun, 31 Oct 2021 22:45:51 +0100 Subject: [PATCH 13/33] Made SVG bigger of Bay --- src/editors/SLD/bay-sld.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/editors/SLD/bay-sld.ts b/src/editors/SLD/bay-sld.ts index 36cb59a65d..5385cc62e0 100644 --- a/src/editors/SLD/bay-sld.ts +++ b/src/editors/SLD/bay-sld.ts @@ -219,9 +219,9 @@ export class BaySld extends LitElement {
`; From 59d442f4481119a8f2b97c9b5552fcad6e62b475 Mon Sep 17 00:00:00 2001 From: Rob Tjalma Date: Mon, 1 Nov 2021 16:27:25 +0100 Subject: [PATCH 14/33] Added better ConnectivityNode logo --- src/editors/SLD/bay-sld.ts | 2 +- src/icons.ts | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/editors/SLD/bay-sld.ts b/src/editors/SLD/bay-sld.ts index 5385cc62e0..795376b8d3 100644 --- a/src/editors/SLD/bay-sld.ts +++ b/src/editors/SLD/bay-sld.ts @@ -259,8 +259,8 @@ export class BaySld extends LitElement { .element { width: 50px; height: 50px; - outline: solid; } + .element:hover { outline: 2px dashed var(--mdc-theme-primary); transition: transform 200ms linear, box-shadow 250ms linear; diff --git a/src/icons.ts b/src/icons.ts index 37edea309e..f4bc691c22 100644 --- a/src/icons.ts +++ b/src/icons.ts @@ -460,9 +460,9 @@ export const connectivityNodeIcon = html` - + `; export const earthSwitchIcon = html` Date: Mon, 1 Nov 2021 16:38:39 +0100 Subject: [PATCH 15/33] Made placing elements prettier --- src/editors/SLD/bay-sld.ts | 40 ++++++++++++++--------------- src/editors/SLD/voltagelevel-sld.ts | 6 ++--- 2 files changed, 23 insertions(+), 23 deletions(-) diff --git a/src/editors/SLD/bay-sld.ts b/src/editors/SLD/bay-sld.ts index 795376b8d3..1d727eb26f 100644 --- a/src/editors/SLD/bay-sld.ts +++ b/src/editors/SLD/bay-sld.ts @@ -137,16 +137,16 @@ export class BaySld extends LitElement { */ drawConnection(e1: Point, e2: Point): void { const shapeA = { - left: (2 * e1.x! - 2) * 50, - top: (2 * e1.y! - 2) * 50, - width: 50, - height: 50, + left: (2 * e1.x! - 2) * 64, + top: (2 * e1.y! - 2) * 64, + width: 64, + height: 64, }; const shapeB = { - left: (2 * e2.x! - 2) * 50, - top: (2 * e2.y! - 2) * 50, - width: 50, - height: 50, + left: (2 * e2.x! - 2) * 64, + top: (2 * e2.y! - 2) * 64, + width: 64, + height: 64, }; const path = OrthogonalConnector.route({ @@ -191,9 +191,9 @@ export class BaySld extends LitElement {
${this.equipmentElements.map( element => @@ -219,9 +219,9 @@ export class BaySld extends LitElement {
`; @@ -230,8 +230,8 @@ export class BaySld extends LitElement { static styles = css` .container { display: grid; - grid-gap: 50px; - padding: 50px; + grid-gap: 64px; + padding: 64px; } .container:hover { @@ -246,19 +246,19 @@ export class BaySld extends LitElement { .unconnectedcontainer { display: grid; - grid-gap: 50px; + grid-gap: 64px; box-sizing: border-box; - grid-template-columns: repeat(auto-fit, minmax(50px, 50px)); + grid-template-columns: repeat(auto-fit, minmax(64px, 64px)); } .sldcontainer { display: grid; - grid-gap: 50px; + grid-gap: 64px; } .element { - width: 50px; - height: 50px; + width: 64px; + height: 64px; } .element:hover { diff --git a/src/editors/SLD/voltagelevel-sld.ts b/src/editors/SLD/voltagelevel-sld.ts index cf99ee3d3f..2c3eb6d055 100644 --- a/src/editors/SLD/voltagelevel-sld.ts +++ b/src/editors/SLD/voltagelevel-sld.ts @@ -46,7 +46,7 @@ export class SubstationSld extends LitElement {
${this.busbars.map(busbar => html``)}
@@ -61,8 +61,8 @@ export class SubstationSld extends LitElement { static styles = css` .container { display: grid; - grip-gap: 50px; - padding: 50px; + grip-gap: 64px; + padding: 64px; } .container:hover { From 0ff3bde433039207a1f74609d15ddf23a7df27f8 Mon Sep 17 00:00:00 2001 From: Rob Tjalma Date: Mon, 1 Nov 2021 20:58:40 +0100 Subject: [PATCH 16/33] Added BusBar icon --- src/editors/SLD/busbar-sld.ts | 21 ++++++++++++++------- src/icons.ts | 11 +++++++++++ 2 files changed, 25 insertions(+), 7 deletions(-) diff --git a/src/editors/SLD/busbar-sld.ts b/src/editors/SLD/busbar-sld.ts index 45ccf2fd73..72e96ca4dc 100644 --- a/src/editors/SLD/busbar-sld.ts +++ b/src/editors/SLD/busbar-sld.ts @@ -6,6 +6,7 @@ import { property, TemplateResult, } from 'lit-element'; +import { busBarIcon } from '../../icons'; @customElement('busbar-sld') export class BusBasSld extends LitElement { @@ -14,10 +15,8 @@ export class BusBasSld extends LitElement { render(): TemplateResult { return html`
- - ${this.busBarName} - - +

${this.busBarName}

+ ${busBarIcon}
`; } @@ -30,9 +29,17 @@ export class BusBasSld extends LitElement { width: 100%; } - .busbar svg line { - stroke: black; - stroke-width: 5; + h4 { + color: var(--mdc-theme-on-surface); + font-family: 'Roboto', sans-serif; + font-weight: 300; + overflow: hidden; + white-space: nowrap; + text-overflow: ellipsis; + margin: 0px; + opacity: 1; + transition: opacity 200ms linear; + text-align: left; } `; } diff --git a/src/icons.ts b/src/icons.ts index f4bc691c22..d183ac9bb4 100644 --- a/src/icons.ts +++ b/src/icons.ts @@ -465,6 +465,17 @@ export const connectivityNodeIcon = html` `; +export const busBarIcon = html` + +`; + export const earthSwitchIcon = html` Date: Tue, 2 Nov 2021 11:58:16 +0100 Subject: [PATCH 17/33] Made code a bit prettier --- src/editors/SLD/bay-sld.ts | 29 ++++++++++------ src/editors/SLD/busbar-sld.ts | 7 ++-- src/editors/SLD/substation-sld.ts | 25 ++++++++++++-- src/editors/SLD/voltagelevel-sld.ts | 52 ++++++++++++++++++++--------- 4 files changed, 81 insertions(+), 32 deletions(-) diff --git a/src/editors/SLD/bay-sld.ts b/src/editors/SLD/bay-sld.ts index 1d727eb26f..154660ce13 100644 --- a/src/editors/SLD/bay-sld.ts +++ b/src/editors/SLD/bay-sld.ts @@ -12,6 +12,9 @@ import { getChildElementsByTagName } from '../../foundation.js'; import { getPosition, Point, SldElement } from './foundation.js'; import { OrthogonalConnector } from './ortho-connector.js'; +/** + * SLD component of a Bay component. + */ @customElement('bay-sld') export class BaySld extends LitElement { @property() @@ -21,9 +24,9 @@ export class BaySld extends LitElement { @property({ type: Boolean }) downer = false; - @query('#svg') svg!: HTMLElement; + @query('#bayRoutingSvg') bayRoutingSvg!: HTMLElement; - /* + /** * Get all the unconnected Nodes of this particular Bay. */ @property() @@ -39,7 +42,7 @@ export class BaySld extends LitElement { ); } - /* + /** * Get all the Equipment Nodes of this particular Bay. */ @property() @@ -61,7 +64,7 @@ export class BaySld extends LitElement { return elements; } - /* + /** * Get all the Connectivity Nodes of this particular Bay. */ @property() @@ -95,8 +98,8 @@ export class BaySld extends LitElement { return sldelements; } - /* - * The max x and y of this particular bay. + /** + * The max x and y of this particular Bay. */ get xMax(): number { const posXx = ( @@ -117,6 +120,9 @@ export class BaySld extends LitElement { } firstUpdated(): void { + /* + * Drawing routes between ConnectivityNodes and ConductingEquipments. + */ this.connectivityNodeElements.forEach(cn => { const pathName = cn.element.getAttribute('pathName'); this.equipmentElements @@ -132,8 +138,8 @@ export class BaySld extends LitElement { }); } - /* - * Draw an auto-route from 1 Point to another. + /** + * Draw a route from 1 Point to another. */ drawConnection(e1: Point, e2: Point): void { const shapeA = { @@ -177,7 +183,7 @@ export class BaySld extends LitElement { line.setAttribute('stroke', 'currentColor'); line.setAttribute('stroke-width', '1.5'); - this.svg.appendChild(line); + this.bayRoutingSvg.appendChild(line); } render(): TemplateResult { @@ -210,6 +216,7 @@ export class BaySld extends LitElement { element => html` -

${this.busBarName}

+

${this.element.getAttribute('name')}

${busBarIcon} `; } diff --git a/src/editors/SLD/substation-sld.ts b/src/editors/SLD/substation-sld.ts index 4d42ef2046..9f9479731f 100644 --- a/src/editors/SLD/substation-sld.ts +++ b/src/editors/SLD/substation-sld.ts @@ -7,22 +7,35 @@ import { TemplateResult, } from 'lit-element'; +/** + * SLD component of a Substation component. + */ @customElement('substation-sld') export class SubstationSld extends LitElement { @property() element!: Element; + @property() - get voltagelevels(): Element[] { + get voltageLevels(): Element[] { return Array.from(this.element.getElementsByTagName('VoltageLevel')); } render(): TemplateResult { return html`
- ${this.voltagelevels.map( + ${this.voltageLevels.map( voltagelevel => - html`` + html` + ` )} +
`; } @@ -41,5 +54,11 @@ export class SubstationSld extends LitElement { div { display: flex; } + + #substationRoutingSvg { + display: flex; + position: absolute; + z-index: -5; + } `; } diff --git a/src/editors/SLD/voltagelevel-sld.ts b/src/editors/SLD/voltagelevel-sld.ts index 2c3eb6d055..f1dd02878f 100644 --- a/src/editors/SLD/voltagelevel-sld.ts +++ b/src/editors/SLD/voltagelevel-sld.ts @@ -10,31 +10,45 @@ import { import { getChildElementsByTagName } from '../../foundation.js'; import { getPosition, SldElement } from './foundation.js'; -function isBusBar(bay: Element): boolean { - return ( - bay.children.length === 1 && bay.children[0].tagName === 'ConnectivityNode' - ); -} - +/** + * SLD component of a VoltageLevel component. + */ @customElement('voltagelevel-sld') -export class SubstationSld extends LitElement { +export class VoltageLevelSld extends LitElement { @property() element!: Element; + + /** + * Checking of a Bay is a BusBar or not. + * @param bay The bay to check. + * @returns Is the Bay a BusBar or not. + */ + isBusBar(bay: Element): boolean { + return ( + bay.children.length === 1 && bay.children[0].tagName === 'ConnectivityNode' + ); + } + + /** + * Get all the BusBars from the VoltageLevel element. + */ @property() - @property() - get busbars(): SldElement[] { + get busBars(): SldElement[] { return getChildElementsByTagName(this.element, 'Bay') - .filter(bay => isBusBar(bay)) + .filter(bay => this.isBusBar(bay)) .map(bay => { const [x, y] = getPosition(bay); return { element: bay, pos: { x, y } }; }); } + /** + * Get all the regular Bays from the VoltageLevel element. + */ @property() - get feeders(): SldElement[] { + get bays(): SldElement[] { return getChildElementsByTagName(this.element, 'Bay') - .filter(bay => !isBusBar(bay)) + .filter(bay => !this.isBusBar(bay)) .map(bay => { const [x, y] = getPosition(bay); return { element: bay, pos: { x, y } }; @@ -46,13 +60,19 @@ export class SubstationSld extends LitElement {
- ${this.busbars.map(busbar => html``)} + ${this.busBars.map(busbar => html` + `)}
- ${this.feeders.map( - feeder => html`` + ${this.bays.map( + feeder => html` + ` )}
`; From 62e3220143853dfd2785ee87fdd2201e1f70be6b Mon Sep 17 00:00:00 2001 From: Rob Tjalma Date: Tue, 2 Nov 2021 19:18:21 +0100 Subject: [PATCH 18/33] Made code prettier --- src/editors/SLD/bay-sld.ts | 55 ++----------------------- src/editors/SLD/foundation.ts | 63 +++++++++++++++++++++++++++++ src/editors/SLD/substation-sld.ts | 32 +++++++++++---- src/editors/SLD/voltagelevel-sld.ts | 20 +++------ 4 files changed, 96 insertions(+), 74 deletions(-) diff --git a/src/editors/SLD/bay-sld.ts b/src/editors/SLD/bay-sld.ts index 154660ce13..0513e323a3 100644 --- a/src/editors/SLD/bay-sld.ts +++ b/src/editors/SLD/bay-sld.ts @@ -9,8 +9,7 @@ import { } from 'lit-element'; import { getChildElementsByTagName } from '../../foundation.js'; -import { getPosition, Point, SldElement } from './foundation.js'; -import { OrthogonalConnector } from './ortho-connector.js'; +import { drawConnection, getPosition, Point, SldElement } from './foundation.js'; /** * SLD component of a Bay component. @@ -130,62 +129,14 @@ export class BaySld extends LitElement { .forEach(element => { // All connected Conducting Equipments are here if (element.pos.y != null && cn.pos.y != null && (element.pos.y > cn.pos.y)) { - this.drawConnection(cn.pos, element.pos) + drawConnection(cn.pos, element.pos, this.bayRoutingSvg) } else { - this.drawConnection(element.pos, cn.pos) + drawConnection(element.pos, cn.pos, this.bayRoutingSvg) } }); }); } - /** - * Draw a route from 1 Point to another. - */ - drawConnection(e1: Point, e2: Point): void { - const shapeA = { - left: (2 * e1.x! - 2) * 64, - top: (2 * e1.y! - 2) * 64, - width: 64, - height: 64, - }; - const shapeB = { - left: (2 * e2.x! - 2) * 64, - top: (2 * e2.y! - 2) * 64, - width: 64, - height: 64, - }; - - const path = OrthogonalConnector.route({ - pointA: { shape: shapeA, side: 'bottom', distance: 0.5 }, - pointB: { shape: shapeB, side: 'top', distance: 0.5 }, - shapeMargin: 10, - globalBoundsMargin: 25, - globalBounds: { - left: 0, - top: 0, - width: 10000, - height: 10000, - }, - }); - - const line = document.createElementNS('http://www.w3.org/2000/svg', 'path'); - let d = ''; - path.forEach(({ x, y }, index) => { - if (index === 0) { - d = d + `M ${x} ${y}`; - } else { - d = d + ` L ${x} ${y}`; - } - }); - - line.setAttribute('d', d); - line.setAttribute('fill', 'transparent'); - line.setAttribute('stroke', 'currentColor'); - line.setAttribute('stroke-width', '1.5'); - - this.bayRoutingSvg.appendChild(line); - } - render(): TemplateResult { return html`
diff --git a/src/editors/SLD/foundation.ts b/src/editors/SLD/foundation.ts index c3969e0adb..385eefb586 100644 --- a/src/editors/SLD/foundation.ts +++ b/src/editors/SLD/foundation.ts @@ -1,3 +1,5 @@ +import { OrthogonalConnector } from "./ortho-connector"; + export type GraphNode = { element: Element; mass: number; @@ -231,3 +233,64 @@ export function updateEdges(nodes: GraphNode[], edges: GraphEdge[]): void { } }); } +/** + * Checking of a Bay is a BusBar or not. + * @param bay The bay to check. + * @returns Is the Bay a BusBar or not. + */ +export function isBusBar(bay: Element): boolean { + return ( + bay.children.length === 1 && bay.children[0].tagName === 'ConnectivityNode' + ); +} + +/** + * Draw a connection from the first point to the second point. + * @param firstPoint The first point of this connection. + * @param secondPoint The second point of this connection. + * @param svgToDrawOn The SVG to draw the route on. + */ +export function drawConnection(firstPoint: Point, secondPoint: Point, svgToDrawOn: HTMLElement): void { + const shapeA = { + left: (2 * firstPoint.x! - 2) * 64, + top: (2 * firstPoint.y! - 2) * 64, + width: 64, + height: 64, + }; + const shapeB = { + left: (2 * secondPoint.x! - 2) * 64, + top: (2 * secondPoint.y! - 2) * 64, + width: 64, + height: 64, + }; + + const path = OrthogonalConnector.route({ + pointA: { shape: shapeA, side: 'bottom', distance: 0.5 }, + pointB: { shape: shapeB, side: 'top', distance: 0.5 }, + shapeMargin: 10, + globalBoundsMargin: 25, + globalBounds: { + left: 0, + top: 0, + width: 10000, + height: 10000, + }, + }); + + const line = document.createElementNS('http://www.w3.org/2000/svg', 'path'); + let d = ''; + path.forEach(({ x, y }, index) => { + if (index === 0) { + d = d + `M ${x} ${y}`; + } else { + d = d + ` L ${x} ${y}`; + } + }); + + line.setAttribute('d', d); + line.setAttribute('fill', 'transparent'); + line.setAttribute('stroke', 'currentColor'); + line.setAttribute('stroke-width', '1.5'); + + svgToDrawOn.appendChild(line); +} diff --git a/src/editors/SLD/substation-sld.ts b/src/editors/SLD/substation-sld.ts index 9f9479731f..c397ff7bf7 100644 --- a/src/editors/SLD/substation-sld.ts +++ b/src/editors/SLD/substation-sld.ts @@ -4,6 +4,7 @@ import { html, LitElement, property, + query, TemplateResult, } from 'lit-element'; @@ -20,6 +21,21 @@ export class SubstationSld extends LitElement { return Array.from(this.element.getElementsByTagName('VoltageLevel')); } + // firstUpdated(): void { + // this.busBars.forEach(busbar => { + // const pathName = busbar.element.getElementsByTagName('ConnectivityNode')[0].getAttribute('pathName'); + // this.bays.forEach(bay => { + // Array.from(bay.element.getElementsByTagName('ConductingEquipment')) + // .filter(eq => eq.querySelector(`Terminal[connectivityNode="${pathName}"]`)) + // .forEach(eq => { + // const [x, y] = getPosition(eq); + // console.log(busbar); + // drawConnection(busbar.pos,{x,y}, this.routingSvg); + // }) + // }) + // }) + // } + render(): TemplateResult { return html`
@@ -29,14 +45,14 @@ export class SubstationSld extends LitElement { .element=${voltagelevel}> ` )} -
+
`; } @@ -55,7 +71,7 @@ export class SubstationSld extends LitElement { display: flex; } - #substationRoutingSvg { + #routingSvg { display: flex; position: absolute; z-index: -5; diff --git a/src/editors/SLD/voltagelevel-sld.ts b/src/editors/SLD/voltagelevel-sld.ts index f1dd02878f..fec792f89c 100644 --- a/src/editors/SLD/voltagelevel-sld.ts +++ b/src/editors/SLD/voltagelevel-sld.ts @@ -4,11 +4,12 @@ import { html, LitElement, property, + query, TemplateResult, } from 'lit-element'; import { getChildElementsByTagName } from '../../foundation.js'; -import { getPosition, SldElement } from './foundation.js'; +import { drawConnection, getPosition, isBusBar, SldElement } from './foundation.js'; /** * SLD component of a VoltageLevel component. @@ -17,17 +18,8 @@ import { getPosition, SldElement } from './foundation.js'; export class VoltageLevelSld extends LitElement { @property() element!: Element; - - /** - * Checking of a Bay is a BusBar or not. - * @param bay The bay to check. - * @returns Is the Bay a BusBar or not. - */ - isBusBar(bay: Element): boolean { - return ( - bay.children.length === 1 && bay.children[0].tagName === 'ConnectivityNode' - ); - } + + @query('#routingSvg') routingSvg!: HTMLElement; /** * Get all the BusBars from the VoltageLevel element. @@ -35,7 +27,7 @@ export class VoltageLevelSld extends LitElement { @property() get busBars(): SldElement[] { return getChildElementsByTagName(this.element, 'Bay') - .filter(bay => this.isBusBar(bay)) + .filter(bay => isBusBar(bay)) .map(bay => { const [x, y] = getPosition(bay); return { element: bay, pos: { x, y } }; @@ -48,7 +40,7 @@ export class VoltageLevelSld extends LitElement { @property() get bays(): SldElement[] { return getChildElementsByTagName(this.element, 'Bay') - .filter(bay => !this.isBusBar(bay)) + .filter(bay => !isBusBar(bay)) .map(bay => { const [x, y] = getPosition(bay); return { element: bay, pos: { x, y } }; From 2e1b26a4881329d9201bc25d245f20f4ff36350e Mon Sep 17 00:00:00 2001 From: Rob Tjalma Date: Wed, 3 Nov 2021 18:40:47 +0100 Subject: [PATCH 19/33] First full rebuild attempt --- src/editors/SLD/bay-sld.ts | 130 ++++++++++++++-------------- src/editors/SLD/substation-sld.ts | 95 +++++++++++++------- src/editors/SLD/voltagelevel-sld.ts | 55 +++++++----- 3 files changed, 160 insertions(+), 120 deletions(-) diff --git a/src/editors/SLD/bay-sld.ts b/src/editors/SLD/bay-sld.ts index 0513e323a3..322e3730fc 100644 --- a/src/editors/SLD/bay-sld.ts +++ b/src/editors/SLD/bay-sld.ts @@ -16,14 +16,24 @@ import { drawConnection, getPosition, Point, SldElement } from './foundation.js' */ @customElement('bay-sld') export class BaySld extends LitElement { + + /** + * Property holding the Bay XML element. + */ @property() element!: Element; - // Is this Bay builded down or up? + /** + * True if this Bay is built up downwards. + */ @property({ type: Boolean }) - downer = false; - - @query('#bayRoutingSvg') bayRoutingSvg!: HTMLElement; + downer = true; + + /** + * Holding a reference to the Substation SVG to draw routes between elements on. + */ + @property() + svg!: HTMLElement; /** * Get all the unconnected Nodes of this particular Bay. @@ -119,39 +129,44 @@ export class BaySld extends LitElement { } firstUpdated(): void { - /* - * Drawing routes between ConnectivityNodes and ConductingEquipments. - */ - this.connectivityNodeElements.forEach(cn => { - const pathName = cn.element.getAttribute('pathName'); - this.equipmentElements - .filter(element => element.element.querySelector(`Terminal[connectivityNode="${pathName}"]`)) - .forEach(element => { - // All connected Conducting Equipments are here - if (element.pos.y != null && cn.pos.y != null && (element.pos.y > cn.pos.y)) { - drawConnection(cn.pos, element.pos, this.bayRoutingSvg) - } else { - drawConnection(element.pos, cn.pos, this.bayRoutingSvg) - } - }); - }); + // this.connectivityNodeElements.forEach(cn => { + // const pathName = cn.element.getAttribute('pathName'); + // this.equipmentElements + // .filter(element => element.element.querySelector(`Terminal[connectivityNode="${pathName}"]`)) + // .forEach(element => { + // // All connected Conducting Equipments are here + // if (element.pos.y != null && cn.pos.y != null && (element.pos.y > cn.pos.y)) { + // drawConnection(cn.pos, element.pos, this.svg) + // } else { + // drawConnection(element.pos, cn.pos, this.svg) + // } + // }); + // }); } - render(): TemplateResult { - return html`
-
+ /** + + + + + */ + + render(): TemplateResult { + return html`
+
${this.equipmentElements.map( element => html` ` )} - +
`; } static styles = css` - .container { - display: grid; - grid-gap: 64px; - padding: 64px; - } - - .container:hover { - outline: 2px dashed var(--mdc-theme-primary); - transition: transform 200ms linear, box-shadow 250ms linear; - } - - .container:focus-within { - outline: 2px solid var(--mdc-theme-primary); - transition: transform 200ms linear, box-shadow 250ms linear; - } - .unconnectedcontainer { display: grid; grid-gap: 64px; @@ -209,9 +202,8 @@ export class BaySld extends LitElement { grid-template-columns: repeat(auto-fit, minmax(64px, 64px)); } - .sldcontainer { + div { display: grid; - grid-gap: 64px; } .element { @@ -223,14 +215,22 @@ export class BaySld extends LitElement { outline: 2px dashed var(--mdc-theme-primary); transition: transform 200ms linear, box-shadow 250ms linear; } - - #canvas { - position: absolute; - } - - #bayRoutingSvg { - position: absolute; - z-index: -5; - } `; + + /** + * + this.connectivityNodeElements.forEach(cn => { + const pathName = cn.element.getAttribute('pathName'); + this.equipmentElements + .filter(element => element.element.querySelector(`Terminal[connectivityNode="${pathName}"]`)) + .forEach(element => { + // All connected Conducting Equipments are here + if (element.pos.y != null && cn.pos.y != null && (element.pos.y > cn.pos.y)) { + drawConnection(cn.pos, element.pos, this.bayRoutingSvg) + } else { + drawConnection(element.pos, cn.pos, this.bayRoutingSvg) + } + }); + }); + */ } diff --git a/src/editors/SLD/substation-sld.ts b/src/editors/SLD/substation-sld.ts index c397ff7bf7..c7d6650bdd 100644 --- a/src/editors/SLD/substation-sld.ts +++ b/src/editors/SLD/substation-sld.ts @@ -7,52 +7,58 @@ import { query, TemplateResult, } from 'lit-element'; +import { getPosition } from './foundation'; +import { VoltageLevelSld } from './voltagelevel-sld'; /** * SLD component of a Substation component. */ @customElement('substation-sld') export class SubstationSld extends LitElement { + + /** + * Property holding the Substation XML element. + */ @property() element!: Element; + + /** + * Holding a reference to the Substation SVG to draw routes between elements on. + */ + @query('#svg') svg!: HTMLElement; @property() get voltageLevels(): Element[] { return Array.from(this.element.getElementsByTagName('VoltageLevel')); } - - // firstUpdated(): void { - // this.busBars.forEach(busbar => { - // const pathName = busbar.element.getElementsByTagName('ConnectivityNode')[0].getAttribute('pathName'); - // this.bays.forEach(bay => { - // Array.from(bay.element.getElementsByTagName('ConductingEquipment')) - // .filter(eq => eq.querySelector(`Terminal[connectivityNode="${pathName}"]`)) - // .forEach(eq => { - // const [x, y] = getPosition(eq); - // console.log(busbar); - // drawConnection(busbar.pos,{x,y}, this.routingSvg); - // }) - // }) - // }) - // } + + firstUpdated(): void { + // Pass the Substation SVG to all VoltageLevels + this.shadowRoot!.querySelectorAll("voltagelevel-sld").forEach(voltageLevel => { + const castedSldElement = (voltageLevel); + castedSldElement.svg = this.svg; + }); + } render(): TemplateResult { - return html`
-
+ return html`
+
${this.voltageLevels.map( - voltagelevel => - html` - ` - )} + voltagelevel => { + const [x, y] = getPosition(voltagelevel); + return html` + ` + })} +
-
`; } @@ -68,13 +74,38 @@ export class SubstationSld extends LitElement { } div { - display: flex; + display: grid; + padding: 64px; } - #routingSvg { - display: flex; + #svg { position: absolute; z-index: -5; } `; + + /** + * + // this.voltageLevels.forEach(voltageLevel => { + // getChildElementsByTagName(voltageLevel, 'Bay') + // .filter(bay => isBusBar(bay)) + // .forEach(busbar => { + // const pathName = busbar.getElementsByTagName('ConnectivityNode')[0].getAttribute('pathName'); + + // getChildElementsByTagName(voltageLevel, 'Bay') + // .filter(bay => !isBusBar(bay)) + // .forEach(bay => { + // Array.from(bay.getElementsByTagName('ConductingEquipment')) + // .filter(eq => eq.querySelector(`Terminal[connectivityNode="${pathName}"]`)) + // .forEach(eq => { + // const [x, y] = getPosition(eq); + // console.log({x, y}) + + // drawConnection({x: parseInt(busbar.getAttribute('sxy:x')!), y: parseInt(busbar.getAttribute('sxy:y')!)}, {x, y}, this.routingSvg); + // }) + // }) + // }) + // }) + // drawConnection({x:4, y:1}, {x:4, y:3}, this.routingSvg) + */ } diff --git a/src/editors/SLD/voltagelevel-sld.ts b/src/editors/SLD/voltagelevel-sld.ts index fec792f89c..d5b306bf66 100644 --- a/src/editors/SLD/voltagelevel-sld.ts +++ b/src/editors/SLD/voltagelevel-sld.ts @@ -9,6 +9,7 @@ import { } from 'lit-element'; import { getChildElementsByTagName } from '../../foundation.js'; +import { BaySld } from './bay-sld.js'; import { drawConnection, getPosition, isBusBar, SldElement } from './foundation.js'; /** @@ -16,10 +17,18 @@ import { drawConnection, getPosition, isBusBar, SldElement } from './foundation. */ @customElement('voltagelevel-sld') export class VoltageLevelSld extends LitElement { + + /** + * Property holding the VoltageLevel XML element. + */ @property() element!: Element; - @query('#routingSvg') routingSvg!: HTMLElement; + /** + * Holding a reference to the Substation SVG to draw routes between elements on. + */ + @property() + svg!: HTMLElement; /** * Get all the BusBars from the VoltageLevel element. @@ -47,21 +56,27 @@ export class VoltageLevelSld extends LitElement { }); } + firstUpdated(): void { + // Pass the Substation SVG to all Bays + this.shadowRoot!.querySelectorAll("bay-sld").forEach(bay => { + const castedSldElement = (bay); + castedSldElement.svg = this.svg; + }); + } + render(): TemplateResult { - return html`
-
-
- ${this.busBars.map(busbar => html` - `)} -
-
- ${this.bays.map( - feeder => html` +
+ ${this.busBars.map(busbar => + html` + ` + )} + ${this.bays.map(bay => + html` downer > ` @@ -71,12 +86,6 @@ export class VoltageLevelSld extends LitElement { } static styles = css` - .container { - display: grid; - grip-gap: 64px; - padding: 64px; - } - .container:hover { outline: 2px dashed var(--mdc-theme-primary); transition: transform 200ms linear, box-shadow 250ms linear; @@ -87,8 +96,8 @@ export class VoltageLevelSld extends LitElement { transition: transform 200ms linear, box-shadow 250ms linear; } - .container.bay { - display: flex; + div { + display: grid; } `; } From 625ae052d64f276e1239d3a4db89d648330cb0be Mon Sep 17 00:00:00 2001 From: Rob Tjalma Date: Thu, 4 Nov 2021 00:16:02 +0100 Subject: [PATCH 20/33] Right before implementing routing again --- src/editors/SLD/bay-sld.ts | 55 ++++++++++++++++------------- src/editors/SLD/foundation.ts | 35 ++++++++++++------ src/editors/SLD/substation-sld.ts | 8 ++--- src/editors/SLD/voltagelevel-sld.ts | 23 ++++++------ src/icons.ts | 4 +-- 5 files changed, 72 insertions(+), 53 deletions(-) diff --git a/src/editors/SLD/bay-sld.ts b/src/editors/SLD/bay-sld.ts index 322e3730fc..b2515d546b 100644 --- a/src/editors/SLD/bay-sld.ts +++ b/src/editors/SLD/bay-sld.ts @@ -9,25 +9,19 @@ import { } from 'lit-element'; import { getChildElementsByTagName } from '../../foundation.js'; -import { drawConnection, getPosition, Point, SldElement } from './foundation.js'; +import { drawConnection, ElementPosition, getPosition, Point, SldElement } from './foundation.js'; /** * SLD component of a Bay component. */ @customElement('bay-sld') -export class BaySld extends LitElement { +export class BaySld extends LitElement implements ElementPosition { /** * Property holding the Bay XML element. */ @property() element!: Element; - - /** - * True if this Bay is built up downwards. - */ - @property({ type: Boolean }) - downer = true; /** * Holding a reference to the Substation SVG to draw routes between elements on. @@ -35,10 +29,24 @@ export class BaySld extends LitElement { @property() svg!: HTMLElement; + @property() + fullParentOffset!: Point + + get fullOffset(): Point { + const {x, y} = getPosition(this.element); + // Extract 1 because SLD is 1-based, grid is 0-based. + // Also, add offset from parent. + return {x: (x! - 1) + this.fullParentOffset.x!, y: (y! - 1) + this.fullParentOffset.y!}; + } + + /** + * True if this Bay is built up downwards. + */ + downer = true; + /** * Get all the unconnected Nodes of this particular Bay. */ - @property() get unconnectedElements(): Element[] { return getChildElementsByTagName( this.element, @@ -54,7 +62,6 @@ export class BaySld extends LitElement { /** * Get all the Equipment Nodes of this particular Bay. */ - @property() get equipmentElements(): SldElement[] { const elements: SldElement[] = []; @@ -66,7 +73,7 @@ export class BaySld extends LitElement { ).length !== 0 ) .forEach(child => { - const [x, y] = getPosition(child); + const {x, y} = getPosition(child); elements.push({ element: child, pos: { x, y } }); }); @@ -76,7 +83,6 @@ export class BaySld extends LitElement { /** * Get all the Connectivity Nodes of this particular Bay. */ - @property() get connectivityNodeElements(): SldElement[] { const sldelements: SldElement[] = []; @@ -129,19 +135,18 @@ export class BaySld extends LitElement { } firstUpdated(): void { - // this.connectivityNodeElements.forEach(cn => { - // const pathName = cn.element.getAttribute('pathName'); - // this.equipmentElements - // .filter(element => element.element.querySelector(`Terminal[connectivityNode="${pathName}"]`)) - // .forEach(element => { - // // All connected Conducting Equipments are here - // if (element.pos.y != null && cn.pos.y != null && (element.pos.y > cn.pos.y)) { - // drawConnection(cn.pos, element.pos, this.svg) - // } else { - // drawConnection(element.pos, cn.pos, this.svg) - // } - // }); - // }); + this.connectivityNodeElements.forEach(cn => { + const pathName = cn.element.getAttribute('pathName'); + this.equipmentElements + .filter(element => element.element.querySelector(`Terminal[connectivityNode="${pathName}"]`)) + .forEach(element => { + if (element.pos.y != null && cn.pos.y != null && (element.pos.y > cn.pos.y)) { + // drawConnection(cn.pos, element.pos, this.fullOffset, this.svg) + } else { + // drawConnection(element.pos, cn.pos, this.fullOffset, this.svg) + } + }); + }); } /** diff --git a/src/editors/SLD/foundation.ts b/src/editors/SLD/foundation.ts index 385eefb586..7b595d6e19 100644 --- a/src/editors/SLD/foundation.ts +++ b/src/editors/SLD/foundation.ts @@ -33,7 +33,14 @@ export interface SldElement { pos: Point; } -export function getPosition(element: Element): (number | undefined)[] { +/** + * Defining specific method for getting the element's full offset. + */ +export interface ElementPosition { + get fullOffset(): Point +} + +export function getPosition(element: Element): Point { const xAttr = element.getAttributeNS( 'http://www.iec.ch/61850/2003/SCLcoordinates', 'x' @@ -43,10 +50,10 @@ export function getPosition(element: Element): (number | undefined)[] { 'y' ); - return [ - xAttr ? parseInt(xAttr) : undefined, - yAttr ? parseInt(yAttr) : undefined, - ]; + return { + x: xAttr ? parseInt(xAttr) : undefined, + y: yAttr ? parseInt(yAttr) : undefined, + } } function getTerminals(connectivityNode: Element | null | undefined): Element[] { @@ -250,16 +257,24 @@ export function isBusBar(bay: Element): boolean { * @param secondPoint The second point of this connection. * @param svgToDrawOn The SVG to draw the route on. */ -export function drawConnection(firstPoint: Point, secondPoint: Point, svgToDrawOn: HTMLElement): void { +export function drawConnection(firstPoint: Point, secondPoint: Point, fullOffset: Point, svgToDrawOn: HTMLElement): void { + console.log('tekenen!'); + console.log(firstPoint.x!) + console.log(firstPoint.y!) + console.log(secondPoint.x!) + console.log(secondPoint.y!) + console.log(fullOffset.x!) + console.log(fullOffset.y!) + const shapeA = { - left: (2 * firstPoint.x! - 2) * 64, - top: (2 * firstPoint.y! - 2) * 64, + left: (firstPoint.x! + fullOffset.x!) * 64, + top: (firstPoint.y! + fullOffset.y!) * 64, width: 64, height: 64, }; const shapeB = { - left: (2 * secondPoint.x! - 2) * 64, - top: (2 * secondPoint.y! - 2) * 64, + left: (secondPoint.x! + fullOffset.x!) * 64, + top: (secondPoint.y! + fullOffset.y!) * 64, width: 64, height: 64, }; diff --git a/src/editors/SLD/substation-sld.ts b/src/editors/SLD/substation-sld.ts index c7d6650bdd..7bc4ae6682 100644 --- a/src/editors/SLD/substation-sld.ts +++ b/src/editors/SLD/substation-sld.ts @@ -27,17 +27,13 @@ export class SubstationSld extends LitElement { */ @query('#svg') svg!: HTMLElement; - @property() get voltageLevels(): Element[] { return Array.from(this.element.getElementsByTagName('VoltageLevel')); } firstUpdated(): void { // Pass the Substation SVG to all VoltageLevels - this.shadowRoot!.querySelectorAll("voltagelevel-sld").forEach(voltageLevel => { - const castedSldElement = (voltageLevel); - castedSldElement.svg = this.svg; - }); + this.shadowRoot!.querySelectorAll("voltagelevel-sld").forEach(voltageLevel => ((voltageLevel)).svg = this.svg); } render(): TemplateResult { @@ -45,7 +41,7 @@ export class SubstationSld extends LitElement {
${this.voltageLevels.map( voltagelevel => { - const [x, y] = getPosition(voltagelevel); + const {x, y} = getPosition(voltagelevel); return html` diff --git a/src/editors/SLD/voltagelevel-sld.ts b/src/editors/SLD/voltagelevel-sld.ts index d5b306bf66..062a394663 100644 --- a/src/editors/SLD/voltagelevel-sld.ts +++ b/src/editors/SLD/voltagelevel-sld.ts @@ -10,13 +10,13 @@ import { import { getChildElementsByTagName } from '../../foundation.js'; import { BaySld } from './bay-sld.js'; -import { drawConnection, getPosition, isBusBar, SldElement } from './foundation.js'; +import { ElementPosition, getPosition, isBusBar, Point, SldElement } from './foundation.js'; /** * SLD component of a VoltageLevel component. */ @customElement('voltagelevel-sld') -export class VoltageLevelSld extends LitElement { +export class VoltageLevelSld extends LitElement implements ElementPosition{ /** * Property holding the VoltageLevel XML element. @@ -30,15 +30,21 @@ export class VoltageLevelSld extends LitElement { @property() svg!: HTMLElement; + get fullOffset(): Point { + const {x, y} = getPosition(this.element); + // Extract 1 because SLD is 1-based, grid is 0-based. + // Also, add offset from parent. + return {x: x! - 1, y: y! - 1}; + } + /** * Get all the BusBars from the VoltageLevel element. */ - @property() get busBars(): SldElement[] { return getChildElementsByTagName(this.element, 'Bay') .filter(bay => isBusBar(bay)) .map(bay => { - const [x, y] = getPosition(bay); + const {x, y} = getPosition(bay); return { element: bay, pos: { x, y } }; }); } @@ -46,22 +52,18 @@ export class VoltageLevelSld extends LitElement { /** * Get all the regular Bays from the VoltageLevel element. */ - @property() get bays(): SldElement[] { return getChildElementsByTagName(this.element, 'Bay') .filter(bay => !isBusBar(bay)) .map(bay => { - const [x, y] = getPosition(bay); + const {x, y} = getPosition(bay); return { element: bay, pos: { x, y } }; }); } firstUpdated(): void { // Pass the Substation SVG to all Bays - this.shadowRoot!.querySelectorAll("bay-sld").forEach(bay => { - const castedSldElement = (bay); - castedSldElement.svg = this.svg; - }); + this.shadowRoot!.querySelectorAll("bay-sld").forEach(bay => ((bay)).svg = this.svg); } render(): TemplateResult { @@ -76,6 +78,7 @@ export class VoltageLevelSld extends LitElement { ${this.bays.map(bay => html` downer > diff --git a/src/icons.ts b/src/icons.ts index d183ac9bb4..460260f439 100644 --- a/src/icons.ts +++ b/src/icons.ts @@ -459,10 +459,10 @@ export const connectivityNodeIcon = html` - + `; export const busBarIcon = html` From 938597979778da74444065bdbce17d55d8599d2e Mon Sep 17 00:00:00 2001 From: Rob Tjalma Date: Thu, 4 Nov 2021 13:58:00 +0100 Subject: [PATCH 21/33] Added routing --- src/editors/SLD/bay-sld.ts | 38 +++++------------------------ src/editors/SLD/busbar-sld.ts | 4 +++ src/editors/SLD/foundation.ts | 28 ++++++++++----------- src/editors/SLD/substation-sld.ts | 10 ++++++-- src/editors/SLD/voltagelevel-sld.ts | 24 ++++++++++++++++-- 5 files changed, 54 insertions(+), 50 deletions(-) diff --git a/src/editors/SLD/bay-sld.ts b/src/editors/SLD/bay-sld.ts index b2515d546b..6a3f238cbc 100644 --- a/src/editors/SLD/bay-sld.ts +++ b/src/editors/SLD/bay-sld.ts @@ -97,12 +97,12 @@ export class BaySld extends LitElement implements ElementPosition { .filter(equipment => equipment.querySelector(`Terminal[connectivityNode="${pathName}"]`) != null) .forEach(equipment => { nrOfConnections++; - const x = equipment?.getAttribute('sxy:x'); - const y = equipment?.getAttribute('sxy:y'); + + const {x, y} = getPosition(equipment) if (x != null && y != null) { - totalX += parseInt(x); - totalY += parseInt(y); + totalX += x; + totalY += y; } }) @@ -141,9 +141,9 @@ export class BaySld extends LitElement implements ElementPosition { .filter(element => element.element.querySelector(`Terminal[connectivityNode="${pathName}"]`)) .forEach(element => { if (element.pos.y != null && cn.pos.y != null && (element.pos.y > cn.pos.y)) { - // drawConnection(cn.pos, element.pos, this.fullOffset, this.svg) + drawConnection(cn.pos, element.pos, this.fullOffset, this.svg) } else { - // drawConnection(element.pos, cn.pos, this.fullOffset, this.svg) + drawConnection(element.pos, cn.pos, this.fullOffset, this.svg) } }); }); @@ -158,15 +158,6 @@ export class BaySld extends LitElement implements ElementPosition { )}
--> - - - */ render(): TemplateResult { @@ -221,21 +212,4 @@ export class BaySld extends LitElement implements ElementPosition { transition: transform 200ms linear, box-shadow 250ms linear; } `; - - /** - * - this.connectivityNodeElements.forEach(cn => { - const pathName = cn.element.getAttribute('pathName'); - this.equipmentElements - .filter(element => element.element.querySelector(`Terminal[connectivityNode="${pathName}"]`)) - .forEach(element => { - // All connected Conducting Equipments are here - if (element.pos.y != null && cn.pos.y != null && (element.pos.y > cn.pos.y)) { - drawConnection(cn.pos, element.pos, this.bayRoutingSvg) - } else { - drawConnection(element.pos, cn.pos, this.bayRoutingSvg) - } - }); - }); - */ } diff --git a/src/editors/SLD/busbar-sld.ts b/src/editors/SLD/busbar-sld.ts index 203baa452b..1d43caf1e6 100644 --- a/src/editors/SLD/busbar-sld.ts +++ b/src/editors/SLD/busbar-sld.ts @@ -28,6 +28,10 @@ export class BusBasSld extends LitElement { grid-template-columns: repeat(1, 1fr); } + div { + width: 100%; + } + .busbar svg { width: 100%; } diff --git a/src/editors/SLD/foundation.ts b/src/editors/SLD/foundation.ts index 7b595d6e19..4bc7ba2658 100644 --- a/src/editors/SLD/foundation.ts +++ b/src/editors/SLD/foundation.ts @@ -258,23 +258,23 @@ export function isBusBar(bay: Element): boolean { * @param svgToDrawOn The SVG to draw the route on. */ export function drawConnection(firstPoint: Point, secondPoint: Point, fullOffset: Point, svgToDrawOn: HTMLElement): void { - console.log('tekenen!'); - console.log(firstPoint.x!) - console.log(firstPoint.y!) - console.log(secondPoint.x!) - console.log(secondPoint.y!) - console.log(fullOffset.x!) - console.log(fullOffset.y!) + // Convert the 1-based coordinates to 0-based + const firstPointX = firstPoint.x! -1; + const firstPointY = firstPoint.y! -1; + + const secondPointX = secondPoint.x! -1; + const secondPointY = secondPoint.y! -1; const shapeA = { - left: (firstPoint.x! + fullOffset.x!) * 64, - top: (firstPoint.y! + fullOffset.y!) * 64, + left: (firstPointX + fullOffset.x!) * 64, + top: (firstPointY + fullOffset.y!) * 64, width: 64, height: 64, }; + const shapeB = { - left: (secondPoint.x! + fullOffset.x!) * 64, - top: (secondPoint.y! + fullOffset.y!) * 64, + left: (secondPointX + fullOffset.x!) * 64, + top: (secondPointY + fullOffset.y!) * 64, width: 64, height: 64, }; @@ -282,8 +282,8 @@ export function drawConnection(firstPoint: Point, secondPoint: Point, fullOffset const path = OrthogonalConnector.route({ pointA: { shape: shapeA, side: 'bottom', distance: 0.5 }, pointB: { shape: shapeB, side: 'top', distance: 0.5 }, - shapeMargin: 10, - globalBoundsMargin: 25, + shapeMargin: 0, + globalBoundsMargin: 5, globalBounds: { left: 0, top: 0, @@ -305,7 +305,7 @@ export function drawConnection(firstPoint: Point, secondPoint: Point, fullOffset line.setAttribute('d', d); line.setAttribute('fill', 'transparent'); line.setAttribute('stroke', 'currentColor'); - line.setAttribute('stroke-width', '1.5'); + line.setAttribute('stroke-width', '1'); svgToDrawOn.appendChild(line); } diff --git a/src/editors/SLD/substation-sld.ts b/src/editors/SLD/substation-sld.ts index 7bc4ae6682..b8ef4b90bb 100644 --- a/src/editors/SLD/substation-sld.ts +++ b/src/editors/SLD/substation-sld.ts @@ -7,14 +7,14 @@ import { query, TemplateResult, } from 'lit-element'; -import { getPosition } from './foundation'; +import { ElementPosition, getPosition, Point } from './foundation'; import { VoltageLevelSld } from './voltagelevel-sld'; /** * SLD component of a Substation component. */ @customElement('substation-sld') -export class SubstationSld extends LitElement { +export class SubstationSld extends LitElement implements ElementPosition { /** * Property holding the Substation XML element. @@ -27,6 +27,11 @@ export class SubstationSld extends LitElement { */ @query('#svg') svg!: HTMLElement; + get fullOffset(): Point { + // Substations don't have a position. + return {x: 0, y: 0}; + } + get voltageLevels(): Element[] { return Array.from(this.element.getElementsByTagName('VoltageLevel')); } @@ -44,6 +49,7 @@ export class SubstationSld extends LitElement { const {x, y} = getPosition(voltagelevel); return html` ` })} diff --git a/src/editors/SLD/voltagelevel-sld.ts b/src/editors/SLD/voltagelevel-sld.ts index 062a394663..3ff3a885e8 100644 --- a/src/editors/SLD/voltagelevel-sld.ts +++ b/src/editors/SLD/voltagelevel-sld.ts @@ -16,7 +16,7 @@ import { ElementPosition, getPosition, isBusBar, Point, SldElement } from './fou * SLD component of a VoltageLevel component. */ @customElement('voltagelevel-sld') -export class VoltageLevelSld extends LitElement implements ElementPosition{ +export class VoltageLevelSld extends LitElement implements ElementPosition { /** * Property holding the VoltageLevel XML element. @@ -30,6 +30,9 @@ export class VoltageLevelSld extends LitElement implements ElementPosition{ @property() svg!: HTMLElement; + @property() + fullParentOffset!: Point + get fullOffset(): Point { const {x, y} = getPosition(this.element); // Extract 1 because SLD is 1-based, grid is 0-based. @@ -61,6 +64,23 @@ export class VoltageLevelSld extends LitElement implements ElementPosition{ }); } + /** + * Calculate the full X coordinates of this VoltageLevel. + */ + get fullVoltageLevelX(): number { + let highestNumber = 0; + Array.from(this.bays).forEach(bay => highestNumber = Math.max(highestNumber, bay.pos.x!)) + + Array.from(this.bays).filter(bay => bay.pos.x! == highestNumber) + .forEach(bay => { + let bayMaxX = 0; + bay.element.querySelectorAll('ConductingEquipment') + .forEach(equipment => bayMaxX = Math.max(bayMaxX, getPosition(equipment).x!)) + highestNumber = highestNumber + bayMaxX; + }) + return highestNumber; + } + firstUpdated(): void { // Pass the Substation SVG to all Bays this.shadowRoot!.querySelectorAll("bay-sld").forEach(bay => ((bay)).svg = this.svg); @@ -72,7 +92,7 @@ export class VoltageLevelSld extends LitElement implements ElementPosition{ ${this.busBars.map(busbar => html` + style="grid-column-start:${busbar.pos.x};grid-column-end:${this.fullVoltageLevelX};grid-row:${busbar.pos.y};"> ` )} ${this.bays.map(bay => From bb5e5e63ca360aa0fd5eba62a2cd72b4bfed97e0 Mon Sep 17 00:00:00 2001 From: Rob Tjalma Date: Thu, 4 Nov 2021 16:39:12 +0100 Subject: [PATCH 22/33] drawRoute only has 2 points as parameters instead of including offset --- src/editors/SLD/bay-sld.ts | 13 +++++++++---- src/editors/SLD/foundation.ts | 19 ++++++------------- src/editors/SLD/voltagelevel-sld.ts | 28 ++++++++++++++++++++++++++++ 3 files changed, 43 insertions(+), 17 deletions(-) diff --git a/src/editors/SLD/bay-sld.ts b/src/editors/SLD/bay-sld.ts index 6a3f238cbc..356469aa02 100644 --- a/src/editors/SLD/bay-sld.ts +++ b/src/editors/SLD/bay-sld.ts @@ -9,7 +9,7 @@ import { } from 'lit-element'; import { getChildElementsByTagName } from '../../foundation.js'; -import { drawConnection, ElementPosition, getPosition, Point, SldElement } from './foundation.js'; +import { drawRoute, ElementPosition, getPosition, Point, SldElement } from './foundation.js'; /** * SLD component of a Bay component. @@ -140,10 +140,15 @@ export class BaySld extends LitElement implements ElementPosition { this.equipmentElements .filter(element => element.element.querySelector(`Terminal[connectivityNode="${pathName}"]`)) .forEach(element => { - if (element.pos.y != null && cn.pos.y != null && (element.pos.y > cn.pos.y)) { - drawConnection(cn.pos, element.pos, this.fullOffset, this.svg) + const cnX = (cn.pos.x! - 1) + this.fullOffset.x!; + const cnY = (cn.pos.y! - 1) + this.fullOffset.y!; + const elementX = (element.pos.x! - 1) + this.fullOffset.x!; + const elementY = (element.pos.y! - 1) + this.fullOffset.y!; + + if ((elementY > cnY)) { + drawRoute({x: cnX, y: cnY}, {x: elementX, y: elementY}, this.svg) } else { - drawConnection(element.pos, cn.pos, this.fullOffset, this.svg) + drawRoute({x: elementX, y: elementY}, {x: cnX, y: cnY}, this.svg) } }); }); diff --git a/src/editors/SLD/foundation.ts b/src/editors/SLD/foundation.ts index 4bc7ba2658..0104e935ef 100644 --- a/src/editors/SLD/foundation.ts +++ b/src/editors/SLD/foundation.ts @@ -252,29 +252,22 @@ export function isBusBar(bay: Element): boolean { } /** - * Draw a connection from the first point to the second point. + * Draw a route from the first point to the second point. * @param firstPoint The first point of this connection. * @param secondPoint The second point of this connection. * @param svgToDrawOn The SVG to draw the route on. */ -export function drawConnection(firstPoint: Point, secondPoint: Point, fullOffset: Point, svgToDrawOn: HTMLElement): void { - // Convert the 1-based coordinates to 0-based - const firstPointX = firstPoint.x! -1; - const firstPointY = firstPoint.y! -1; - - const secondPointX = secondPoint.x! -1; - const secondPointY = secondPoint.y! -1; - +export function drawRoute(firstPoint: Point, secondPoint: Point, svgToDrawOn: HTMLElement): void { const shapeA = { - left: (firstPointX + fullOffset.x!) * 64, - top: (firstPointY + fullOffset.y!) * 64, + left: firstPoint.x! * 64, + top: firstPoint.y! * 64, width: 64, height: 64, }; const shapeB = { - left: (secondPointX + fullOffset.x!) * 64, - top: (secondPointY + fullOffset.y!) * 64, + left: secondPoint.x! * 64, + top: secondPoint.y! * 64, width: 64, height: 64, }; diff --git a/src/editors/SLD/voltagelevel-sld.ts b/src/editors/SLD/voltagelevel-sld.ts index 3ff3a885e8..4b944efece 100644 --- a/src/editors/SLD/voltagelevel-sld.ts +++ b/src/editors/SLD/voltagelevel-sld.ts @@ -84,6 +84,34 @@ export class VoltageLevelSld extends LitElement implements ElementPosition { firstUpdated(): void { // Pass the Substation SVG to all Bays this.shadowRoot!.querySelectorAll("bay-sld").forEach(bay => ((bay)).svg = this.svg); + // this.busBars.forEach(busbar => { + // const pathName = busbar.element.getElementsByTagName('ConnectivityNode')[0].getAttribute('pathName'); + + // this.bays.forEach(bay => { + // Array.from(bay.element.getElementsByTagName('ConductingEquipment')) + // .filter(eq => eq.querySelector(`Terminal[connectivityNode="${pathName}"]`)) + // .forEach(eq => { + + // const busbarX = (busbar.pos.x! - 1) + this.fullOffset.x!; + // const busbarY = (busbar.pos.y! - 1) + this.fullOffset.y!; + + // const {x, y} = getPosition(eq); + + // const eqX = (x! - 1); + // const eqY = (y! - 1) + 7; + + // console.log('Connect Busbar ' + busbar.element.getAttribute('name') + ' ' + busbarX + ',' + busbarY) + // console.log('to') + // console.log('Equipment ' + eq.getAttribute('name') + ' ' + eqX + ',' + eqY) + + // // if (busbarY != null && eqY != null && (busbarY > eqY)) { + // // drawConnection({x: eqX, y: eqY}, {x: busbarX, y: busbarY}, this.svg) + // // } else { + // // drawConnection({x: busbarX, y: busbarY}, {x: eqX, y: eqY}, this.svg) + // // } + // }) + // }) + // }) } render(): TemplateResult { From f435f286eee3bbc2adfa071efb1b3743fbc2b161 Mon Sep 17 00:00:00 2001 From: Rob Tjalma Date: Thu, 4 Nov 2021 17:40:58 +0100 Subject: [PATCH 23/33] First version routes to busbar --- src/editors/SLD/bay-sld.ts | 4 ++ src/editors/SLD/voltagelevel-sld.ts | 64 ++++++++++++++++------------- 2 files changed, 39 insertions(+), 29 deletions(-) diff --git a/src/editors/SLD/bay-sld.ts b/src/editors/SLD/bay-sld.ts index 356469aa02..dd95b267ae 100644 --- a/src/editors/SLD/bay-sld.ts +++ b/src/editors/SLD/bay-sld.ts @@ -22,6 +22,10 @@ export class BaySld extends LitElement implements ElementPosition { */ @property() element!: Element; + + get name() { + return this.element.getAttribute('name'); + } /** * Holding a reference to the Substation SVG to draw routes between elements on. diff --git a/src/editors/SLD/voltagelevel-sld.ts b/src/editors/SLD/voltagelevel-sld.ts index 4b944efece..e3814c505e 100644 --- a/src/editors/SLD/voltagelevel-sld.ts +++ b/src/editors/SLD/voltagelevel-sld.ts @@ -10,7 +10,7 @@ import { import { getChildElementsByTagName } from '../../foundation.js'; import { BaySld } from './bay-sld.js'; -import { ElementPosition, getPosition, isBusBar, Point, SldElement } from './foundation.js'; +import { drawRoute, ElementPosition, getPosition, isBusBar, Point, SldElement } from './foundation.js'; /** * SLD component of a VoltageLevel component. @@ -84,34 +84,40 @@ export class VoltageLevelSld extends LitElement implements ElementPosition { firstUpdated(): void { // Pass the Substation SVG to all Bays this.shadowRoot!.querySelectorAll("bay-sld").forEach(bay => ((bay)).svg = this.svg); - // this.busBars.forEach(busbar => { - // const pathName = busbar.element.getElementsByTagName('ConnectivityNode')[0].getAttribute('pathName'); - - // this.bays.forEach(bay => { - // Array.from(bay.element.getElementsByTagName('ConductingEquipment')) - // .filter(eq => eq.querySelector(`Terminal[connectivityNode="${pathName}"]`)) - // .forEach(eq => { - - // const busbarX = (busbar.pos.x! - 1) + this.fullOffset.x!; - // const busbarY = (busbar.pos.y! - 1) + this.fullOffset.y!; - - // const {x, y} = getPosition(eq); - - // const eqX = (x! - 1); - // const eqY = (y! - 1) + 7; - - // console.log('Connect Busbar ' + busbar.element.getAttribute('name') + ' ' + busbarX + ',' + busbarY) - // console.log('to') - // console.log('Equipment ' + eq.getAttribute('name') + ' ' + eqX + ',' + eqY) - - // // if (busbarY != null && eqY != null && (busbarY > eqY)) { - // // drawConnection({x: eqX, y: eqY}, {x: busbarX, y: busbarY}, this.svg) - // // } else { - // // drawConnection({x: busbarX, y: busbarY}, {x: eqX, y: eqY}, this.svg) - // // } - // }) - // }) - // }) + this.busBars.forEach(busbar => { + const pathName = busbar.element.getElementsByTagName('ConnectivityNode')[0].getAttribute('pathName'); + + this.bays.forEach(bay => { + // Get the Bay offset. + let bayOffsetX: number | undefined; + let bayOffsetY: number | undefined; + + Array.from(this.shadowRoot!.querySelectorAll("bay-sld")) + .filter(a => ((a)).name == bay.element.getAttribute('name')) + .forEach(b => { + const casted = ((b)); + bayOffsetX = casted.fullOffset.x; + bayOffsetY = casted.fullOffset.y; + }); + + Array.from(bay.element.getElementsByTagName('ConductingEquipment')) + .filter(eq => eq.querySelector(`Terminal[connectivityNode="${pathName}"]`)) + .forEach(eq => { + + const busbarX = (busbar.pos.x! - 1) + this.fullOffset.x!; + const busbarY = (busbar.pos.y! - 1) + this.fullOffset.y!; + + const eqX = (getPosition(eq).x! - 1) + bayOffsetX!; + const eqY = (getPosition(eq).y! - 1) + bayOffsetY!; + + if (busbarY != null && eqY != null && (busbarY > eqY)) { + drawRoute({x: eqX, y: eqY}, {x: eqX, y: busbarY}, this.svg) + } else { + drawRoute({x: eqX, y: busbarY}, {x: eqX, y: eqY}, this.svg) + } + }) + }) + }) } render(): TemplateResult { From a2ad11ab3443a47e689cd35b97cb396a0ea34dc9 Mon Sep 17 00:00:00 2001 From: Rob Tjalma Date: Thu, 4 Nov 2021 21:34:59 +0100 Subject: [PATCH 24/33] Small changes --- src/editors/SLD/bay-sld.ts | 3 ++- src/editors/SLD/busbar-sld.ts | 16 ++++++++++------ src/editors/SLD/substation-sld.ts | 2 +- src/editors/SLD/voltagelevel-sld.ts | 5 +++-- src/icons.ts | 2 +- 5 files changed, 17 insertions(+), 11 deletions(-) diff --git a/src/editors/SLD/bay-sld.ts b/src/editors/SLD/bay-sld.ts index dd95b267ae..d302d3ea40 100644 --- a/src/editors/SLD/bay-sld.ts +++ b/src/editors/SLD/bay-sld.ts @@ -46,7 +46,8 @@ export class BaySld extends LitElement implements ElementPosition { /** * True if this Bay is built up downwards. */ - downer = true; + @property() + downer = false; /** * Get all the unconnected Nodes of this particular Bay. diff --git a/src/editors/SLD/busbar-sld.ts b/src/editors/SLD/busbar-sld.ts index 1d43caf1e6..27c8129d21 100644 --- a/src/editors/SLD/busbar-sld.ts +++ b/src/editors/SLD/busbar-sld.ts @@ -16,23 +16,27 @@ export class BusBasSld extends LitElement { @property() element!: Element; + /** + * True if this Bay is built up downwards. + */ + @property() + downer = false; + render(): TemplateResult { - return html`
+ return html`

${this.element.getAttribute('name')}

${busBarIcon}
`; } static styles = css` - .busbar { - grid-template-columns: repeat(1, 1fr); - } - div { + grid-template-columns: repeat(1, 1fr); width: 100%; + height: 64px; } - .busbar svg { + div svg { width: 100%; } diff --git a/src/editors/SLD/substation-sld.ts b/src/editors/SLD/substation-sld.ts index b8ef4b90bb..46de855f28 100644 --- a/src/editors/SLD/substation-sld.ts +++ b/src/editors/SLD/substation-sld.ts @@ -80,7 +80,7 @@ export class SubstationSld extends LitElement implements ElementPosition { padding: 64px; } - #svg { + svg { position: absolute; z-index: -5; } diff --git a/src/editors/SLD/voltagelevel-sld.ts b/src/editors/SLD/voltagelevel-sld.ts index e3814c505e..4c438f6980 100644 --- a/src/editors/SLD/voltagelevel-sld.ts +++ b/src/editors/SLD/voltagelevel-sld.ts @@ -126,6 +126,7 @@ export class VoltageLevelSld extends LitElement implements ElementPosition { ${this.busBars.map(busbar => html` ` )} @@ -133,8 +134,8 @@ export class VoltageLevelSld extends LitElement implements ElementPosition { html` - downer + style="grid-column:${bay.pos.x!};grid-row:${bay.pos.y!};" + .downer=${true} > ` )} diff --git a/src/icons.ts b/src/icons.ts index 460260f439..27d8779fed 100644 --- a/src/icons.ts +++ b/src/icons.ts @@ -472,7 +472,7 @@ export const busBarIcon = html` x2="100%" y2="0" stroke="currentColor" - stroke-width="3" + stroke-width="4" /> `; From a0331afd18c781652ab6cbb0f8d41d17f79d72a4 Mon Sep 17 00:00:00 2001 From: Rob Tjalma Date: Thu, 4 Nov 2021 22:41:09 +0100 Subject: [PATCH 25/33] Small changes --- src/editors/SLD/bay-sld.ts | 26 ++++++++----- src/editors/SLD/foundation.ts | 10 ----- src/editors/SLD/substation-sld.ts | 25 ------------- src/editors/SLD/voltagelevel-sld.ts | 57 +++++++++++++++++++++-------- 4 files changed, 58 insertions(+), 60 deletions(-) diff --git a/src/editors/SLD/bay-sld.ts b/src/editors/SLD/bay-sld.ts index d302d3ea40..760ff7ba65 100644 --- a/src/editors/SLD/bay-sld.ts +++ b/src/editors/SLD/bay-sld.ts @@ -4,7 +4,6 @@ import { html, LitElement, property, - query, TemplateResult, } from 'lit-element'; @@ -139,7 +138,10 @@ export class BaySld extends LitElement implements ElementPosition { return Math.max(...posYs, 2); } - firstUpdated(): void { + /** + * Draw all the routes of all the ConnectivityNodes in this Bay. + */ + drawConnectivityNodeConnections(): void { this.connectivityNodeElements.forEach(cn => { const pathName = cn.element.getAttribute('pathName'); this.equipmentElements @@ -159,15 +161,19 @@ export class BaySld extends LitElement implements ElementPosition { }); } + firstUpdated(): void { + this.drawConnectivityNodeConnections(); + } + /** - + */ render(): TemplateResult { diff --git a/src/editors/SLD/foundation.ts b/src/editors/SLD/foundation.ts index 0104e935ef..c2206db08a 100644 --- a/src/editors/SLD/foundation.ts +++ b/src/editors/SLD/foundation.ts @@ -240,16 +240,6 @@ export function updateEdges(nodes: GraphNode[], edges: GraphEdge[]): void { } }); } -/** - * Checking of a Bay is a BusBar or not. - * @param bay The bay to check. - * @returns Is the Bay a BusBar or not. - */ -export function isBusBar(bay: Element): boolean { - return ( - bay.children.length === 1 && bay.children[0].tagName === 'ConnectivityNode' - ); -} /** * Draw a route from the first point to the second point. diff --git a/src/editors/SLD/substation-sld.ts b/src/editors/SLD/substation-sld.ts index 46de855f28..974621b10c 100644 --- a/src/editors/SLD/substation-sld.ts +++ b/src/editors/SLD/substation-sld.ts @@ -85,29 +85,4 @@ export class SubstationSld extends LitElement implements ElementPosition { z-index: -5; } `; - - /** - * - // this.voltageLevels.forEach(voltageLevel => { - // getChildElementsByTagName(voltageLevel, 'Bay') - // .filter(bay => isBusBar(bay)) - // .forEach(busbar => { - // const pathName = busbar.getElementsByTagName('ConnectivityNode')[0].getAttribute('pathName'); - - // getChildElementsByTagName(voltageLevel, 'Bay') - // .filter(bay => !isBusBar(bay)) - // .forEach(bay => { - // Array.from(bay.getElementsByTagName('ConductingEquipment')) - // .filter(eq => eq.querySelector(`Terminal[connectivityNode="${pathName}"]`)) - // .forEach(eq => { - // const [x, y] = getPosition(eq); - // console.log({x, y}) - - // drawConnection({x: parseInt(busbar.getAttribute('sxy:x')!), y: parseInt(busbar.getAttribute('sxy:y')!)}, {x, y}, this.routingSvg); - // }) - // }) - // }) - // }) - // drawConnection({x:4, y:1}, {x:4, y:3}, this.routingSvg) - */ } diff --git a/src/editors/SLD/voltagelevel-sld.ts b/src/editors/SLD/voltagelevel-sld.ts index 4c438f6980..553d98a8eb 100644 --- a/src/editors/SLD/voltagelevel-sld.ts +++ b/src/editors/SLD/voltagelevel-sld.ts @@ -4,13 +4,12 @@ import { html, LitElement, property, - query, TemplateResult, } from 'lit-element'; import { getChildElementsByTagName } from '../../foundation.js'; import { BaySld } from './bay-sld.js'; -import { drawRoute, ElementPosition, getPosition, isBusBar, Point, SldElement } from './foundation.js'; +import { drawRoute, ElementPosition, getPosition, Point, SldElement } from './foundation.js'; /** * SLD component of a VoltageLevel component. @@ -39,13 +38,24 @@ export class VoltageLevelSld extends LitElement implements ElementPosition { // Also, add offset from parent. return {x: x! - 1, y: y! - 1}; } + + /** + * Checking of a Bay is a BusBar or not. + * @param bay The bay to check. + * @returns Is the Bay a BusBar or not. + */ + isBusBar(bay: Element): boolean { + return ( + bay.children.length === 1 && bay.children[0].tagName === 'ConnectivityNode' + ); + } /** * Get all the BusBars from the VoltageLevel element. */ get busBars(): SldElement[] { return getChildElementsByTagName(this.element, 'Bay') - .filter(bay => isBusBar(bay)) + .filter(bay => this.isBusBar(bay)) .map(bay => { const {x, y} = getPosition(bay); return { element: bay, pos: { x, y } }; @@ -57,7 +67,7 @@ export class VoltageLevelSld extends LitElement implements ElementPosition { */ get bays(): SldElement[] { return getChildElementsByTagName(this.element, 'Bay') - .filter(bay => !isBusBar(bay)) + .filter(bay => !this.isBusBar(bay)) .map(bay => { const {x, y} = getPosition(bay); return { element: bay, pos: { x, y } }; @@ -67,23 +77,33 @@ export class VoltageLevelSld extends LitElement implements ElementPosition { /** * Calculate the full X coordinates of this VoltageLevel. */ - get fullVoltageLevelX(): number { - let highestNumber = 0; - Array.from(this.bays).forEach(bay => highestNumber = Math.max(highestNumber, bay.pos.x!)) - - Array.from(this.bays).filter(bay => bay.pos.x! == highestNumber) + get biggestVoltageLevelXCoordinate(): number { + let finalX = 0; + // Get the x of the last bay (basically the 'biggest' x) + Array.from(this.bays).forEach(bay => finalX = Math.max(finalX, bay.pos.x!)) + + /** + * Because the width of the last bay is also needed, look up the bay + * and find the ConductingEquipment containing the biggest x coordinate. + * + * TODO: Make more elegant. + */ + Array.from(this.bays) + .filter(bay => bay.pos.x! == finalX) .forEach(bay => { let bayMaxX = 0; bay.element.querySelectorAll('ConductingEquipment') .forEach(equipment => bayMaxX = Math.max(bayMaxX, getPosition(equipment).x!)) - highestNumber = highestNumber + bayMaxX; + finalX += bayMaxX; }) - return highestNumber; + + return finalX; } - firstUpdated(): void { - // Pass the Substation SVG to all Bays - this.shadowRoot!.querySelectorAll("bay-sld").forEach(bay => ((bay)).svg = this.svg); + /** + * Draw all the routes of all the BusBars in this VoltageLevel. + */ + drawBusBarConnections(): void { this.busBars.forEach(busbar => { const pathName = busbar.element.getElementsByTagName('ConnectivityNode')[0].getAttribute('pathName'); @@ -120,6 +140,13 @@ export class VoltageLevelSld extends LitElement implements ElementPosition { }) } + firstUpdated(): void { + // Pass the Substation SVG to all Bays + this.shadowRoot!.querySelectorAll("bay-sld").forEach(bay => ((bay)).svg = this.svg); + + this.drawBusBarConnections(); + } + render(): TemplateResult { return html`
@@ -127,7 +154,7 @@ export class VoltageLevelSld extends LitElement implements ElementPosition { html` + style="grid-column-start:${busbar.pos.x};grid-column-end:${this.biggestVoltageLevelXCoordinate};grid-row:${busbar.pos.y};"> ` )} ${this.bays.map(bay => From f9825e00d6b3dfeff33323f0519512d8ece865ee Mon Sep 17 00:00:00 2001 From: Rob Tjalma Date: Fri, 5 Nov 2021 16:39:23 +0100 Subject: [PATCH 26/33] Little refactoring --- src/editors/SLD/bay-sld.ts | 21 ++++++++++++--------- src/editors/SLD/foundation.ts | 16 +++++++++++++--- src/editors/SLD/substation-sld.ts | 16 +++++++++++----- src/editors/SLD/voltagelevel-sld.ts | 24 ++++++++++++++---------- 4 files changed, 50 insertions(+), 27 deletions(-) diff --git a/src/editors/SLD/bay-sld.ts b/src/editors/SLD/bay-sld.ts index 760ff7ba65..8db9ab5c2a 100644 --- a/src/editors/SLD/bay-sld.ts +++ b/src/editors/SLD/bay-sld.ts @@ -8,13 +8,13 @@ import { } from 'lit-element'; import { getChildElementsByTagName } from '../../foundation.js'; -import { drawRoute, ElementPosition, getPosition, Point, SldElement } from './foundation.js'; +import { drawRoute, XYPosition, getPosition, Point, SldElement } from './foundation.js'; /** * SLD component of a Bay component. */ @customElement('bay-sld') -export class BaySld extends LitElement implements ElementPosition { +export class BaySld extends LitElement implements XYPosition { /** * Property holding the Bay XML element. @@ -32,15 +32,18 @@ export class BaySld extends LitElement implements ElementPosition { @property() svg!: HTMLElement; + /** + * Overridden from XYPosition + */ + // -------------------------- @property() fullParentOffset!: Point - get fullOffset(): Point { + get myOwnFullOffset(): Point { const {x, y} = getPosition(this.element); - // Extract 1 because SLD is 1-based, grid is 0-based. - // Also, add offset from parent. return {x: (x! - 1) + this.fullParentOffset.x!, y: (y! - 1) + this.fullParentOffset.y!}; } + // -------------------------- /** * True if this Bay is built up downwards. @@ -147,10 +150,10 @@ export class BaySld extends LitElement implements ElementPosition { this.equipmentElements .filter(element => element.element.querySelector(`Terminal[connectivityNode="${pathName}"]`)) .forEach(element => { - const cnX = (cn.pos.x! - 1) + this.fullOffset.x!; - const cnY = (cn.pos.y! - 1) + this.fullOffset.y!; - const elementX = (element.pos.x! - 1) + this.fullOffset.x!; - const elementY = (element.pos.y! - 1) + this.fullOffset.y!; + const cnX = (cn.pos.x! - 1) + this.myOwnFullOffset.x!; + const cnY = (cn.pos.y! - 1) + this.myOwnFullOffset.y!; + const elementX = (element.pos.x! - 1) + this.myOwnFullOffset.x!; + const elementY = (element.pos.y! - 1) + this.myOwnFullOffset.y!; if ((elementY > cnY)) { drawRoute({x: cnX, y: cnY}, {x: elementX, y: elementY}, this.svg) diff --git a/src/editors/SLD/foundation.ts b/src/editors/SLD/foundation.ts index c2206db08a..45f0bb1fb5 100644 --- a/src/editors/SLD/foundation.ts +++ b/src/editors/SLD/foundation.ts @@ -34,10 +34,20 @@ export interface SldElement { } /** - * Defining specific method for getting the element's full offset. + * Class containing properties/functions for exchanging X/Y offsets. */ -export interface ElementPosition { - get fullOffset(): Point +export interface XYPosition { + /** + * Full X and Y offset of the parent of this element (0-based). + * Should be set by the parent of this element. + */ + fullParentOffset: Point + + /** + * Full X and Y offset of this element (0-based). + * Should be implemented with the 'fullParentOffset' property + */ + get myOwnFullOffset(): Point; } export function getPosition(element: Element): Point { diff --git a/src/editors/SLD/substation-sld.ts b/src/editors/SLD/substation-sld.ts index 974621b10c..17e49b3d1a 100644 --- a/src/editors/SLD/substation-sld.ts +++ b/src/editors/SLD/substation-sld.ts @@ -7,14 +7,14 @@ import { query, TemplateResult, } from 'lit-element'; -import { ElementPosition, getPosition, Point } from './foundation'; +import { XYPosition, getPosition, Point } from './foundation'; import { VoltageLevelSld } from './voltagelevel-sld'; /** * SLD component of a Substation component. */ @customElement('substation-sld') -export class SubstationSld extends LitElement implements ElementPosition { +export class SubstationSld extends LitElement implements XYPosition { /** * Property holding the Substation XML element. @@ -27,10 +27,16 @@ export class SubstationSld extends LitElement implements ElementPosition { */ @query('#svg') svg!: HTMLElement; - get fullOffset(): Point { - // Substations don't have a position. + /** + * Overridden from XYPosition + */ + // -------------------------- + fullParentOffset!: Point + + get myOwnFullOffset(): Point { return {x: 0, y: 0}; } + // -------------------------- get voltageLevels(): Element[] { return Array.from(this.element.getElementsByTagName('VoltageLevel')); @@ -49,7 +55,7 @@ export class SubstationSld extends LitElement implements ElementPosition { const {x, y} = getPosition(voltagelevel); return html` ` })} diff --git a/src/editors/SLD/voltagelevel-sld.ts b/src/editors/SLD/voltagelevel-sld.ts index 553d98a8eb..eafdcb0f17 100644 --- a/src/editors/SLD/voltagelevel-sld.ts +++ b/src/editors/SLD/voltagelevel-sld.ts @@ -9,13 +9,13 @@ import { import { getChildElementsByTagName } from '../../foundation.js'; import { BaySld } from './bay-sld.js'; -import { drawRoute, ElementPosition, getPosition, Point, SldElement } from './foundation.js'; +import { drawRoute, XYPosition, getPosition, Point, SldElement } from './foundation.js'; /** * SLD component of a VoltageLevel component. */ @customElement('voltagelevel-sld') -export class VoltageLevelSld extends LitElement implements ElementPosition { +export class VoltageLevelSld extends LitElement implements XYPosition { /** * Property holding the VoltageLevel XML element. @@ -29,15 +29,19 @@ export class VoltageLevelSld extends LitElement implements ElementPosition { @property() svg!: HTMLElement; + /** + * Overridden from XYPosition + */ + // -------------------------- @property() fullParentOffset!: Point - get fullOffset(): Point { + get myOwnFullOffset(): Point { + // Substation doesn't have a position, so not used it. const {x, y} = getPosition(this.element); - // Extract 1 because SLD is 1-based, grid is 0-based. - // Also, add offset from parent. return {x: x! - 1, y: y! - 1}; } + // -------------------------- /** * Checking of a Bay is a BusBar or not. @@ -116,16 +120,16 @@ export class VoltageLevelSld extends LitElement implements ElementPosition { .filter(a => ((a)).name == bay.element.getAttribute('name')) .forEach(b => { const casted = ((b)); - bayOffsetX = casted.fullOffset.x; - bayOffsetY = casted.fullOffset.y; + bayOffsetX = casted.myOwnFullOffset.x; + bayOffsetY = casted.myOwnFullOffset.y; }); Array.from(bay.element.getElementsByTagName('ConductingEquipment')) .filter(eq => eq.querySelector(`Terminal[connectivityNode="${pathName}"]`)) .forEach(eq => { - const busbarX = (busbar.pos.x! - 1) + this.fullOffset.x!; - const busbarY = (busbar.pos.y! - 1) + this.fullOffset.y!; + const busbarX = (busbar.pos.x! - 1) + this.myOwnFullOffset.x!; + const busbarY = (busbar.pos.y! - 1) + this.myOwnFullOffset.y!; const eqX = (getPosition(eq).x! - 1) + bayOffsetX!; const eqY = (getPosition(eq).y! - 1) + bayOffsetY!; @@ -160,7 +164,7 @@ export class VoltageLevelSld extends LitElement implements ElementPosition { ${this.bays.map(bay => html` From 97e14b1f41184b92508e0299e9b99f511c9c79e3 Mon Sep 17 00:00:00 2001 From: Rob Tjalma Date: Sun, 7 Nov 2021 23:00:54 +0100 Subject: [PATCH 27/33] Added first version of route 'algorithm' --- src/editors/SLD/foundation.ts | 41 ++++++++++++++++++++++++++--- src/editors/SLD/ortho-connector.ts | 2 +- src/editors/SLD/substation-sld.ts | 1 + src/editors/SLD/voltagelevel-sld.ts | 10 +++++-- 4 files changed, 48 insertions(+), 6 deletions(-) diff --git a/src/editors/SLD/foundation.ts b/src/editors/SLD/foundation.ts index 45f0bb1fb5..36b12a8b8f 100644 --- a/src/editors/SLD/foundation.ts +++ b/src/editors/SLD/foundation.ts @@ -1,4 +1,4 @@ -import { OrthogonalConnector } from "./ortho-connector"; +import { OrthogonalConnector, Side } from "./ortho-connector"; export type GraphNode = { element: Element; @@ -33,6 +33,11 @@ export interface SldElement { pos: Point; } +interface PointSides { + firstPointSide: Side; + secondPointSide: Side; +} + /** * Class containing properties/functions for exchanging X/Y offsets. */ @@ -251,10 +256,37 @@ export function updateEdges(nodes: GraphNode[], edges: GraphEdge[]): void { }); } +function getDirections(firstPoint: Point, secondPoint: Point): PointSides { + // If points are underneath each other.. + if (firstPoint.x! == secondPoint.x!) { + // Determine which one stands on top. + if (firstPoint.y! < secondPoint.y!) { + return {firstPointSide: 'bottom', secondPointSide: 'top'}; + } else { + return {firstPointSide: 'top', secondPointSide: 'bottom'}; + } + } else { + if (firstPoint.y! <= secondPoint.y!) { + if (firstPoint.x! < secondPoint.x!) { + return {firstPointSide: 'right', secondPointSide: 'left'}; + } else { + return {firstPointSide: 'left', secondPointSide: 'right'}; + } + } else { + if (firstPoint.x! < secondPoint.x!) { + return {firstPointSide: 'left', secondPointSide: 'right'}; + } else { + return {firstPointSide: 'right', secondPointSide: 'left'}; + } + } + } +} + /** * Draw a route from the first point to the second point. * @param firstPoint The first point of this connection. * @param secondPoint The second point of this connection. + * @param downer Is this part drawn up or down? * @param svgToDrawOn The SVG to draw the route on. */ export function drawRoute(firstPoint: Point, secondPoint: Point, svgToDrawOn: HTMLElement): void { @@ -272,9 +304,12 @@ export function drawRoute(firstPoint: Point, secondPoint: Point, svgToDrawOn: HT height: 64, }; + // Get the preferred sides. + const {firstPointSide, secondPointSide} = getDirections(firstPoint, secondPoint); + const path = OrthogonalConnector.route({ - pointA: { shape: shapeA, side: 'bottom', distance: 0.5 }, - pointB: { shape: shapeB, side: 'top', distance: 0.5 }, + pointA: { shape: shapeA, side: firstPointSide, distance: 0.5 }, + pointB: { shape: shapeB, side: secondPointSide, distance: 0.5 }, shapeMargin: 0, globalBoundsMargin: 5, globalBounds: { diff --git a/src/editors/SLD/ortho-connector.ts b/src/editors/SLD/ortho-connector.ts index a6098fe37b..591f06b60b 100644 --- a/src/editors/SLD/ortho-connector.ts +++ b/src/editors/SLD/ortho-connector.ts @@ -9,7 +9,7 @@ type BasicCardinalPoint = 'n' | 'e' | 's' | 'w'; type Direction = 'v' | 'h'; -type Side = 'top' | 'right' | 'bottom' | 'left'; +export type Side = 'top' | 'right' | 'bottom' | 'left'; type BendDirection = BasicCardinalPoint | 'unknown' | 'none'; /** diff --git a/src/editors/SLD/substation-sld.ts b/src/editors/SLD/substation-sld.ts index 17e49b3d1a..3c53ebe9dc 100644 --- a/src/editors/SLD/substation-sld.ts +++ b/src/editors/SLD/substation-sld.ts @@ -56,6 +56,7 @@ export class SubstationSld extends LitElement implements XYPosition { return html` ` })} diff --git a/src/editors/SLD/voltagelevel-sld.ts b/src/editors/SLD/voltagelevel-sld.ts index eafdcb0f17..3a7370359c 100644 --- a/src/editors/SLD/voltagelevel-sld.ts +++ b/src/editors/SLD/voltagelevel-sld.ts @@ -29,6 +29,12 @@ export class VoltageLevelSld extends LitElement implements XYPosition { @property() svg!: HTMLElement; + /** + * True if this VoltageLevel is built up downwards. + */ + @property() + downer = false; + /** * Overridden from XYPosition */ @@ -157,7 +163,7 @@ export class VoltageLevelSld extends LitElement implements XYPosition { ${this.busBars.map(busbar => html` ` )} @@ -166,7 +172,7 @@ export class VoltageLevelSld extends LitElement implements XYPosition { .element=${bay.element} .fullParentOffset=${this.myOwnFullOffset} style="grid-column:${bay.pos.x!};grid-row:${bay.pos.y!};" - .downer=${true} + .downer=${this.downer} > ` )} From 7b15fa4a725c0dbc49f39ff9f901af465f21aefa Mon Sep 17 00:00:00 2001 From: Rob Tjalma Date: Sun, 7 Nov 2021 23:49:26 +0100 Subject: [PATCH 28/33] Refactored BusBar icon --- src/editors/SLD/busbar-sld.ts | 15 ++++++++++++--- src/icons.ts | 2 +- 2 files changed, 13 insertions(+), 4 deletions(-) diff --git a/src/editors/SLD/busbar-sld.ts b/src/editors/SLD/busbar-sld.ts index 27c8129d21..011b80d1cb 100644 --- a/src/editors/SLD/busbar-sld.ts +++ b/src/editors/SLD/busbar-sld.ts @@ -1,5 +1,6 @@ import { css, + CSSResult, customElement, html, LitElement, @@ -24,16 +25,24 @@ export class BusBasSld extends LitElement { render(): TemplateResult { return html`
-

${this.element.getAttribute('name')}

- ${busBarIcon} + ${this.downer ? html`

${this.element.getAttribute('name')}

+ ${busBarIcon}` : html`${busBarIcon}

${this.element.getAttribute('name')}

`}
`; } + /** + * TODO: Always assumes going down. + * justify-content: flex-end; draws everything at bottom. + * justify-content: flex-start; draws everything on top. + */ static styles = css` div { grid-template-columns: repeat(1, 1fr); width: 100%; height: 64px; + display: flex; + justify-content: flex-end; + flex-direction: column; } div svg { @@ -53,4 +62,4 @@ export class BusBasSld extends LitElement { text-align: left; } `; -} +} \ No newline at end of file diff --git a/src/icons.ts b/src/icons.ts index 27d8779fed..68a3992c02 100644 --- a/src/icons.ts +++ b/src/icons.ts @@ -465,7 +465,7 @@ export const connectivityNodeIcon = html` `; -export const busBarIcon = html` +export const busBarIcon = html` Date: Mon, 8 Nov 2021 11:20:31 +0100 Subject: [PATCH 29/33] small route refactor --- src/editors/SLD/foundation.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/editors/SLD/foundation.ts b/src/editors/SLD/foundation.ts index 36b12a8b8f..5b9627dab3 100644 --- a/src/editors/SLD/foundation.ts +++ b/src/editors/SLD/foundation.ts @@ -311,7 +311,7 @@ export function drawRoute(firstPoint: Point, secondPoint: Point, svgToDrawOn: HT pointA: { shape: shapeA, side: firstPointSide, distance: 0.5 }, pointB: { shape: shapeB, side: secondPointSide, distance: 0.5 }, shapeMargin: 0, - globalBoundsMargin: 5, + globalBoundsMargin: 0, globalBounds: { left: 0, top: 0, From ad2930386c1f44a49681f6c84064225da6577992 Mon Sep 17 00:00:00 2001 From: Rob Tjalma Date: Mon, 8 Nov 2021 13:10:53 +0100 Subject: [PATCH 30/33] refactoring --- src/editors/SLD/bay-sld.ts | 12 ++++++------ src/editors/SLD/busbar-sld.ts | 2 +- src/editors/SLD/voltagelevel-sld.ts | 2 +- 3 files changed, 8 insertions(+), 8 deletions(-) diff --git a/src/editors/SLD/bay-sld.ts b/src/editors/SLD/bay-sld.ts index 8db9ab5c2a..f6933f6ec9 100644 --- a/src/editors/SLD/bay-sld.ts +++ b/src/editors/SLD/bay-sld.ts @@ -32,6 +32,12 @@ export class BaySld extends LitElement implements XYPosition { @property() svg!: HTMLElement; + /** + * True if this Bay is built up downwards. + */ + @property() + downer: boolean = false; + /** * Overridden from XYPosition */ @@ -45,12 +51,6 @@ export class BaySld extends LitElement implements XYPosition { } // -------------------------- - /** - * True if this Bay is built up downwards. - */ - @property() - downer = false; - /** * Get all the unconnected Nodes of this particular Bay. */ diff --git a/src/editors/SLD/busbar-sld.ts b/src/editors/SLD/busbar-sld.ts index 011b80d1cb..b2cc63ee39 100644 --- a/src/editors/SLD/busbar-sld.ts +++ b/src/editors/SLD/busbar-sld.ts @@ -21,7 +21,7 @@ export class BusBasSld extends LitElement { * True if this Bay is built up downwards. */ @property() - downer = false; + downer: boolean = false; render(): TemplateResult { return html`
diff --git a/src/editors/SLD/voltagelevel-sld.ts b/src/editors/SLD/voltagelevel-sld.ts index 3a7370359c..f9727ac18e 100644 --- a/src/editors/SLD/voltagelevel-sld.ts +++ b/src/editors/SLD/voltagelevel-sld.ts @@ -33,7 +33,7 @@ export class VoltageLevelSld extends LitElement implements XYPosition { * True if this VoltageLevel is built up downwards. */ @property() - downer = false; + downer: boolean = false; /** * Overridden from XYPosition From 81f71f7a888cf4337def35d5b0c1e1aa933859b3 Mon Sep 17 00:00:00 2001 From: Rob Tjalma Date: Mon, 8 Nov 2021 21:43:09 +0100 Subject: [PATCH 31/33] Small refactoring --- src/editors/SLD/bay-sld.ts | 54 ++++++++++++----------------- src/editors/SLD/substation-sld.ts | 7 ++++ src/editors/SLD/voltagelevel-sld.ts | 18 ++++++---- 3 files changed, 41 insertions(+), 38 deletions(-) diff --git a/src/editors/SLD/bay-sld.ts b/src/editors/SLD/bay-sld.ts index f6933f6ec9..023048ecaa 100644 --- a/src/editors/SLD/bay-sld.ts +++ b/src/editors/SLD/bay-sld.ts @@ -38,6 +38,12 @@ export class BaySld extends LitElement implements XYPosition { @property() downer: boolean = false; + /** + * The space multiplyer of elements within a single bay. + */ + @property() + baySpaceMultiply: number = 1; + /** * Overridden from XYPosition */ @@ -121,28 +127,7 @@ export class BaySld extends LitElement implements XYPosition { } /** - * The max x and y of this particular Bay. - */ - get xMax(): number { - const posXx = ( - this.equipmentElements - .filter(sldelement => sldelement.pos.x) - .map(sldelement => sldelement.pos.x) - ); - return Math.max(...posXx, 2); - } - - get yMax(): number { - const posYs = ( - this.equipmentElements - .filter(sldelement => sldelement.pos.y) - .map(sldelement => sldelement.pos.y) - ); - return Math.max(...posYs, 2); - } - - /** - * Draw all the routes of all the ConnectivityNodes in this Bay. + * Draw all the ConnectivityNode routes in this Bay. */ drawConnectivityNodeConnections(): void { this.connectivityNodeElements.forEach(cn => { @@ -150,10 +135,11 @@ export class BaySld extends LitElement implements XYPosition { this.equipmentElements .filter(element => element.element.querySelector(`Terminal[connectivityNode="${pathName}"]`)) .forEach(element => { - const cnX = (cn.pos.x! - 1) + this.myOwnFullOffset.x!; - const cnY = (cn.pos.y! - 1) + this.myOwnFullOffset.y!; - const elementX = (element.pos.x! - 1) + this.myOwnFullOffset.x!; - const elementY = (element.pos.y! - 1) + this.myOwnFullOffset.y!; + const cnX = (cn.pos.x! * this.baySpaceMultiply - 1) + this.myOwnFullOffset.x!; + const cnY = (cn.pos.y! * this.baySpaceMultiply - 1) + this.myOwnFullOffset.y!; + + const elementX = (element.pos.x! * this.baySpaceMultiply - 1) + this.myOwnFullOffset.x!; + const elementY = (element.pos.y! * this.baySpaceMultiply - 1) + this.myOwnFullOffset.y!; if ((elementY > cnY)) { drawRoute({x: cnX, y: cnY}, {x: elementX, y: elementY}, this.svg) @@ -168,6 +154,10 @@ export class BaySld extends LitElement implements XYPosition { this.drawConnectivityNodeConnections(); } + getElementPositionAdjustedWithMultiplyer(xYposition: number) { + return xYposition * this.baySpaceMultiply; + } + /**